实验名称:病毒分析与防护实验3—— 反汇编工具的使用
实验目的
-
熟悉动态分析工具OllyDBG的界面和常用模块
-
熟悉静态分析工具IDA的界面和常用模块
-
掌握使用OllyDBG和IDA分析修改可执行文件的方法
实验原理
OD界面
窗口名称 | 作用 |
---|---|
反汇编窗口 | 显示被调试程序的反汇编代码,标题栏上的地址、机器码、反汇编代码、注释。 |
寄存器窗口 | 显示当前所选线程的 CPU 寄存器内容 |
信息窗口 | 显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等 |
数据窗口 | 显示内存或文件的内容。右键菜单可用于切换显示方式。 |
堆栈窗口 | 显示当前线程的堆栈。 |
OD常用快捷键
快捷键 | 功能 |
---|---|
F2 | 设置断点 |
F9 | 运行 |
F8 | 单步步过 |
F7 | 单步步入 |
F4 | 运行到选定位置 |
CTRL+F9 | 执行到返回 |
CTRL+F2 | 重新开始 |
ALT+F9 | 执行到用户代码 |
查找可执行文件中所有字符串
在“反汇编窗口”单击鼠标右键,选择“查找”选项可查看可执行文件反汇编代码的“所有参考文本字串”
修改某个内存地址的数据
在“数据窗口”按“Ctrl+G”,可查找某个内存地址的值。
在“数据窗口”,选中要修改的数据,单击鼠标右键,选择“二进制”选项的“编辑”项,可修改数据值。
在“数据窗口”,单击鼠标右键,选择“复制到可执行文件”选项,再选择“保存文件选项”
实验内容
更改hello.exe的输出
使用VC 6.0 编写win32 控制台程序:Hello world,得到可执行文件hello.exe
将hello.exe的输出由“Hello World!”改为“Reverse Me!”
步骤如下:
- 在反汇编窗口,单击鼠标右键。在弹出的对话框中,单击鼠标右键,选择‘查找文本’。查找“Hello World”
- 反汇编窗口,选中’Hello World’所在的行,单击鼠标右键-分析-从模块中删除分析。删除掉 OD的分析结果
- 反汇编窗口,选中’Hello World’所在的行,单击鼠标右键-分析—分析代码
- 从反汇编窗口找到字符串Hello World在内存中的地址,复制地址(在我这里,地址是43402C)
- 在内存窗口,查找地址。CtrL+G弹出查找内存地址的窗口,把地址输入进去
这里字符串的值是对应字符的ASCII码的十六进制表示,比如0A是换行符的ASCII码的十六进制表示,00是NULL的表示
由于字符串终止标志是NULL,且原字符串hello world!
比新字符串reverse me!
多一位,因此要更改源字符串最后一位为00(NULL),表示字符串结束
选中修改的代码 --> 复制到可执行文件 --> 保存文件,得到新文件reserve.exe
,打开后显示:
使用OD找到crackme3.exe的注册码
根据程序给出提示的提示,可知程序中有“Wrong Serial”的字符串
查找字符串,可得:
双击该字符串处进入对应的内存空间:
下断点:
按F9执行,程序运行到这一步会暂停,并且弹出Cracker软件的界面:
输入'wdnmd'
观察内存值,可以看到ASCII储存位置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l9A3Ykna-1617371092404)(D:%5Ctyporapic%5Cimage-20210331211627303.png)]
选择“数据窗口跟随”:
则数据窗口会跳转到有输入字符串“wdnmd”
处
对该程序分析的结论
正确的用户名为:Registered User
;密码为:GFX-754-IER-954
分析
在把字符串的值压入寄存器之后,可以看到有call的函数调用,步入,可以发现,这是一个字符串比较的函数
EAX寄存器负责保存输入的字符串的长度,比如我们输入的是wdnmd
,则EAX长度为5
EDX寄存器负责保存答案的字符串的长度,为Registered User
的长度,15
如果长度不同,则说明与答案不一致;如果长度相同,则会逐位比较字符串的值是否相同
最终破解的截图如下: