初次尝试使用IDAPro修改程序控制流程

本文通过实例展示了如何使用IDAPro进行反汇编,理解程序逻辑,并尝试修改机器码实现特定行为。作者首先在VC6中创建了一个简单的密码验证程序,然后利用IDAPro打开exe文件,查看反汇编代码。通过改变jnz指令为jz,期望改变程序的判断行为,但最终运行结果并未如预期。分析过程中,作者提到了函数窗口和MFC函数,指出原始代码的逻辑并非由jnz/jz指令实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先用VC6写一个简单程序;

如果在输入框输入 ABCdef ,单击按钮则弹出“密码正确”,否则弹出“密码错误”;

用IDAPro打开此exe;打开时有一些打开选项,例如选择处理器类型,因为不同的处理器指令集不同,按二进制打开文件时选择不同的指令集识别出的内容会不一样;先都默认;

进到反汇编窗口,可以在文本模式和图形模式之间切换;

切到文本模式;

从选项菜单调出如下对话框;把线框处改为16,这样会显示指令的机器码;

看一下机器码显示了;

jnz指令的机器码为75,如果改为74,就变为jz指令;

jnz,结果不为零(或不相等)则转移; jz即零标志为1就跳转;

这是最基本的破解原理,可以学习一下;干坏事是不好的;把75改为74,看一下是否产生输入任何内容都弹出 密码正确 的效果;

用文本搜索功能,搜到一个 75 ;

选择如下菜单,Edit - Patch program - Change byte...;

在弹出对话框把75改为74;

看一下改了;

然后选择如下菜单,应用改变到输入文件;

OK,保存;

然后运行程序;并没有改过来,还是要输入正确的密码才弹出 密码正确;

改的可能不是地方;

看一下IDA Pro的函数窗口;这是识别出的MFC函数;双击AfxMessageBox,

定位到对应反汇编代码处;看一下,这个if-else,应该是编译为jmp,并没有编译为jnz;下回继续;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值