1681369350904.png (674.13 KB, 下载次数: 0)
下载附件
2023-4-13 17:08 上传
首先呢是基本操作,先查壳,没壳!别激动,没壳裸奔的大部分是高手。先尝试运行软件,弹出提示框,那就可以用MessageBoxA下段。
1681369436625.png (593.32 KB, 下载次数: 0)
下载附件
2023-4-13 17:08 上传
ok成功断下,断下后就可以按F2将断点删除了,为什么后面会说到。可以看到od标题显示当前位置处在模块-user32,说明处在系统领空,这时候的任何操作都无效。
1681369967328.png (296.52 KB, 下载次数: 0)
下载附件
2023-4-13 17:09 上传
F8往下走,弹出错误提示点确定继续往下走。
1681370109057.png (316.3 KB, 下载次数: 0)
下载附件
2023-4-13 17:10 上传
过了retn后返回上一层,可以理解为这一层的程序是上一层的call的内部,retn后就返回到上一层的call。由此可见,刚才的程序是从这个call内部,但此时标题显示处在模块-krnln,还是在系统内无法改动。
1681370281770.png (295.85 KB, 下载次数: 0)
下载附件
2023-4-13 17:10 上传
继续F8往下走,一直走,直到标题提示模块为程序的名字时,说明来到了程序领空,这里就可以进行修改。很明显,上面那个call就是我们所谓的关键call,我们给他打上注释(快捷键是英文输入下的冒号),问为什么是关键call,很明显这个call的下一行也就是我们进来这个位置直接给出了错误提示,那不就说明这个提示是上面的这个call程序运行后给出的结果吗,是不是说明我们只要跳过这个call就能够不弹窗了呢?
1681377315897.png (314.74 KB, 下载次数: 0)
下载附件
2023-4-13 17:16 上传
我们往上找有没有能跳过这个call的判断,往上看到一个jmp可以跳过,意思就是无条件跳转,既然可以无条件跳转那不是直接跳过错误提示窗了吗,显然这个jmp被其他跳转跳过了。果然上面一个jnz就直接跳到刚才的jmp下面将他略过了。
1681371740696.png (302.25 KB, 下载次数: 0)
下载附件
2023-4-13 17:18 上传
继续往上找,发现在刚才的jnz上面又一个je,这个je直接跳过了错误提示框,那就简单了,说明这个je现在没有跳,如果他跳了就不会错误弹窗了,只要将je改成jmp不就能跳了吗?我们在je的位置F2断点,重新载入运行程序,假码登录,然后错误弹窗来到我们刚才下断点的位置,我们将je按空格改成jmp。
1681371996969.png (294.39 KB, 下载次数: 0)
下载附件
2023-4-13 17:21 上传
F8往下走,直接跳到了错误弹出框的下面,绕过了错误提示。
1681372220159.png (302.22 KB, 下载次数: 0)
下载附件
2023-4-13 17:23 上传
F8继续往下走看程序是否能够运行起来。到这个call发现动不了了,我们按工具栏的"t"键跳转到进程窗口,直接鼠标右键"Resume All Threads",中文意思就是唤醒所有进程。唤醒后就直接回到刚才的cpu界面了,又可以继续F8了。
1681372350226.png (321.58 KB, 下载次数: 0)
下载附件
2023-4-13 17:23 上传
一直F8直到软件来到了这里,在这个界面一直无限循环,而且标题为模块-krnln处在系统领空无法修改,到这里就宣布失败了。
1681372783059.png (309.14 KB, 下载次数: 0)
下载附件
2023-4-13 17:25 上传
在这个过程中花了好几天时间去调试,也许这是作者所设置的一个坑,当然这也只是我的猜测。
既然不行,那就对整段程序进行分析,首先是来到段首,段首就一直往上找到的第一个retn下面第一段代码,也就是上一段程序的尾部retn下面,就是push ebp这里,我们在这下断点。刚才提到将MessageBoxA的断点处删掉,其实就是为了现在重新运行程序直接来到我们的段首。
重新载入软件后运行软件,直接断在了我们刚才下断点的段首,F8往下走,发下一个很大的jnz跳转,跳过了错误提示框,甚至是快跳到程序尾部了,这样的跳转很大程度上实现跳转程序会报错,正好他也没跳,我们也不管。
1681370984772.png (280.54 KB, 下载次数: 0)
下载附件
2023-4-13 18:19 上传
我们到发送数据这个call这卡住了,重复上面的步骤唤醒进程,继续往下F8单步走,小跳不用管,直到走到我们先前标记的那个可以跳过错误提示框的je那里,将他改为jmp跳过错误提示框。
1681371996969.png (294.39 KB, 下载次数: 0)
下载附件
2023-4-13 18:22 上传
继续往下走,直到走到"sete al"这里,发现了下面提示"条件为假 FALSE",到这里终于明白了,原来作者在这里还有一个判断,不管他是怎样运作的,既然提示为假,那不妨让他为真试试。
1681373865024.png (312.56 KB, 下载次数: 0)
下载附件
2023-4-13 18:23 上传
于是按空格修改为"setne al",继续单步,
终于弹出了我们的软件界面,到这里,教程也就结束了。
1681369389788.png (442.13 KB, 下载次数: 0)
下载附件
2023-4-13 18:24 上传
事实上我们的工作还远远没有结束,当安装好以后,在运行游戏时发现根本没用,是为什么?我们发现一个 "D:\xxgame\XX联盟\game\1.dll" 文件,用charles搭配proxifer对这个dll抓包,发现在游戏进入后的几秒该dll进行了数据交互,其交互内容证实了这个dll进行了二次验证,查壳该dll也没壳。
由于我对dll实在没有太深入的研究,加上网上对dll的逆向又实在少的可怜,因此发此贴以来是分享一下自己研究的成果,二来是想向各位大佬取取如何逆向dll的经。