Ericky 发表于 2016-1-2 22:21

学会”融会贯通”简易脱某So壳

前言“元旦佳节,难得有闲情逸致。品一杯香茗,看IDA中的汇编代码。”虽说是迟到的祝福,但这里还是先祝各位朋友元旦快乐,愿大家的技术蒸蒸日上,身体棒,棒,棒!在逆向这条荆棘密布的道路上,难免遇到各种各样的困难,有的甚至是看似不可逾越的鸿沟。但话又说回来,其实逆向这个领域,很多技术是相通的,思维方式更是相通的。网上的资料并不少,教程和文章都很多,少的就是大家对一些新问题的思考,对一些知识的灵活运用和融会贯通。今天就用这样的方式来脱一下某公司的so壳。论证一下融会贯通在逆向领域甚至说在“这个稀少方向”的重要性。
初探加壳so一般来说,我们从java层入手,在跟踪某一个关键函数或者一个关键变量的时候,会跟到一个native的函数里,这个时候就需要进入深邃的so。或许很多人会害怕so加壳,觉得那么遥不可及。我们来揭开加壳后so的神秘面纱,让大家对so加壳不再畏惧。打开IDA定位到关键函数后:如图,指令都被抹掉了,关键的函数完完全全被“清空”。其他函数也一并被清空:卸下加壳so的外衣尽管IDA加载的so里面的指令都被清空了,但是有一条不变的宗旨。那就是这些代码在执行之前肯定要解密的,解密的时候那就肯定在内存中,既然在内存中,我们就可以把它拿出来。在关键函数段首下好断点:IDA附加程序,出现same则点击same对话框。接下来需要让程序断在我们的断点处,代码已经解密出来了:接下来用Ctrl+S 来定位一下该so在内存中的位置,用以下IDC脚本dump出来即可:auto fp, SoAddress;
fp = fopen("D:\\unpack.so", "wb");
for ( SoAddress=0x51F6546C; SoAddress< 0x51F6B7B8; SoAddress++ )
fputc(Byte(SoAddress), fp);脱壳前后对比

左边为加壳后的指令,都被抹去右边为脱壳后的指令,全部恢复总结希望通过对这篇文章阅读,你已经对so不再恐惧了。有所思考的读者,肯定会发现,这和脱dex很相似,是的,这就是脱dex的方法在脱so壳上的再利用。很多人遇到问题就百度,就google,百度和google没有的话他就不知所措了,或者说是一直在等他人分享的工具,在这样的心理下,形成了不容易使得他自身技术进步的一种思维方式。我还是想说,很多技术其实网上都有资料,稍微变形或者换了一个新东西很多人就懵了(最近还有人问支付宝内购的问题,论坛里有大量的资料了),所以说,对知识学习的融会贯通的程度决定了我们能走多远,另外一方面,我们缺的不是资料,缺的是思考,缺的是一个思维定式里的突破。最后希望大家能把学的知识融会贯通,也再次祝大家2016年有新的收获!(*^__^*) PS:附件附上脱壳前后so。2016.1.2By Ericky


Ericky 发表于 2016-1-4 22:22

wgz001 发表于 2016-1-4 12:01
应该是有反调试了,附件和你分析的是不一样的文件,大大有空再看一下吧,谢谢了

今天没时间仔细看,但我看你的图,里面有个AntiDebug,确实不一样,你可以在这个函数段首也下个断点,先把antidebug 干掉,最暴力的方式就是把检测代码都nop掉

wgz001 发表于 2016-1-4 11:39

Ericky 发表于 2016-1-4 11:34
你点下验证按钮就触发了
我是点了验证按钮的,但是停不到下好的断点那里,停在另外的地方,好像有反调试么?求指点一下

吾爱米西 发表于 2016-1-2 22:24

占个沙发,支持原创

qtfreet00 发表于 2016-1-2 22:39

师傅牛牛哒{:301_978:}

玩世不攻 发表于 2016-1-2 22:50

还有板凳吗   支持一下

StartF5 发表于 2016-1-2 22:53

好像很高深的样子

简丶 发表于 2016-1-2 23:02

收藏先。。

lies2014 发表于 2016-1-2 23:15

前来学习,茅塞顿开啊!

潇洒gg 发表于 2016-1-2 23:30

这么6的教程,虽然看不懂,但是可以先顶下

BY丶显示 发表于 2016-1-3 00:27

学习了,支持一个,

孤独沉默者s 发表于 2016-1-3 00:30

最近刚好遇到so加壳的难题,感谢分享(ω)
页: [1] 2 3 4
查看完整版本: 学会”融会贯通”简易脱某So壳