您的位置:网站首页 > 热门源码 > 正文

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

类别:热门源码 日期:2018-9-16 16:05:14 人气: 来源:

  在dalvik时代有很多通用的脱壳方法,而现在的版本早已不使用dalvik模式,很多方法便不再适用。那么,在 art 模式下有没有一种通用的一种方法呢?在 DEF CON 25 (2017) 黑客大会中,两位大牛 Avi Bashan 和 SlavaMakkaveev 给出了一个十分精彩的方法,他们仅在Android源码中添加了十几行代码,就干掉了主流的加壳工具(360,百度,梆梆加固)。然而他们给出的代胎梦大全码只能跑在 Android 6.0 的模拟器上,总觉得还是有点不完美(如果壳中有反模拟器的反调试手段岂不是就完了?),因此本文将介绍如何将大牛的代码稍作修改,将其编译到 LineageOS 的 Android 7.1 系统中,并且利用该代码脱壳。

  利用加壳程序的特性,因为任何加壳程序在程序运行时都会对加密的 dex 文件进行还原,因此两位大牛根据 art 模式下的 dex 加载方式,找到了两个通用的脱壳点,在加壳程序还原原始 dex 后,将内存中的数据 dump 到文件上。

  参考他们的 PPT,可以看到他们找到的脱壳点分别是DexFile的构造函数DexFile::DexFile(),以及OpenAndReadMagic()函数,之后我们就要在这两个函数中添加我们的脱壳代码。

  可以看到,在加壳程序的脱壳过程运行时,会创建 DexFile 对象,它是我们的第一个脱壳点。在这里将 oat 中的 Dex 文件 dump 到应用文件夹下。

  接下来就是重新编译 Android 项目,缺乏这方面经验的读者可以参考我之前写的博文,当然英语好的同学可以直接阅读 LineageOS 的文档。值得注意的是,从源代码可以看到脱壳后的文件会放在/data/data的应用目录下,这一目录只有 root 和应用本身(准确的说,因为每个 android 应用都对应一个用户,这一用户对自己的应用目录有读写权限)可以访问,为了方便调试,我们需要在编译 LineageOS 时 root 功能,如果是其他系统的话,在刷完系统后也需要 root。

  这里笔者准备了一个 apk,并用360进行加壳,值得注意的是,因为360在加壳程序默认有证名校验功能,如何绕过签名校验不在本文的说明范围,因此,如果读者是使用自己的 apk 放到360里面做加壳,请务必加壳后的程序签名使用的证书与加壳前的证书一致,或者直接关闭360的签名校验功能。这里展示加壳前的 apk 和加壳后的 apk:

  从图中我们可以看到,我们的代码确实有运行,只不过目前还没有加壳的程序,所以不会 dump 。

  这里我们可以看到 dump 出了两种文件:classes.dex__unpacked_dex, classes.dex__unpacked_oat,(还记得我们改代码的两个脱壳点吗?),哪个有用哪个没用是由加壳程序的还原过程决定,最简单的方法是把他们都拉出来放到JEB里面看一下。

  文章由325棋牌提供发布

关键词:android源码
0
0
0
0
0
0
0
0
下一篇:没有资料

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

CopyRight 2002-2012 技术支持 源码吧 FXT All Rights Reserved

赞助合作: