手脱64位UPX壳

手脱64位UPX壳

背景

近期舍友不知道为啥忽然要汉化一个GTA的外挂,第一次听说他要汉化,问了我一堆关于逆向的东西。由于外挂加了upx的壳(也是peid说的,我感觉是一个很奇怪的壳),他搞不定于是发来给我。

我平时也是逆向linux的elf文件多一些,windows的而且还是64位的几乎没搞过,平时也没脱过什么壳,也就是听说过原理而已(感觉不难),再加上我之前的电脑坏掉了返厂修了,新电脑刚到手,什么环境都没有,需要现搭建,虽然比较麻烦,不过毕竟就是脱个壳而已,原理啥的我也听说过,正好到了周末也可以试试。

分析软件

拿到程序之后我下了个52破解的虚拟机,发现是32位的,由于程序是64位的,导致里面的工具都用不了…哭。不过也没事,就是脱个壳,直接下一个动态调试的工具就行,属实没弄过64位的windows程序,下了个x64dbg,之前没用过,打开之后发现界面还有快捷键和od几乎一样,小开心一波。

看了下程序,打开直接就弹窗,说我没有打开GTA5游戏…不过也不是破解软件,就没必要下载GTA了,直接开始脱壳吧:
在这里插入图片描述
然后打开x64dbg,虽然知道加了壳,但还是有点诧异,代码有丶奇怪:
在这里插入图片描述
由于64位进程没有pushad和popad,但按理说也应该开始的时候有那么4、 5个push吧,这个程序开具就是个ret给我搞蒙了。导致直接没办法通过栈平衡(ESP定律法)来找到入口点。但这并难不倒我,虽然不能通过快捷方法,但无论如何他也只是壳程序,最后肯定要将原程序解压缩完毕装载入内存的,我一步一步执行还不信了。

脱壳过程

脱壳过程有点容易…我先一直单步执行,执行到一个向上跳转的地方,按照单步执行的原则,我需要直接执行到它的下一句,于是我在下一句下断点然后点运行:
在这里插入图片描述
结果它停到了一个奇怪的地方:
在这里插入图片描述
代码忽然变得好看了,然后程序中关于段的名字也变成了程序原本的名字modest-menu,而不是之前的ntdll而且地址段也从之前的7ff9…变为了1400…跨度相当大。
在这里插入图片描述
​ 图:之前程序中关于地址段描述都是ntdll

我有丶理由相信这里是oep,然后我记得我应该将这个程序从内存中dump下来然后导入IAT输入表等操作,查看了一下我只有这么个插件:
在这里插入图片描述
打开看了下基本能满足需求:在这里插入图片描述

点了下转储,然后点IAT自动搜索和获取输入表,一个也没找到…在这里插入图片描述

这说明我OEP找错了,这么好看的地方都不是OEP,那我只能继续向后找。因为这是第一次跳到这里,在这之前一直都在ntdll的地方执行,OEP肯定不会只在那里,所以我只能向后找。我知道这个程序刚打开由于我没有GTA进程,他会弹窗告诉我没有找到GTA,所以我一句一句执行到弹窗的代码,那么者之间就会存在OEP,而且说不定OEP也很明显就会被发现:
在这里插入图片描述
直行道方框代码处就会弹窗,其实OEP就在折页的上方圆圈的地方,只是当时我没有发现,不过也确实没有发现,这种操作确实很少见(可能我经验比较少吧,也可能是这个程序很奇怪,比较整个程序刚进去就是一个ret)。

确定了OEP的区段之后我又重新的在这一段中执行了一遍,我发现了一个大跳转:
在这里插入图片描述
这里就是这个软件坑的地方了,这句代码是从别的地方跳过来的,它直接把光标放在了第一行,我也不知道上文是什么内容,导致我第一遍忽略了。换一种方式看这句代码绝对不会被忽略:
在这里插入图片描述
这么一看,这句代码确实意义非凡,直接跳到了OEP:
在这里插入图片描述
现在我选择导出,然后搜索IAT,获取输入表就发现了,但第一次有几个无效选项,我以为是工具用的不对,又下了CHimpREC,最后搞了好久还缺VS运行库什么的。(新环境好麻烦)最后又回到这个插件忽然发现没有无效选项了…(神奇)或许和我装了VS的运行库有关…
在这里插入图片描述
最后成功脱壳,脱壳后的程序可以执行,并且在IDA里看到了原来程序的字符串:
在这里插入图片描述
然后交给我舍友去汉化了。

感触

也没啥感触,感觉脱个64位壳也不过如此嘛。

发布了56 篇原创文章 · 获赞 288 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/Breeze_CAT/article/details/98389365