一、实验目的
通过实验进一步熟悉调试器与汇编代码,加深对汇编代码和调试技术的认识。
二、实验软硬件要求
软件工具:OllyDbg
操作系统:windows 7
三、实验内容(实验步骤、测试数据等)
Ⅰ、基础练习
打开示例程序 01\06\bin\abex crackme#1.exe程序,该程序内部有两个选择显示的消息框,原本是显示其中第一个消息框,修改程序执行逻辑,使程序显示第二个消息框。
Ⅱ、扩展练习
打开wsample01a.exe程序
1、分析程序逻辑
运行程序显示“Hello!Windows”消息框,程序在什么情况下会显示另一个消息框(称为“2号消息框”),该消息框的内容是什么?
2、给程序打上如下补丁,并分别保存:
(1)使程序固定显示“2号消息框”,无需输入特定参数
(2)更改“2号消息框”的显示条件为:输入参数“2023”,消息内容也更改为:Hello!2023
四、实验过程
1、基础练习
①打开abex crackme#1.exe程序,两个消息框的内容如下
②、使用OD进行分析,进入就可以看到消息框的弹出内容,当然也可以使用字符串查找,字符串查找具体操作可以看“Hello World!”那篇文章。
③在图中可以看出有三钟输出内容,显然我们要通过分析使程序输出“OK,I reall think that your HD is a CD-ROM!:p”
④我们可以大胆猜测输出内容是经过比较后选择对应的输出内容,接下来的思路就是寻找CMP,一步一步调试,当调试到图中所示位置时,弹出第一个消息框,这里发现并没有弹出第二个消息框,显然到目前为止还没有进行比较。
⑤执行到下图位置时,发现了CMP和JE,JE是条件跳转,基本可以肯定这里的CMP就是影响跳转的指令。JE的跳转条件是看寄存器ZF的值,若ZF=1,跳转。而ZF的值由计算结果决定,运算结果等于0,ZF=1,反之为0。CMP的运算规则是相同等于0,不同等于1.
⑥根据上述逻辑,光标选中图中指令,按空格修改汇编指令,继续按f8调试发现输出内容变为“OK,I really think that your HD is a CD-ROM!:p”
2、扩展内容
(1)①运行程序显示“Hello! Windows”,使用OD分析。因为不知道第二种消息框输出内容是什么,先考虑查看字符串获取信息。
②经过对比,得出第二种输出内容为“Hello! 2012”。
③双击跳转
④分析前面的内容,发现TEST指令和JNZ指令,JNZ跳转的条件是ZF=0,TEST则是判断两个参数是否相同,相同ZF=0。显然图中“TEST EAX,EAX”得到的结果是ZF=0,下一条指令JNZ跳转到00401035,也就是“Hello! Windows”。
⑤这里就有两种修改方法实现输出内容为“Hello! 2012”.
第一种,修改“TEST EAX,EAX”,让两个参数不相同即可。
第二种,修改“JNZ SHORT wasmple0.00401035”为“JMP SHORT 0040101D”
(2)①设置参数2023,输入完参数会弹出一个消息框,意思是设置完参数需要重启一下,Ctrl+f2重启
②在Hex Dump 跳转到00402128,修改字符串为“Hello!2023”,跳转到00402104,修改“2012”为“2023”,修改完需要保存(要保存两次,在第一次保存的基础上保存第二次)并重新设置参数。
③这里讲一下思路:这里可以设置参数,并且设置的参数出现在了输出消息框,所以在修改之前进行了尝试,把参数设置为2012,那么在原程序(默认出现hello windows)会不会出现“Hello!2012”?答案是会出现,那么这个程序的逻辑就是输入的参数与程序存储的“2012”进行比较,若相同,则输出“Hello!2012”,若不同,就输出“Hello!windows”,所以需要修改两个地方,第一是负责比较输入参数的“ 2012 ”为“ 2023 ”,第二个则是修改消息框的输出内容。
④运行结果如下