OD 实验(十九) - 对多态和变形程序的逆向
程序:
这个窗口显示这是一个需要去除的 Nag 窗口
点击“确定”
用 PEiD 看一下
这是一个用汇编语言写的程序
逆向:
用 OD 载入程序
Nag 窗口的标题和文本
右键 -> 查找 -> 所有参考文本字串
只有这两条
下一个断点,跑一下程序
该 NAG 窗口还是弹出来了
点击“确定”
然后关掉程序,始终没有停在断点处
说明该处只是干扰项
往上拉
看到一些奇怪的字符,这些是 OD 识别不了的一些代码
右键 -> 分析 -> 从模块中删除分析
代码就变得正常了
第一个 call 语句获取模块的句柄
往下走
把 00401011 存在 edi 中
按 F7 步入该 call 语句
这是一个循环,循环结束后 retn 返回
mov eax,ReverseM.00401000 把 ReverseM.00401000 上的值赋值给 eax
xor byte ptr ds:[eax],0x5A 把 eax 的值按字节跟 0x5A 进行异或
看一下地址 00401000 上是什么内容
00401000 所处的位置为代码段,对它进行异或操作就是修改它的代码
在十六进制窗口看地址 00401000 的变化
按 F8 往下走,可以在十六进制窗口看 00401000 值的变化
inc eax 就是循环一次,递增 eax,也就是递增代码段的地址
直到代码段的地址为 00401218 的时候才结束循环
也就是对 00401000 到 00401218 这一段代码指令与 0x5A 按字节进行异或操作
而这段代码就是 OD 识别不出来的这段代码
所以该异或操作可能是对这段代码进行解密
F8 往下走,通过 retn 返回
然后按 F7 步入该 call 指令
xor eax,eax 将 eax 清零
将 0x6A 赋值给 edi
他修改了自己的代码,将 xor eax,eax 改为了 push 0x0
继续往下走
此时 edi 的值为 00401024
0x44EB 覆盖了 00401024 和 00401025,所以代码从 00401011 开始被改到 00401025
执行完 sub 指令后变为 00401000
右键 -> 分析 -> 分析代码
这里多出了个 MessageBox 函数,内容都是乱码
按 F7 步入那个 call edi 指令
这是一个循环
这段指令像刚才的指令一样,是一段解密代码,对从 00403000 到 00401005 的代码进行解密
当走完这个解密循环,刚才的乱码就变成了可以看懂的字符串
往下走,走到调用 MessageBox 函数处
弹出 NAG 窗口
接着往下走,是 jmp 指令
跳转到该处
add edi,0x11 使 edi 的值加 11
mov word ptr ds:[edi],0xA6A 对 edi 进行覆盖
接着往下走
0x2CEB 覆盖了 00401026 和 00401027,所以代码从 00401011 开始被改到 00401027
步入该 call 函数
往下走,调用 call
出现了 NAG 窗口
关掉 NAG 窗口后,程序到下一条语句
接着往下走
它会直接跳到该 call 指令上
按 F7 步入
这可能又是一个解密的过程
从 00403000 开始,00403000 是数据段区域
这些是 NAG 窗口的字符串
执行该过程
数据变为乱码,看来这是一个加密的过程
接着往下走,走出该 call 区域
步入该 call 指令
调用 ExitProcess 函数结束进程
走完程序就退出了
破解:
方法一:
修改 hOwner 的值,指定一个无效的父进程
运行完 call 语句之后不会弹出 NAG 窗口
重新载入程序,看一下程序在哪里修改了 0040101D 和 0040101E
步入该 call 指令
edi 从 00401011 开始
往下走,找到修改 0040101D 和 0040101E 的地方
在这里修改了 0040101D,mov word ptr ds:[edi],0x6A,这里的 0x6A 就是 6A00
在这里,要把 6A00 修改为 6A01
这里不能直接修改,因为这段代码要跟 0x5A 进行异或操作,所以 01 是跟 0x5A 进行异或后的结果
0x5A 跟 z 进行异或得到 1,那么 0x5A 跟 1 进行异或得到 z
5A xor 1 = 5B
要修改的 00 地址为 00401039
查找它在内存中的位置
改为 5B
点击“确定”
代码处也被修改了
保存程序,运行
程序只弹出了这个窗口
方法二:
将调用 MessageBox 函数之前的一条语句改为 jmp 跳转语句,直接跳过调用 MessageBox 函数,调转到原先需要跳转到的地方
执行
它直接跳转到该地方来了,没有弹出 NAG 窗口
机器码为 EB 57,地址为 00401011 和 00401012
重新载入程序,找到修改这两个地址的地方
这里需要对 6A00 进行修改,地址分别为 00401016 和 00401017
EB xor 5A = B1,57 xor 5A = 0D
修改完后为
保存程序,运行
程序报错
我们得在内存中修改
双击修改
分别改为 B1 0D
接下来保存程序
选中修改的地方,右键 -> 复制到可执行文件
右键 -> 保存文件
运行程序
OD 实验(十九) - 对多态和变形程序的逆向的更多相关文章
- OD 实验(十六) - 从对话框入手对程序的逆向
对话框: 对话框从类型上分为两类:modal 对话框和 modeless 对话框,就是模态对话框和非模态对话框,也有叫成模式和非模式 模态对话框不允许用户在不同窗口间进行切换,非模态对话框允许用户在不 ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十九:SDRAM模块② — 多字读写
实验十九:SDRAM模块② — 多字读写 表示19.1 Mode Register的内容. Mode Register A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A ...
- 【iCore3 双核心板_FPGA】实验十九:基于双口RAM的ARM+FPGA数据存取实验
实验指导书及代码包下载: http://pan.baidu.com/s/1pLReIc7 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【iCore4 双核心板_FPGA】实验十九:使用JTAT UART终端打印信息
实验指导书及源代码下载地址: 链接:https://pan.baidu.com/s/1c3mqDkW 密码:4x9h iCore4链接:
- OD 实验(十八) - 简单注册机的编写
程序: 运行 这是一个注册机 随便输入点内容,点击 Check 弹出错误的对话框 逆向: 用 OD 载入程序 在文本框处下断点 按 Alt+B 查看断点 这个断点在动态链接库那里 跑一下程序,输入内容 ...
- OD 实验(十五) - 对一个程序的逆向
程序: 打开程序 出现一个 NAG 窗口 这是主界面 点击 Exit 程序出现 NAG 窗口,然后退出 用 PEiD 看一下 是用 VC++ 6.0 写的程序 逆向: 用 OD 载入程序 跑一下程序 ...
- OD 实验(十四) - 内嵌补丁
内嵌补丁(inline patch): 内嵌补丁指在程序文件中把补丁代码写入文件里面达到破解的目的 如果修改某行语句会影响后面的语句,例如某语句占用 3 个字节,修改完变为 5 个字节,会覆盖后面的语 ...
- OD 实验(十二) - 对一个 Delphi 程序的逆向
程序: 运行程序 界面显示的是未注册 点击 Help -> About 点击 Use Reg Key 这里输入注册码 用 PEiD 看一下 该程序是用 Delphi 6.0 - 7.0 写的 逆 ...
- OD 实验(十) - 对一个 VB 程序的逆向
前话: VB 程序用 OD 进行逆向的话,可以先查找相关的变量和字符串,以寻找突破口 变量: __vbaVarTstEq __vbaVarCompEq __vbaVarTstNe __vbaVarCo ...
随机推荐
- SpringMVC札集(09)——拦截器
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- EasyPlayer Android基于ffmpeg实现播放(RTSP/RTMP/HTTP/HLS)同步录像功能
之前有博客专门介绍了EasyPlayer的本地录像的功能,简单来说,EasyPlayer是一款RTSP播放器,它将RTSP流里的音视频媒体帧解析出来,并用安卓系统提供的MediaMuxer类进行录像. ...
- 求序列完美度(trie+贪心)
题目链接: 求序列完美度 题目描述 给出由n个数组成的序列s,规定第i个数s[i]到第j个数s[j]组成的子序列的完美度为该子序列中所有数的和与任意一个不在该子序列中的数进行异或运算得到的值中的最大值 ...
- python删除list中元素的三种方法
a.pop(index):删除列表a中index处的值,并且返回这个值. del(a[index]):删除列表a中index处的值,无返回值. del中的index可以是切片,所以可以实现批量删除. ...
- BZOJ5280: [Usaco2018 Open]Milking Order(二分+拓扑)
5280: [Usaco2018 Open]Milking Order Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 123 Solved: 62[ ...
- canvas globalCompositeOperation
source-over 默认,相交部分由后绘制图形的填充(颜色,渐变,纹理)覆盖source-in 只绘制相交部分,由后绘制图形的填充覆盖,其余部分透明 source-out 只绘制后绘制图形不相 ...
- js 时间date格式化
js中没有类似java中的DateFormat类来处理日期格式化,可以自己写一个: var newDate=new Date(); var year=newDate.getFullYear(); va ...
- 学习Selenium同学必看
本文转载 作者:灰蓝蓝蓝蓝蓝蓝链接:http://www.jianshu.com/p/5188cb3ab790來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.更多技术博客 ...
- LeetCode 549. Binary Tree Longest Consecutive Sequence II
原题链接在这里:https://leetcode.com/problems/binary-tree-longest-consecutive-sequence-ii/description/ 题目: G ...
- Nchan 实时消息 安全配置
备注: 即时消息的安全对于我们来说是比较重要的,作者在设计Nchan 的时候已经考虑了 a. nchan_authorize_request (Hooks and Callbacks)可以集成 ...