【实验目的】
1.熟悉动态分析工具OllyDBG的界面和常用模块
2.熟悉静态分析工具IDA的界面和常用模块
3.掌握使用OllyDBG和IDA分析修改可执行文件的方法
【实验原理】
1.OD界面
a.反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、机器码、反汇编代码、注释。
b.寄存器窗口:显示当前所选线程的 CPU 寄存器内容
c.信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等
d.数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。
e.堆栈窗口:显示当前线程的堆栈。
【实验内容】
参看《课4-实验步骤》
1.使用VC 6.0 编写win32 控制台程序:Hello world,得到可执行文件hello.exe
2.使用《课4-实验步骤》中的两种方法将hello.exe的输出由“Hello World!”改为“Reverse Me!”
一、VC++ 6.0 编写Win32控制台程序
a)创建新的工程hello:win 32 console
b)创建CPP源文件
c)写入代码
e)思考:修改可执行文件hello.exe,使其输出Reverse Me!
i.方法一
二、OD 修改hello.exe,使得程序输出为Reverse Me!
a)系统自带OD,
b)也可以解压“4-Fishc OD(解压密码:fishc.com).zip”。 FishcOD.exe(汉化版)绿色版免安装
c)OD界面
f.反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、机器码、反汇编代码、注释。
g.寄存器窗口:显示当前所选线程的 CPU 寄存器内容
h.信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等
i.数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。
j.堆栈窗口:显示当前线程的堆栈。
d)用OD打开hello.exe,并修改hello.exe.
i.在反汇编窗口,单击鼠标右键。
ii.在弹出的对话框中,单击鼠标右键,选择‘查找文本’。查找“Hello World”
双击Hello World!所在的一行,快速定位到所在的反汇编窗口
iii.在反汇编窗口中修改代码。
1.反汇编窗口,选中’Hello World’所在的行,单击鼠标右键-分析-从模块中删除分析。删除掉 OD的分析结果。
2.反汇编窗口,选中’Hello World’所在的行,单击鼠标右键-分析—分析代码
3.从反汇编窗口找到字符串Hello World在内存中的地址,复制地址43402C,后点取消
4.在内存窗口,查找地址。CtrL+G弹出查找内存地址的窗口。
5.修改内存中的数据
选中要修改的内存地址,单机鼠标右键,选择二进制->编辑:
把“Hello World!”改为“Reverse Me!”,但是“Reverse Me!”比“Hello World!”少一个字符,所以把要多的这个字符去掉,先把最后一个字符改为0A换行符:
再把之前的换行符0A改为00,就是null空字符:
三、IDA和OD结合修改hello.exe,使得程序输出Reverse Me!
a)IDA打开hello.exe
b)查看String Windows
查找到“hello world!”
c) 单击鼠标右键-Graph View,切换为Graph View,展现各个结构之间的关系。
d)将判断指令JZ改为JNZ,这样当输入为true时,程序将跳转输出字符串Reserve Me!
需要设置IDA显示16进制机器码,即图中步骤2、3
之后IDA就会显示16进制机器码:
e) 使用OD打开hello.exe,将内存地址00401172的值由0x74改为0x75。参考“三、OD修改hello.exe”
用OD打开.exe文件来修改,按Ctrl+G快速定位00401392这一行。
f) 在上课的时候最后一步是用OD打开hello.exe,将内存地址00401172的值由0x74改为0x75的。
当时就疑惑怎么不直接使用IDA修改由0x74改为0x75。所以下面是先用IDA修改的:
先选中关键代码所在的那一行,打开Edit->Path prodram->Change byte
其实这里的三种选项都可以修改,
只是Change byte是修改16进制下的代码,显示从开始的那一行到这一节结束的那一行:
现在我们随便使用一种方式把JZ指令改为JNZ,从而改变程序的跳转。之后点击编辑->修补文件->修补程序应用到输入文件:
程序的跳转逻辑已经被更改了。