实验四——反汇编工具的使用

时间:2024-05-31 16:44:56

【实验名称】 反汇编工具的使用

【实验目的】
1.熟悉动态分析工具OllyDBG的界面和常用模块
2.熟悉静态分析工具IDA的界面和常用模块
3.掌握使用OllyDBG和IDA分析修改可执行文件的方法
【实验原理】
1.OD界面
实验四——反汇编工具的使用

a.反汇编窗口:显示被调试程序的反汇编代码,标题栏上的地址、机器码、反汇编代码、注释。
b.寄存器窗口:显示当前所选线程的 CPU 寄存器内容
c.信息窗口:显示反汇编窗口中选中的第一个命令的参数及一些跳转目标地址、字串等
d.数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。
e.堆栈窗口:显示当前线程的堆栈。

  1. OD使用
    (1)查找可执行文件中所有字符串:在“反汇编窗口”单击鼠标右键,选择“查找”选项可查看可执行文件反汇编代码的“所有参考文本字串”
    (2)修改某个内存地址的数据:
    在“数据窗口”按“Ctrl+G”,可查找某个内存地址的值。
    在“数据窗口”,选中要修改的数据,单击鼠标右键,选择“二进制”选项 的“编辑”项,可修改数据值。
    在“数据窗口”,单击鼠标右键,选择“复制到可执行文件”选项,再选择 “保存文件选项”

【实验内容】
参看《课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)写入代码
实验四——反汇编工具的使用

d)编译、组建、运行后查看运行结果
实验四——反汇编工具的使用

e)思考:修改可执行文件hello.exe,使其输出Reverse Me!
i.方法一
实验四——反汇编工具的使用

ii.方法二
实验四——反汇编工具的使用

二、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空字符:
实验四——反汇编工具的使用

iv.运行结果
修改之后,复制到可执行文件:
实验四——反汇编工具的使用保存
实验四——反汇编工具的使用
运行:
实验四——反汇编工具的使用

三、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这一行。
实验四——反汇编工具的使用

二进制编辑修改:由0x74改为0x75实验四——反汇编工具的使用
实验四——反汇编工具的使用

复制到可执行文件,保存文件:
实验四——反汇编工具的使用

运行:
实验四——反汇编工具的使用

f) 在上课的时候最后一步是用OD打开hello.exe,将内存地址00401172的值由0x74改为0x75的。
当时就疑惑怎么不直接使用IDA修改由0x74改为0x75。所以下面是先用IDA修改的:

先选中关键代码所在的那一行,打开Edit->Path prodram->Change byte
实验四——反汇编工具的使用

其实这里的三种选项都可以修改,
只是Change byte是修改16进制下的代码,显示从开始的那一行到这一节结束的那一行:
实验四——反汇编工具的使用

Change word是修改所选中那一行的值:
实验四——反汇编工具的使用

Assemble则是直接修改汇编代码:
实验四——反汇编工具的使用

现在我们随便使用一种方式把JZ指令改为JNZ,从而改变程序的跳转。之后点击编辑->修补文件->修补程序应用到输入文件:
实验四——反汇编工具的使用

再选择修改的范围和输入的文件即可:
实验四——反汇编工具的使用

最后我们打开修改过的exe文件
实验四——反汇编工具的使用

程序的跳转逻辑已经被更改了。