- 编写一个简单的C程序。要求只有输入a,才能通过。
现在,使用objdump –d po反汇编这个程序
找到main函数,可以发现movb $0x61,0x1f(%esp)这句语句中是将字符a(对应0x61)移入esp+0x1f,故这就是对其赋值的语句。
再看到cmp %al,0x1f(%esp)这条指令,可以发现他是在将前面定义的esp+1f和输入的字符比对,并根据结果进行跳转。如果结果为否(0),则执行jne;否则跳过jne顺序执行。
2. 我们现在来修改跳转方向来破解软件。
使用vim po,直接打开可执行文件
按:进入控制台,输入%!xxd。
继续按:进入控制台,输入/750e寻找第一个跳转指令
按i进入输入模式,修改为eb0c,直接跳转到程序末尾
输入:%!xxd –r保存,重新执行可执行文件
无论输入什么,都直接跳转到末尾。