标签归档:脱壳

360加固保ELF脱壳总结

Intro

360加固保可以针对ELF和DEX进行保护,360某些产品的ELF文件基本都使用了自家产品进行加壳,而这些正是我们感兴趣的东西。由于文件比较多,为了能够快速的拿到Payload,最近稍微总结了一些较为通用的方法。

大体流程

壳整个流程的目的是解密核心ELF文件到内存中,关键解密的地方有3处,均使用RC4。

  • INIT_ARRAY:壳填充了结构,Linker在so加载完毕后会调用这个回调。这个函数被重命名为__gnu_armfini_26。其功能是进行一些反调试,并且解密JNI_Onload的代码。
  • JNI_Onload:JNI_OnLoad负责解密核心ELF并加载。此时解密的ELF文件的入口代码没有解密。
  • __gnu_Unwind_0:最后的步骤,解密核心ELF的入口代码。在不同的版本中解密入口代码的地方有所不同,一般的产品中在壳调用原始JNI_OnLoad之前会进行解密,360的某些产品则会通过Hook库函数的方式,在调用库函数之前再进行解密。

关键函数

外壳大部分函数名被修改成了伪库函数的名字,如图: More

Android Native Library脱壳的一些Tips

这几天看了一下Android下so文件的壳与脱壳,目前这一块应该还算是比较新的市场。个人感觉,受到调试器和计算资源的影响,虽然已经有多家厂商在做,但目前的总体强度和花样,远没有x86下的五花八门。

对于我们这种每天都在被各种病毒的变形外壳虐待的人,掌握了技巧,一般的Android壳还是很好脱的。其实,到目前为止我也只看了一个。

福利

今天,鱼妹兔在看雪论坛上发表的《ApkProtect 分析》绝对是一个很好的研究资料。其中包括了完整逆向的壳代码,还有大量注释的idb,很好的呈现了Android壳的主要流程和必须的细节。掌握了其中的关键,别的壳也就是时间的问题。 More