起因是在网哔哩哔哩网上看到一个视频讲的是用E盾的漏洞去破解软件,当然了这篇文章和这个没什么关系。。。。。然后我就在百度上搜索了E盾保护的软件,在52破解上看到了一个帖子,也没细看,就直接把这个软件给download下来了,然后准备用网上看到的那个E盾漏洞啥的试试
软件打开后是这个样子,红色的是我IDA载入生成的。原本的是没有的,接下来一般都是PEID查壳,是我们不能少的操作(虽说可能出错)。。。。
无壳,也没有多余的段,但是这个软件明明写的E盾,这,,,
跳到 0x401000处 看到xor eax ,eax 我们可以肯定这是个E语言程序
1.OD载入,运行看看
直接 弹出发现非法工具 确定后就退出了 那么我首先想到的第一个方法就是下MessageBox断点
重新载入程序 bp MessageBoxA
一般操作,堆栈窗口,右键跟随反汇编,然后看到有没有什么跳转是跳过这个信息框的
往上找,一直找到函数序言都没看到有那个跳转跳过这个提示信息框,我当时就像了,难道这个框是必定会弹出的吗,只是提示的不一样而已吗?像这里就提示是 发现非法工具,点击然后就退出 如果是正常打开的话,是不是提示什么 软件准备好了,点击就出界面了。然后我就重新正常(不用OD载入)打开了程序看,没有出现提示,这我就难受了,然后我中函数序言下断点,重新运行程序,然后看堆栈,是哪调用了他,搞了10-20min还是无果一脸懵逼,难受了
2.感觉实在是懵逼了,就看这个帖子上的人是怎么过的,还是没看懂是怎么找到的,然后心想用IDA看看,IDA载入,跳到这个显示MessageBox的地址
看到这个MessageBox在这个函数上是必运行的了,划到函数序言(函数开始的地方),快捷键Ctrl+X看都是哪里调用了他
点第一个进去发现,看到注释,一目了然了,是可以跳过的是吧,然后sub_42EA80这个就是要弹出的那个信息窗口的函数,看到他是由ebx寄存器获取他的偏移,然后.......间接调用的,怪不得分析起来有点难受,(由于之前工作是单片机的逆向,所以用IDA比较多,OD用得不怎么好)
当然刚刚,看到这么多地址调用他的,我们都要去看看,但是这里我很幸运,我过第一个就可以了。看到52pojie的那个帖子也是跳这个地址,这就联系起来了。
3.OD重新载入程序,在0x401CAC下F2断点,F9运行程序,来到这里,看到je是没有实现跳的,确实是这里出了问题,提示非法工具,点击寄存器窗口的Z标志,双击两下,变为反的,然后跳过非法工具提示,F9运行,发现退出程序了。只能F8一步一步过,看是在哪个函数上是推出了,Ctrl+F2重新载入程序,像刚刚那样到 跳过非法工具后F8一路下去,注意F8过函数的现象,如果F8过函数后,直接退出了,我们就知道是这个函数执行了退出操作,退出后我们按ESC在,准备调用这个函数的地方下断点,下次直接来到这里,如果有必要可以F7进函数里面看看,我们可以这样做,如果发现是A函数退出了程序,我们就把他NOP掉,或者跳过如果发现程序崩溃了,那么就说明,这个函数不单单只是退出操作,还是其他操作,我们这个时候就要F7进去看看他里面是那个函数执行了退出操作,就这样一步步走。(技巧:一般如果这个函数的上方有个跳转,可以跳过他的话,他可能就是我们要找的了)最后我找到了在这里:(我有尝试下ExitProcess断点,但是没反应)
过这个函数就行了,同理我们在他上方的跳转语句下断点,然后跳过他就行了,为什么不NOP掉呢?他下方还有这么多的代码,我们不知道是干嘛的?除非都NOP掉,但是我个人感觉可能跳过更加优雅。拨云见日我们终于弹出主界面了
这些帐号密码,我们还是填一下,减少不必要的分析,点击登录,弹出提示框,没什么说的,重新载入程序 来到主界面 OD命令行bp MessageBox,然后点击登录按钮,断点断下,查看堆栈,同上 上面过 非法程序提示一样,右键 跟随到反汇编窗口,发现就是上面那个非法程序那里弹出的窗口是同一个函数,往上分析就难受了。想到我们之前载入IDA时,发现调用那个函数sub_42EA80(之前提示发现非法程序的那个函数)有很多处,我们一处处分析就出来了是吧,不过我们没有走这条路,因为太多了,看那些提示,换个思路,这是个E语言程序,点击 登录,这个是个按钮,我们能否在登录按钮的处理函数上下断点呢
E语言程序 按钮事件 特征码 :
4.OD 地址跳转到0x401000 然后Ctrl+B Hex窗口输入E语言按钮事件特征码: FF 55 FC 5F 5E 89 5D F4
下F2断点,ctrl+L看看还有没有,我这里没有了,你如果说按钮不是还有2个吗?............(这里我也不是很明白)
点击登录断在这里,F7 单步步入,这里就和上面说的跳过 退出函数的思路是查不多的了,进入这个函数里面一路F8注意汇编上的一些注释
来到这里,发现这个跳转很大,然后还发现他跳过的东西包括了,一些很像是能登录相关的信息,看看(,当我们让他过的时候他确实就报错了)
寄存器 窗口 Z标志双击 不用我多说,让他不跳过,然后一路F8(遇到循环的,可以在循环结束后会第一个运行的汇编上F4,直接运行到这里),一路F8,注意看函数调用后的情况,然后我们突然之间就退出程序了,什么情况,很懵逼,
ESC看看是那个吊毛函数搞了烧操作
,发现是call sub_0041F382(被我注释了11111这个)函数才退出的,我们在他上方发现一个跳转语句,但是跳不过他
我们在这里下个断点,然后,重新运行程序,让他到这里,我们nop叼他,然后F9运行,如果出问题,在F7进入里面去找
F9运行程序,我们很幸运,不是吗?????
注:其实找的时候是真的一步一步来的,反反复复,Ctrl+F2了好多次,也遇到过不知名的错误,有时候思路错了,找了大半天,也是无果,可能思路没错,就是这个切入点的位置不对,就像是下消息循环断点然后追到消息循环里面去了,然后一直在那转圈,但是思路是没问题的。然后这个不是E盾吗?查找字符串的时候确实是看到了E盾的字样,当然我是看了52pojie帖子上他搜索到的,我没搜索到,然后其他的为什么PEID没看到壳,这个我就不太懂了,我只知道PEID是根据特征去判定的,为什么段没什么特征,这个我也不懂,如果有人懂的可以告诉我一下,谢谢,要走的路还很多啊,好了,大神就一笑而过吧,这是个简单的程序,我只是想拿点雪币
2020安全开发者峰会(2020 SDC)议题征集 中国.北京 7月!
最后于 2天前 被zuoshang编辑 ,原因: