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

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

【实验目的】
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文件
在这里插入图片描述

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

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值