首页
社区
课程
招聘
[原创]FART:ART环境下基于主动调用的自动化脱壳方案
发表于: 2019-7-15 18:26 98809

[原创]FART:ART环境下基于主动调用的自动化脱壳方案

2019-7-15 18:26
98809
收藏
免费 63
支持
分享
打赏 + 160.00雪花
打赏次数 3 雪花 + 160.00
 
赞赏  看雪高研   +10.00 2022/08/29 hanbing NB
赞赏  koflfy   +100.00 2019/08/13 向楼主学到很多东西,诚心感谢。
赞赏  koflfy   +50.00 2019/07/16 精品文章~
最新回复 (124)
雪    币: 39
活跃值: (57)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
101
大佬,github:https://github.com/hanbinglengyue/FART这个里的源码是只能放到aosp6.0里吗?我把它放到aosp8.0里编译,需要改代码吗?
2020-3-31 11:43
0
雪    币: 4869
活跃值: (18865)
能力值: ( LV13,RANK:317 )
在线值:
发帖
回帖
粉丝
102
学习学习学习
2020-4-2 17:28
0
雪    币: 365
活跃值: (559)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
103
大佬啊,moto nexus6 刷机之后,脱壳,有的app会崩溃,关键部分的dex没有dump下来,app是有什么对抗吗?
2020-4-15 22:08
0
雪    币: 3344
活跃值: (2009)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
104

咨询一下hanbing大佬,既然很多函数是在本身执行后才恢复的,Fart是在哪里实现主动调用函数,使函数真正走到解释执行的入口方法Excute()的呢?

