Login程序破解
一、掌握基本的汇编指令机器码
- nop=空指令( 机器码90)
- JNE = 如果不相等就跳转机器码75)
- JE = 如果相等就跳转机器码74)
- JMP = 无条件跳转机器码EB)
- CMP = 比较
二、进行破解操作
1.用winscp将login文件传送到Ubuntu中
2.修改文件权限为可执行文件
- ![](http://images2015.cnblogs.com/blog/744595/201605/744595-20160531141059539-907775874.png)
3.可以看到在上面的步骤中,login执行之后是“drop dead”的
4.查看反汇编代码
-
- 可以看到在上图中标为黄色的部分是一个比较语句(jne), jne表示当比较不相等时,跳转。
- 而0x75 0e表示jne指令的跳转量为0x0e,从0x8048456跳转到0x8048464一行(即imp一行)。也就是说,当输入与已存口令不相等时,就不会执行函数调用(call)。
- 那么,如果要破解程序使得无论输入的口令是否是正确的,都可以实现函数调用,就需要将这条jne指令修改一下,使得其跳转到0x8048458行的movl处,从而顺利执行call语句。
- 所以,我们需要将0x750e修改为0x7500
5. 程序破解
-
vi打开login,输入“:%!xxd”(中间无空格)
-
输入:/750e查找到那个位置,比对四周,确定位置后将其修改为7500
输入“:%!xxd -r”保存
输入“:wq”保存
-
运行,输入和上次同样的password(lwr),显示正常功能