吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13190|回复: 107
上一主题 下一主题

[Android 原创] android动态加载dex支持art

  [复制链接]
跳转到指定楼层
楼主
发表于 2017-3-17 15:16 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 Mr白白小武 于 2017-3-17 15:22 编辑

前提
首先思路参考了MultiDex,代码参考了某某早期加固。
总览


Davlikvm
Davlik 内存加载技术比较成熟,网上资料也比较多
采用最简单的方法:
实现下面这个系统方法:具体代码就不贴出来了
[C++] 纯文本查看 复制代码
Dalvik_dalvik_system_DexFile_openDexFile_bytearray(const u4* args,JValue* pResult)

在这个过程中需要注意如何拿到gDvm.userDexFiles这个指针
解决方法:
[C++] 纯文本查看 复制代码
void dvmInternalNativeShutdown()
{
    dvmHashTableFree(gDvm.userDexFiles);
}



Hook dvmHashTableFree方法然后调用dvmInternalNativeShutdown方法,通过dvmHashTableFree参数拿到指针(方法来自看雪论坛)通过这种方法可以实现简单的内存加载和对dex加密,具体实现方法可以参考代码
Art


art 内存加载技术网上资料不多,也没实现完整的。思路参考某某加固的早期代码。这样兼容性可能好一点。
首先是通过反射调用DexFiel.loadDex方法
[Asm] 纯文本查看 复制代码
static public DexFile loadDex(String sourcePathName, String outputPathName,
        int flags) throws IOException

