cndml 发表于 2019-10-1 15:58

themia/winlciense壳64位脱壳总结

本帖最后由 cndml 于 2019-10-1 16:03 编辑

闲来没事脱了几个64位的tmd壳,破解道路相当曲折,在此分享一下脱壳经验。
1、先说一下64位程序。对64位程序刚开始研究,了解的比较少,只说一下与脱壳有关的。相比32位程序,64位程序代码段不需要重定位,地址操作全部是相对引用。
2、tmd壳在64位程序上,不知道是破解版的原因,还是别的,加密强度相比32位有所降低,api虚拟不再像32程序散落在内存中,而是集中在壳段内,这给修复api带来不少麻烦。
3、具体程序就不发了,说一下自己脱壳修复的过程。调试器使用x64dbg,iat修复使用scaylla。
4、第一步寻找oep,我采用的是esp定位,由于tmd壳在调到oep的时候,会执行一个ret指令,而oep地址就保存在esp里,通过在esp-8下断点,然后判断当前指令的第一个字节是否是C2就可以判断是否到了oep,采用这个办法主要是X64DBG的脚本不是很强大,加之对指令了解不多。
5、第二步,修复加密的api,跟32位程序一样,64位程序三个系统dll会有部分api被vm加密,ff25 ff15被修改为e8XXXX90的形式,这个通过在api的地址下访问断点,可以跟踪到加密前的api函数,写个简单脚本记录一下api函数就可以了,到达oep后,把加密api函数地址恢复了就可以了。
6、修复e8 call,这个是任务比较艰巨的,由于64位程序vm后的api地址调用保存在壳段,这给恢复iat带来相当大的工作量。
7、首先模仿LCT-AT的方法,用脚本申请内存,自建一段程序遍历代码段,把所有e8 call保存下来,然后,一段一段的执行vm后的api,在ret返回的时候,判断是否是合法的系统api地址,是则保存,这里有个问题,需要根据返回地址在esp里的位置,判断是ff15还是ff25,同时由于x64dbg的问题,脚本运行时间稍长就会导致调试器崩溃,只能恢复几十个api后,用hex把内存保存出来,免得前功尽弃,这个过程是相当熬人。
8、全部api恢复后,用x64dbg自带的dump插件或者用scaylla把程序dump出来,用scaylla恢复iat表,脱壳就基本成功了。
9、如果是dll程序,还需要重定位表,64位程序没有好的重定位工具,对tmd壳来说,不需要,跟踪壳解码过程可以找到完整的重定位表,直接dump出来就可以了,然后直接附在程序尾部即可。
10、这样脱壳的程序,运行没有问题,但是重新加壳会有问题,因为iat写在最后一个区段,重新用winlicense加壳的时候会提示文件头与winlciense不匹配,加壳后的程序不能正常运行。没有找到现成的工具,只好手动把iat表复制到idata段的尾部原来的iat位置,这个很好找,找个类似程序比较一下,发现一段有规律的乱码就是被改写后的iat位置,把iat表的地址手工改为新地址就可以了。
至此,一个tmd可就完美脱掉了。

cndml 发表于 2021-4-5 16:26

用力抱着。 发表于 2021-1-13 17:19
是个dll文件 修复后有13个函数有问题用下段法能找到一个   其他的都找不到

找到肯定能找到,只要eip到了系统领空,还找不到api地址么,只要程序能正常运行,加壳程序肯定要动态修改导入表,导入表加密只是把直观易懂的原始导入表,换个存储方式而已,耐心加细心,恢复导入表没啥难度

jy04468108 发表于 2019-10-16 08:59

citrix 发表于 2019-10-15 18:58
搜索了一下qq的添加好友,都是披着羊皮的狼,没有披羊皮的lang

我直接爆出正确的名字,岂不是会有很多人去加他?
你看楼主的TMD和WL的全称都是故意写错的,发现没。

xie83544109 发表于 2019-10-1 16:20

{:1_899:}
虽然不懂,还是要学习一下

ly765893958 发表于 2019-10-1 17:21

大佬学习了

jupiter6 发表于 2019-10-1 18:43

好文章 学习了   不知楼主对64位的WL授权bypass有研究没

lovemsq 发表于 2019-10-1 19:07

winlciense壳64位脱壳总结 [修改]

luli1111 发表于 2019-10-2 08:12

hn123 发表于 2019-10-2 09:45

楼主很强啊,你的分享对很多人都有用,对于一个刚学脱壳的学者来说太难了,你要是在能出个视频就好了。不过也可以顶一下,点击一下先。虽然看不懂,但可以从文字上看得到大概的方向。谢谢。

小可爱~ 发表于 2019-10-2 17:12

xie83544109 发表于 2019-10-1 16:20
虽然不懂,还是要学习一下

鸽, 在论坛打水漂打了10年了, :lol

xie83544109 发表于 2019-10-2 18:02

小可爱~ 发表于 2019-10-2 17:12
鸽, 在论坛打水漂打了10年了,

{:1_925:}
介都让楼主发现鸟

liangfuyin 发表于 2019-10-2 19:17

表哥厉害,感谢记录。
页: [1] 2 3
查看完整版本: themia/winlciense壳64位脱壳总结