脱壳系列_2_IAT加密壳_详细版_解法1_包含脚本
1 查看壳程序信息
使用ExeInfoPe
分析:
发现这个壳的类型没有被识别出来,Vc 6.0倒是识别出来了,Vc 6.0的特征是 入口函数先调用GetVersion()
2 用OD找OEP
- 拖进OD
发现 这个壳和我们的正常程序很像。但是并不是我们的真正程序入口
因为vc6.0特征的第一个调用的是GetVersion(),给GetVersion()下 硬件断点
//第一次断下来,但是根据栈回溯,调用者并不是我们的模块
//第二次断下来,就应该是了
//找到入口后 栈上右键 反汇编窗口跟随
//如下
在OD看内存布局,一般.rdata的最前面是放的IAT,而且OD数据窗口默认就是.rdata的起始位置。
也可以点一个call /jmp [];看一下来找IAT表
对那个地方下一个硬件写入断点 --DWORD,即当前面的壳程序在修改的时候就能段下来找到壳的加密算法的地方
3 对加密部分分析
这个分析的过程,需要自己去啃,是分享不了的。
我是从GetProcAddress 开始分析的,过程中往前观察分析了几次来解答这里的一些寄存器的内容信息、局部变量的信息,以下是我主要分析的部分:
- 通过对IAT表位置下硬件写入断点,我们找到了这个修改IAT的地方
断下这个GetProcAddress()这个函数 调用之后EAX保存的是 当前要填入IAT的真实地址
004385B9 FF15 CC924300 CALL DWORD PTR DS:[0x4392CC] ; kernel32.GetProcAddress
//开始怀疑修改进IAT的函数内容--加密代码前面几句--写死的硬编码opcode 到底意欲何为:
在内存窗口跳到[EBX-0X30]选择反汇编观察一下:
- 发现 这就是解密IAT代码。
总结:用硬编码 opcode (用于解密IAT)的首地址替代IAT中的函数地址,然后每次IAT调用的时候都会去调用这个代码块使用。
4 分析了加密算法了流程后
- 这时候我们只需要保存正确的函数地址值到IAT,那么这个程序就能脱掉了。
然后和前面几篇一样的流程dump到本地,用impREC修复一下IAT
运行没毛病!!
附:还可以使用OD脚本修正IAT
思路:
调用getprocAddress之后,立刻使用一个临时变量保存起来,
再待壳修改IAT后,立刻修改回正确的函数地址(前面保存的临时变量)
脚本如下:
//.定义变量 MOV dwGetApiAddr,004385bf MOV dwWriteAddr,004385f0 //.初始化环境 BC //清除软件断点 BPHWC //清除硬件断点 BPMC //清除内存断点 //下硬件执行断点 BPHWS dwGetApiAddr,"x" BPHWS dwWriteAddr,"x" BPHWS dwOEP,"x" //.构建逻辑 /* -- 用一个临时变量来存储 真正的函数地址 -- 在加密逻辑代码执行完,并且写入IAT后,立刻改回 */ LOOP0: RUN //相当于od -- F9 CMP dwGetApiAddr,eip//如果是执行完GetProcAddress后 JNZ CASE1 mov dwTemp,eax JMP LOOP0 CASE1: CMP dwWriteAddr,eip MOV [edi],dwTemp JMP LOOP0 CASE2: CMP dwOEP,eip JNZ LOOP0 MSG "改回来了哈哈"
脱壳系列_2_IAT加密壳_详细版_解法1_包含脚本的更多相关文章
- 脱壳系列_2_IAT加密壳_详细版解法1(含脚本)
1 查看壳程序信息 使用ExeInfoPe 分析: 发现这个壳的类型没有被识别出来,Vc 6.0倒是识别出来了,Vc 6.0的特征是 入口函数先调用GetVersion() 2 用OD找OEP 拖进O ...
- 脱壳系列_0_FSG壳_详细版
---恢复内容开始--- 1 查看信息 使用ExeInfoPe查看此壳程序 可以看出是很老的FSG壳. 分析: Entry Point : 000000154,熟悉PE结构的知道,入口点(代码)揉进P ...
- 脱壳系列(一) - CrypKeySDK 壳
程序: 运行 用 PEiD 载入程序 PEid 显示找不到相关的壳 脱壳: 用 OD 载入程序 这个是壳的入口地址 因为代码段的入口地址为 00401000 这三个是壳增加的区段 按 F8 往下走程序 ...
- 脱壳系列(五) - MEW 壳
先用 PEiD 看一下 MEW 11 1.2 的壳 用 OD 载入程序 按 F8 进行跳转 往下拉 找到这个 retn 指令,并下断点 然后 F9 运行 停在该断点处后再按 F8 右键 -> 分 ...
- 脱壳系列(四) - eXPressor 壳
先用 PEiD 查一下壳 用 OD 载入程序 这里有一串字符串,是壳的名称和版本号 按 Alt+M 显示内存窗口 这里只有三个区段,后面两个是壳生成的,程序的代码段也包含在里面 利用堆栈平衡 按 F8 ...
- 脱壳系列(二) - EZIP 壳
程序: 运行程序 用 PEiD 查壳 EZIP 1.0 用 OD 打开 按 F8 往下走 这个看似是 OEP 的地方却不是 OEP 因为代码段从 00401000 开始 可以看到,壳伪造了 3 个区段 ...
- CleanMyMac 4破解版-最强中文版_破解版_激活码_注册码
最新版CleanMyMac 4中文版本已经发布了,也受到了广大用户的喜爱.众所周知, 注册码是开启软件的钥匙,在获取软件安装包之后需要有效的注册码才能激活软件.但是关于CleanMyMac 4注册码的 ...
- CleanMyMac 3.7.5最强中文版_激活码_破解版_下载_注册码
版权归作者所有,任何形式转载请联系作者.作者:缘来远去(来自豆瓣)来源:https://www.douban.com/note/612586476/ 最新版CleanMyMac 3中文版本已经发布快要 ...
- 脱壳系列—— 揭开so section加密的美丽外衣
i春秋作家:HAI_ 0×00 前言 对so的加密,https://bbs.pediy.com/thread-191649.htm大神的帖子里已经很详细的说明了.当然加密不是我们研究的重点,如何搞掉这 ...
随机推荐
- Zookeeper详解-基础(二)
在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念.我们将在本章中讨论以下主题: Architecture(架构) Hierarchical namespace(层次命名 ...
- Angular4.0从入门到实战打造在线竞拍网站学习笔记之一--组件
Angular4.0基础知识之组件 Angular4.0基础知识之路由 Angular4.0依赖注入 Angular4.0数据绑定&管道 最近搞到手了一部Angular4的视频教程,这几天正好 ...
- 强制等待&隐士等待&显示等待&元素定位方法封装
前言 问题 学习selenium的同学估计大多数都遇见过一个问题 明明页面已经精准的定位到了元素,但是执行脚本的时候却经常报错没找到元素.其实原因很简单,就是脚本执行的速度很快,而浏览器加载页面的时候 ...
- SqlServer导入大文件Sql
sqlcmd -S "192.168.1.218" -U "sa" -P "1qaz~xsw2" -d "SispMain&quo ...
- Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的
前言 用c#开发的时候,新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数,如Awake,Start, Update, OnDestroy等. 在相应的方法中实现游戏 ...
- Codeforces Gym101205D:Fibonacci Words(KMP+递推)
Gym 101205D 题意:f[0] = "0", f[1] = "1",接下来f[i] = f[i-1] + f[i-2],相当于字符串拼接.然后给出一个n ...
- 嵊州D4T2 硬币 有人来教教我吗!
嵊州D4T2 硬币 [问题描述] 卡拉赞的展览馆被入侵了. 展览馆是一条长长的通道,依次摆放着 n 个展柜(从西到东编号依次 为 1—n). 入侵者玛克扎尔在第 n 个展柜东边召唤了一个传送门,一共施 ...
- Java集合类的概述
前述 复习一下Java中的集合类,是面试笔试中常考察的一个点,特地做的整理. 什么是集合类? 集合类,也叫容器类.Java集合类可以用来存储数量庞大的对象. 我们和数组进行对比: 数组:存储基本数据类 ...
- ~~Python解释器安装教程及环境变量配置~~
进击のpython Python解释器安装教程以及环境变量配置 对于一个程序员来说,能够自己配置python解释器是最基础的技能 那么问题来了,现在市面上有两种Python版本 Python 2.x ...
- python之pip install
安装方式1 wget http://python-distribute.org/distribute_setup.py sudo python distribute_setup.py wget h ...