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

来源:互联网 发布:课件下载软件 编辑:程序博客网 时间:2024/04/29 05:26

学会”融会贯通”简易脱某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.2
By Ericky

0 1