linux实践——简单程序破解

一、运行login可执行程序,屏幕显示需要输入密码,随便输入一串字符,结果是Drop dead!

二、objdump -d login,对login进行反汇编,找到main函数,找到含有scanf的那一行,再看接下来几行,发现有cmp指令进行比较,比较的寄存器是1c和18,找到main函数开始几行,发现1c被赋值7fe,转换成十进制后是2046。再次执行login,输入2046,结果是on your command,my master!破解成功。

三、修改代码,改变程序功能。

vi login

:%!xxd

/750e

进入insert模式修改十六进制数

:%!xxd -r

:wq

/login

1.如下图所示,程序进行比较后,不相等时跳转到输入错误的处理语句。找到即将修改的750e字段,将表示jne的75修改为74(表示je,即相等时跳转)或90(nop无效指令),可以将程序修改成输入正确密码时,输出Drop dead!输入错误密码时输出on your command,my master!

2.如下图所示,修改cmp指令的对象,使得比较结果永远相等。不管输入什么,结果都是on your command,my master!

3.如下图所示,将含有scanf字符的那一行指令的十六进制数都改为无效指令。结果为直接输出Drop dead!然后再如1、2修改一下,就可以直接输出on your command,my master!

4.本项修改时尝试修改!将1c和18存储的数值改成一样的。执行login,结果是不管输入什么,结果都是on your command,my master!(不知道是为何如此,按理来说18存储的是输入的密码的值,应该没有变化的……)

5.程序还有很多其他的改法,在此就不一一列举的。欢迎讨论交流~

6.以上

posted @ 2016-05-31 00:00  20135312吴汉彦  阅读(1555)  评论(0编辑  收藏  举报