20135337——Linux实践三:程序破解

程序破解

查看

20135337——Linux实践三:程序破解

运行

20135337——Linux实践三:程序破解

反汇编,查看汇编码

20135337——Linux实践三:程序破解

20135337——Linux实践三:程序破解

对反汇编代码进行分析:

20135337——Linux实践三:程序破解

20135337——Linux实践三:程序破解

在main函数的汇编代码中可以看出程序在调用“scanf”函数请求输入之后,对 [esp+0x1c] 和 [esp+0x18] 两个内存单元的内容进行了比较,其作用应该是对比用户输入和预设口令。即预设口令被存放与局部变量 [esp+0x1c]中。

动态调试

运行目标程序,查看进程信息

20135337——Linux实践三:程序破解

将gdb依附到目标进程:attach

20135337——Linux实践三:程序破解

输入bt查看进程的运行栈情况,输入frame 7 进入main函数的栈帧:

20135337——Linux实践三:程序破解

查看[esp+0x1c] 和 [esp+0x18] 两个内存单元的内容:x/ 查看内存信息

20135337——Linux实践三:程序破解

测试密码:

20135337——Linux实践三:程序破解

Vi打开login文件:修改目标文件的二进制代码

20135337——Linux实践三:程序破解

输入 :%!xxd进入16进制编辑模式

20135337——Linux实践三:程序破解

jne 8048466 对应的16进制数为75 0e,,搜索75 0e : 将75 0e 修改为eb 0c(即jmp 8048472(对应leave指令) )

20135337——Linux实践三:程序破解

20135337——Linux实践三:程序破解

输入:%!xxd –r.:wq 保存二进制文件

20135337——Linux实践三:程序破解

查看修改处(jne【750e】是不相等时转移,jmp【eb0c】无条件转移指令)

20135337——Linux实践三:程序破解

再次启动本程序,任意输入口令都leave。

20135337——Linux实践三:程序破解

需注意的是,在动态调试第一步运行完login后,需要另开一个终端,使login的相关进程能持续停留在内存中再进行相关修改。

上一篇:Response.Write页面跳转


下一篇:20145229&20145316 《信息安全系统设计基础》实验三 实时系统的移植