2020-4-19 02:22
0
雪    币: 365
活跃值: (559)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
105
鹅厂某固样本,dex dump没有问题,但是method CodeItem dump不全。
2020-4-20 15:02
0
雪    币: 1705
活跃值: (676)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
106
FuckCyber 看了楼主的思路,真的是非常巧妙,而且大佬给出的修复脚本确实是非常好。这篇帖子的亮点我觉得对于我来说最重要的就是亮点,一个是ART下的主动调用思路和设计,一个就是大佬的python修复脚本。首先大佬设计 ...
老铁求个修复脚本,小白写不了这么长的代码
2020-7-31 09:55
0
雪    币: 18
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
107
hanbingle 抱歉,修复合成dex的版本不会提供,你可以自行修改python修复脚本即可
群里有合成dex脚本不
2020-10-20 23:35
0
雪    币: 0
活跃值: (329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
108
hanbingle 欢迎共同学习,共同进步

请问一下,frida的脚本frida_fart_hook.js跑的时候dumpcodeitem函数里的

var codeitemlength = funcGetCodeItemLength(ptr(codeitemstartaddr));这一行报错


=================================

addrGetCodeItemLength-> 0x9191c561

funcGetCodeItemLength-> 0x9191c561

codeitemstartaddr-> 0x76a17ef6

Error: access violation accessing 0xd36b59e6

============好像系统版本用错了,我那个dex是cdex格式的

最后于 2020-11-15 19:02 被黑色刺客编辑 ,原因:
2020-11-15 18:33
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
110
大佬着实牛逼 膜拜一下 但修复的python脚本我这里跑不起来 我是py3  是版本原因吗
2021-1-23 17:45
0
雪    币: 184
活跃值: (3373)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
111
万里星河 大佬着实牛逼 膜拜一下 但修复的python脚本我这里跑不起来 我是py3 是版本原因吗
看脚本里输出命令的特点,明显是python2的
2021-2-23 14:58
0
雪    币: 232
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
112
尝试了一下,真心不错,学习了。专业!
2021-4-22 09:48
0
雪    币: 193
活跃值: (1215)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
113
为什么不能自动保存
2021-5-8 19:34
0
雪    币: 181
活跃值: (2943)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
114

dddd

最后于 2021-10-14 19:42 被huaerxiela编辑 ,原因:
2021-10-14 19:41
0
雪    币: 181
活跃值: (2943)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
115
WindStormy ![](upload/attach/202004/849838_Z8DBKSQE294CMEE.png) ### 咨询一下hanbing大佬,既然很多函数是在本身执行后才恢复的,Fart是在哪 ...

小菜花看了文章之后冒昧替大佬回答下【Fart实现主动调用函数逻辑的大致流程】,如下:
作者是在壳完成执行权的交付之后,选取了一个合适的点通过反射也好,参数间接获取也罢拿到了应用最终的classloader,然后从classloader->pathList->遍历dexElements->DexFile->mCookie, 通过mCookie调用DexFile的一个static方法,好像是getClassNameList,拿到所有类名,然后再去loadClass,通过反射拿到类的所有方法,,然后去根据ArtMethod去构造自己的fartInvoke,加上参数标识,然后当调用到ArtMethod的invoke的时候如果发现是fart的标识,就开始根据artmethod对象的指针获取codeitemoffset,然后根据dex-codeitem文件格式,计算tryitems存在与否的不同情况的codeitem长度,最终完成函数粒度的指令dump

可能有理解不当之处,仅供参考。。。

最后于 2021-10-14 19:49 被huaerxiela编辑 ,原因:
2021-10-14 19:43
0
雪    币: 105
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
116
huaerxiela WindStormy ![](upload/attach/202004/849838_Z8DBKSQE294CMEE.png) ### 咨 ...
刚看完,确实是你这个思路。可能他的意思是函数抽取恢复的过程是怎么和 fart 执行 artmethod->invoke 方法关联起来的,是在执行 artmethod->invoke 的时候壳会自己恢复函数吗?
2021-12-17 17:01
0
雪    币: 3269
活跃值: (2964)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
117
黑色刺客 hanbingle 欢迎共同学习,共同进步 请问一下,frida的脚本frida_fart_hook.js跑的时候dumpcodeitem函数里的var& ...
cdex实际上是AOT生成的base.vdex,删除/data/app/pkgname/oat文件夹,再dump即可。(也可禁用AOT、强制解释执行,方法很多)
2021-12-19 14:15
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
118
blue_sky 刚看完,确实是你这个思路。可能他的意思是函数抽取恢复的过程是怎么和 fart 执行 artmethod->invoke 方法关联起来的,是在执行 artmethod->invoke 的时候 ...
我也有这个疑问 调用这个方法后在里面第一行就判断从而结束调用 并没有走到解释器啥的里面 难道仅仅是调用一下artMethod::invoke函数就能触发壳解密codeItem吗
2021-12-26 22:49
0
雪    币: 181
活跃值: (2943)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
119
万里星河 我也有这个疑问 调用这个方法后在里面第一行就判断从而结束调用 并没有走到解释器啥的里面 难道仅仅是调用一下artMethod::invoke函数就能触发壳解密codeItem吗
那不一定啊
壳子codeitem恢复的时机 和 你主动构造函数调用链的深度 ,两者结合在一起看,才确定了你是否可以脱壳成功
比如说,如果codetiem恢复的时机是在loadClass的loadmethod中,那么你artMethod::invoke之前都已经进行类的loadClass了,此时loadmethod已经执行,你artMethod::invoke的时候那自然也就恢复了了,此时你就可以dump codeitem
再比如说,如果codetiem真正的解密时机是在指令真实执行的时候,那目前开源的fart中artMethod::invoke后直接就进行dump,那此时就是不行的,然后论坛中就出现了以youpk为代表的构造了更深的调用链就是来解决这这种问题的。。。。。
所以综上所述,一般情况下,当然是调用链越深越降维打击越有更多可能。
2022-6-3 14:12
0
雪    币: 181
活跃值: (2943)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
120
blue_sky 刚看完,确实是你这个思路。可能他的意思是函数抽取恢复的过程是怎么和 fart 执行 artmethod->invoke 方法关联起来的,是在执行 artmethod->invoke 的时候 ...
见199楼回复
2022-6-3 14:13
0
雪    币: 224
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
121
啥时候出新版本呀,弄个2022年新版本呀?
2022-6-26 07:18
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
122
感谢大佬分享资源
2022-7-8 18:36
0
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
123
太强了
2022-8-31 19:12
0
雪    币: 84
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
ch1
124
+1
2022-10-25 23:25
0
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
125

//step 4: 创建Application对象;在makeApplication函数中调用了newApplication,在该函数中又调用了app.attach(context),在attach函数中调用了Application.attachBaseContext函数
    Application app = data.info.makeApplication(data.restrictedBackupMode, null);
    mInitialApplication = app;


11小时前
0
游客
登录 | 注册 方可回帖
返回
//