码迷,mamicode.com
首页 > 系统相关 > 详细

linux实践之程序破解

时间:2016-06-01 22:48:01      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

linux实践之程序破解

这次的实践是文件破解,让我们从login可执行文件开始吧!

首先我们执行一下这个可执行程序

 技术分享

①我们希望在不知道密码的情况下,能够登陆进去。且无论密码是什么,都是提示“on your commandmy master”。

首先对该程序执行反汇编。

 技术分享

我们首先要找到main函数的入口处。

 技术分享

我们可以看到cmp语句后,有jmp语句,如果不等于就跳转到“0x8048466”处,这是正常程序执行的过程,我们在这里希望不等于的时候,也不要跳转,所以可以把“75 0e”修改为“75 00”表示,不用跳转。这样这句跳转语句相当于不存在了,因为无论比较的结果是否相等,都将按顺序继续执行。

先来看看正确登陆是什么样子的。

首先打开login文件,结果如图所示,

 技术分享

输入“:%!xxd”,结果如图所示。

 技术分享

搜索“75 0e”,输入“/75 0e”,结果如图所示。

 技术分享

修改该值为“75 00”,输入“:%Xxd -r”保存修改。

退回到二进制文件格式后,输入“:wq”保存。

重新执行该可执行文件,结果如图所示。

 技术分享

②我们希望无论输入什么,跳过提示。直接结束。

分析main函数的反汇编。

 技术分享

我们只需要将cmp比较后的jne判断语句,直接跳转到leave处。即将“75 00”修改为“75 1a”,这样在输错密码的情况下会直接结束,退出程序。在“75 00”处增加代码,增加代码为“jmp 8048472”,即增加“eb 0c”。总结:就是将“75 00”修改为“75 1a eb 0c”。

让我们来尝试一下是否能够成功吧!

 技术分享

 技术分享

但是失败了,显示为段错误。

这是我想重新反汇编该可执行文件,结果为

 技术分享

由于我的修改,导致文件不可用,也无法复原回原来的版本,所以我又只好重新开始新的代码,进行尝试。

于是我只好重新修改,我这次不增加新的代码,直接将“75 0e”修改为“75 1a”。

修改后的执行结果如下。

 技术分享

修改后重新反汇编一下,查看结果。

 技术分享

③深入研究,试图猜测密码。

 技术分享

从上图的main代码中,我们可以看到,比较的是“0x1c%esp)”和“%eax”的值,而看上一步“%eax”的值是“0x18%esp)”,往上面找,我猜测,这里比较的就是“0x7fe”和“0x0”,这样一来,结果永远是不等于,所以我尝试修改,将下面的“00 00”改为“fe 07”。

 技术分享

修改后保存。

 技术分享

修改后,输入任何密码,都是成功登陆。

 技术分享

 技术分享

就是这样,搞定啦!

linux实践之程序破解

标签:

原文地址:http://www.cnblogs.com/java-stx/p/5551201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!