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

修改安卓源码:Art模式下的通用脱壳方法

来源:本站整理 作者:x565178035 时间:2018-03-30 TAG: 我要投稿

在dalvik时代有很多通用的脱壳方法,而现在的安卓版本早已不使用dalvik模式,很多方法便不再适用。那么,在 art 模式下有没有一种通用的一种方法呢?在 DEF CON 25 (2017) 黑客大会中,两位大牛 Avi Bashan 和 SlavaMakkaveev 给出了一个十分精彩的方法,他们仅在Android源码中添加了十几行代码,就干掉了主流的加壳保护工具(360,百度,梆梆加固)。然而他们给出的代码只能跑在 Android 6.0 的模拟器上,总觉得还是有点不完美(如果壳中有反模拟器的反调试手段岂不是就完了?),因此本文将介绍如何将大牛的代码稍作修改,将其编译到 LineageOS 的 Android 7.1 系统中,并且利用该代码脱壳。
0×01 基本原理
利用加壳程序的特性,因为任何加壳程序在程序运行时都会对加密的 dex 文件进行还原,因此两位大牛根据 art 模式下的 dex 加载方式,找到了两个通用的脱壳点,在加壳程序还原原始 dex 后,将内存中的数据 dump 到文件上。

参考他们的 PPT,可以看到他们找到的脱壳点分别是DexFile的构造函数DexFile::DexFile(),以及OpenAndReadMagic()函数,之后我们就要在这两个函数中添加我们的脱壳代码。
更加详细的解释还请看大牛的演讲和他们的项目。
0×02 修改源代码
两位大牛的源码托管在了GitHub, 但是他们用的系统还是 AOSP 的 Android 6.0.1 。由于我手头只有一个 Nexus 4, 不支持原生 Android 6.0 的源代码,就只能根据 patch 文件,在 Android 7.1.1 的 LineageOS 源码上做修改了。
首先,修改art/runtime/dex_file.cc中的DexFile对象的构造函数,具体改动如下:
*** art/runtime_bk/dex_file.cc  2018-03-19 17:23:00.587301100 +0800                            
--- art/runtime/dex_file.cc     2018-03-25 20:37:34.655223300 +0800                            
***************                                                                                
*** 26,31 ****                                                                                 
--- 26,32 ----                                                                                 
  #include                                                                             
  #include                                                                            
+ #include                                                                            
  #include "art_field-inl.h"                                                                   

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

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