在调用loadDex之前hook下面这些方法
[C++] 纯文本查看 复制代码
[/size][/font][/color]
[color=#000][font=Helvetica, "][size=15px]Hook::hookMethod(arthandle, "open", (void*)artmyopen, (void**)(&artoldopen));
    Hook::hookMethod(arthandle, "read", (void*)artmyread, (void**)(&artoldread));
    Hook::hookMethod(arthandle, "munmap", (void*)artmymunmap, (void**)(&artoldmunmap));
    Hook::hookMethod(arthandle, "mmap", (void*)artmymmap, (void**)(&artoldmmap));
    Hook::hookMethod(arthandle, "fstat", (void*)artmyfstat, (void**)(&artoldfstat));
    Hook::hookMethod(arthandle, "fork", (void*)artmyfork, (void**)(&artoldfork));
    Hook::hookMethod(arthandle, "execv", (void*)artmyexecv, (void**)(&artoldexecv));

在文件读取过程中做一些小动作,就可以实现dex文件简单的加密。这样也可以实现dex"不落地加载"。可能这种方法不太完美,但是相对来说可能稳定一点。兼容性也相对好一点。
使用方法:
目前集成工具暂时没做好。
demo:
给出一个测试demo:http://pan.baidu.com/s/1bpmtsUN
有任何问题可以私信我。也可以在github上提交崩溃日志

小结:
上面描述比较简单。整个过程还是比较复杂的,并且涉及到art dex2oat,代码有一定的参考价值。
工作量也是蛮大的。测试了4.4 、6.0、7.1 系统,其他机型没测试
代码稍后整理将会开源:https://github.com/xiaobaiyey/dexload

免费评分

参与人数 47吾爱币 +42 热心值 +44 收起 理由
涉世未深 + 1 谢谢@Thanks!
aixnhc + 1 + 1 我很赞同!
xt2000 + 1 + 1 用心讨论,共获提升!
ningjing2011 + 1 + 1 我很赞同!
文可う润心 + 1 + 1 谢谢@Thanks!
Chen1992 + 1 + 1 我很赞同!
burning你的心 + 1 + 1 我很赞同!
笑熬豆浆 + 1 热心回复!
小畅快跑 + 1 + 1 我很赞同!
xyuetao + 1 + 1 用心讨论,共获提升!
netease67 + 1 + 1 谢谢@Thanks!
bet365china + 1 + 1 谢谢@Thanks!
青莲剑哥 + 1 + 1 我很赞同!
soyiC + 1 + 1 谢谢@Thanks!
wjwudi109w + 1 + 1 谢谢@Thanks!
sonnenschein + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Three_fish + 1 + 1 谢谢@Thanks!
gao0411 + 1 + 1 我很赞同!
红哥 + 1 + 1 我很赞同!
海底总动员 + 1 + 1 我很赞同!
很快再相见123 + 1 + 1 我很赞同!
lapop + 1 + 1 热心回复!
birdbro + 1 + 1 我很赞同!
fisher + 1 + 1 向社会主义低头!
MAIENLI + 1 + 1 热心回复!
CHEUNGQAZ + 1 我很赞同!
adq_cq + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
吾2破解 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
wuwanga + 1 + 1 用心讨论,共获提升!
44_st + 1 用心讨论,共获提升!
观世正宗 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hx924923235 + 1 + 1 用心讨论,共获提升!
ripples + 1 + 1 用心讨论,共获提升!
a5606495 + 1 + 1 谢谢@Thanks!
siuhoapdou + 1 + 1 谢谢@Thanks!
ayoma + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Amanda小黑 + 1 + 1 已答复!
陈国琦丶 + 1 + 1 热心回复!
霖° + 1 + 1 热心回复!
lawlier + 1 + 1 谢谢@Thanks!
asqee12345 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
caddy + 1 + 1 已答复!
该怎么学会 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ztech + 1 + 1 用心讨论,共获提升!
noxkey + 1 + 1 用心讨论,共获提升!
海绵foryou + 1 + 1 热心回复!
a435751757 + 1 + 1 精品贴当然要给分了

查看全部评分

本帖被以下淘专辑推荐:

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

推荐
发表于 2017-3-17 15:22 | 只看该作者

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

推荐
发表于 2017-4-28 16:24 | 只看该作者
7.1的内存加载(直接从byte字节数据加载,自构造内存DexFile后,还是过不了defineclassNative这一关,总是报错

Check failed: dex_cache_location == dex_file_suffix (dex_cache_location=ςက, dex_file_suffix=�@,�) '
A/DEBUG:     r0 00000000  r1 000050e6  r2 00000006  r3 00000008
A/DEBUG:     r4 d3168978  r5 00000006  r6 d3168920  r7 0000010c
A/DEBUG:     r8 ece9790f  r9 d3d37a00  sl 0000000a  fp d3d37a00
A/DEBUG:     ip 0000000b  sp d3166d28  lr eecd0507  pc eecd2d88  cpsr 200f0010
A/DEBUG: backtrace:
A/DEBUG:     #00 pc 00049d88  /system/lib/libc.so (tgkill+12)
A/DEBUG:     #01 pc 00047503  /system/lib/libc.so (pthread_kill+34)
A/DEBUG:     #02 pc 0001d755  /system/lib/libc.so (raise+10)
A/DEBUG:     #03 pc 00019291  /system/lib/libc.so (__libc_android_abort+34)
A/DEBUG:     #04 pc 000172f8  /system/lib/libc.so (abort+4)
A/DEBUG:     #05 pc 0031a669  /system/lib/libart.so (_ZN3art7Runtime5AbortEPKc+328)

A/DEBUG:     #06 pc 000b5205  /system/lib/libart.so (_ZN3art10LogMessageD2Ev+1132)

A/DEBUG:     #07 pc 000dedb7  /system/lib/libart.so (_ZN3art11ClassLinker21RegisterDexFileLockedERKNS_7DexFileENS_6HandleINS_6mirror8DexCacheEEE+1294)

A/DEBUG:     #08 pc 000e6683  /system/lib/libart.so (_ZN3art11ClassLinker15RegisterDexFileERKNS_7DexFileEPNS_6mirror11ClassLoaderE+362)

A/DEBUG:     #09 pc 002a3337  /system/lib/libart.so (_ZN3artL25DexFile_defineClassNativeEP7_JNIEnvP7_jclassP8_jstringP8_jobjectS7_S7_+230)

A/DEBUG:     #10 pc 005d93a7  /system/framework/arm/boot-core-libart.oat (offset 0x47e000) (dalvik.system.DexFile.defineClassNative+170)

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

板凳
发表于 2017-3-17 15:21 | 只看该作者

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

报纸
发表于 2017-3-17 15:35 | 只看该作者
虽然现在看不懂,但以后会懂的

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

地板
发表于 2017-3-17 15:36 | 只看该作者
谢谢楼主的分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

7#
发表于 2017-3-17 15:45 来自手机 | 只看该作者
果然精品

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

8#
发表于 2017-3-17 15:45 来自手机 | 只看该作者
不懂,但感谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

9#
发表于 2017-3-17 15:46 来自手机 | 只看该作者
谢谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

10#
发表于 2017-3-17 15:48 来自手机 | 只看该作者
不错,感谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

11#
发表于 2017-3-17 15:52 | 只看该作者
感谢发布原创作品,吾爱破解论坛因你更精彩!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:Service@52PoJie.Cn

快速回复 收藏帖子 返回列表 搜索

RSS订阅|手机版|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2017-9-20 09:48

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表