欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

360加固保关键技术浅析

来源:本站整理 作者:androiddongjian 时间:2017-08-24 TAG: 我要投稿

阅读本文需要您有ELF和DEX文件结构等相关背景知识。为避免翻译习惯不同带来歧义,一些术语会使用英文描述。本文所用的APK样本地址点我下载,版本:32.1,文件大小:9,770,467字节。

图 1
图1描述的是360加固保技术方案示意图,序号表示其执行的先后次序。除原DEX外,剩余的组件均为360加固保所添加。更准确点,原DEX和AndroidManifest.xml里也被添加了代码。壳ELF来源于独立的so文件。图中原DEX和辅助DEX之间还有一段数据。
1 城门洞开迎司马
 一般而言,加固后的APK都会加入一些干扰信息,破坏反编译工具的正常运行。最新版本的360加固保是个例外,壳DEX和壳ELF都可以静态反编译。
其原因可能有二:首先,反编译工具的不断完善,能轻松绕过其中的干扰信息;其次,真正有用的数据都已被加密。与其花精力构造无用的反编译陷阱,不如集中力量保护好重要数据。
各种APK加固方案在技术选择上可能不尽相同,但它们都有一个共同的理论基础——被加密的目标数据足够安全。安全到静态反编译无法提取完整的目标数据。如果该基础被攻破,那么整个加固方案都将如流沙上的高楼轰然倒塌。
既然360加固保大门不设防,纵使里面没有太多可用信息,我们还是进入略探其究竟。
1.1 DEX文件静态分析

图 2
解析壳DEX文件,如图2。其中map item个数是16,简单计算可获得壳DEX文件大小为0x3b18,小于当前文件大小0x1d34d4。

图 3
图3所示壳DEX文件被插入的额外数据。看到重复出现的52,很容易让人联想这是用0×52异或简单加密后的数据。
反编译壳DEX文件后可以获得两条信息。
首先在AndroidManifest.xml设置application为com.stub.StubApp,以确保APP启动时加固代码首先获得执行机会;
其次,StubApp根据CPU架构加载相应的so文件,把执行权转移至更为安全的native代码。在StubApp类中声明了上百个native函数,不过只有几个有用,这也算是首次释放烟雾弹,来个下马威。
1.2 ELF文件静态分析
360加固保的壳ELF以独立so文件存在,文件名为libjiagu.so(不同CPU架构对应不同的so文件)。壳ELF比较老实,各种元数据都保持完整,可以轻松反汇编。图4是该文件的部分section headers数据。

图 4
图4所示的.init_arraysection在壳ELF文件偏移0x030bec保存2个函数指针,值为0x5f41和0x5f85(见图5)。显然二者都是Thumb指令函数入口,但objdump.exe把它们当作ARM指令反汇编了(见图6)。不过也难怪出错,壳ELF的确包含了两种指令,这会给动态调试增加难度。主ELF则只使用Thumb指令。

图 5

图 6
再仔细查看图4,还会发现,.bmp和.mips这两个名字和编译/链接器备案的section名字有点差别。.compiler看起来很正统,但实际它们3个section都是一伙的,主ELF就散落在此处。
系统加载ELF文件时并不需要sectionheaders信息,但为何libjiagu.so还保留着?问题先搁一边,下文再解释。
2 改门换庭变新颜
根据安卓APP启动流程,派生于application的com.stub.StubApp最先获得执行。稍加判断CPU架构,便开始加载壳ELF(见图7)。

图 7
上文所述,既然.init_array不为空,那么其指向的函数将最先被执行,比JNI_OnLoad还要早一步。
.init_array至少完成下列操作:
① 初始化一些字符串;
② Dynamic section清零;
③ 把.bmp、.compiler和.mips三者数据整体向后(高地址)移0×1000。这样,一来恢复了各个section原始面貌;二者顺带用“随机数据”覆盖后面的.comment至.shstrtab各个section,自然文件最后的section headers未能幸免。
至此,在JNI_OnLoad执行前,.init_array既恢复了后续需要使用的数据,又擦除了相关section数据。
目的相当明确,破坏门庭,杜绝通过programheaders和section headers登堂入室。       
3 三板斧头挡去路
 .init_array完成后,DVM虚拟机稍作初始化,便调用JNI_OnLoad。大幕开启。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载