首页
论坛
课程
招聘
[原创]利用VirtualApp实现免Root注入Hook(一)
2017-3-4 19:28 24091

[原创]利用VirtualApp实现免Root注入Hook(一)

2017-3-4 19:28
24091

才疏学浅,如有不对,请轻拍。


一个话题,将一个so注入到App中有几种方式?

1.Root,直接注入。

想必论坛的大部分人已经都会了,拿到了Root之后,我们可以利用ptrace直接注入。所以加固的第一点,便是反调试。


2.Root,将so作为系统so,这样任何App起来都得把so加载到app进程当中。

xposed的方式是重写孵化器,让孵化器能够加载自己的so,从而控制整个安卓。所以很多加固会去识别特征码,看是否有xposed的框架。


那么如果没有Root呢,我们如何往一个App里注入一个SO?

1.重打包

如果可以重新打包,我们可以反编译java层,在加载SO的地方,补一句加载So,把我们的SO放到App的Lib目录下。

2.我们启动App

其实关于我们启动App的方式有很多种,如果App的架构简单,我们可以反编译一部分App代码,重写java层,我们的java层去load原有App的So,在加载App的So的同时加载我们的So。

具体可以参考https://github.com/zhuowei/MCPELauncher/的做法。


如果App架构复杂,被加固了,无法重打包,无法注入,无法root,无法刷机,锁了BL,反正就这样了,我们是否还有办法注入?


自然还是可以!


关于VirtualApp要从安卓的插件化说起。


插件化,就是让App动态的加载一个磁盘的dex,这样实现热补丁技术,我们的Host进程类似于医生,长期稳定,而真正的dex则类似于病人,可以动态的修复。


其实加固的原理也类似于如此,加固的时候,我们拿到需要加固的APK将其中的dex给加密,然后替换掉入口,改为我们的壳APK入口,当壳加载了之后,我们再动态的加载原有的APK,这样静态反编译,得到的是壳Apk.


VirtualApp中我们重点关注下NativeEngine这个类,因为这个类会加载一个so,而且so会位于启动的apk当中。既然这里加载一个so,自然可以再加载几个也无所谓。

这个类加载的So做了很多事,包括hook系统的底层函数。

replaceOpenDexFileMethod(envenv->GetObjectArrayElement(javaMethods)isArtapiLevel)

其中这个函数将OPen_Dex,给Hook掉了,想做dumpDex是不是可以在这里做呢?

这个SO还做了IO重定向,因为创造了虚拟空间,所以读写需要重定向。

IOUniformer::startUniformer

这个函数中hook了一个

hook_dlopen(api_level);

这里hook了linker当中的do_dlopen函数,这是so加载的函数,加壳的SO一般在加载的时候进行部分脱壳,所以我们也可以在加载了之后加载我们的so,进行hook。

由于很多手机linker是被处理过的不见得都能找得到符号,我们也可以利用其它办法。

不过这里就已经达到了我们想要的效果,在别人的App里加载一个我们的so,在别人so加载的时候,进行hook。




[培训] 优秀毕业生寄语:恭喜id咸鱼炒白菜拿到远超3W月薪的offer,《安卓高级研修班》火热招生!!!

收藏
点赞0
打赏
分享
最新回复 (22)
雪    币: 3
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yy大雄 活跃值 2017-3-4 21:14
2
0
谢谢分享
雪    币: 0
活跃值: 活跃值 (472)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
tangsilian 活跃值 2017-3-5 13:24
3
0
开始以为VA是一个hook自身APP的框架,就没多看。你这么一解释就明白了,VA确实可以干很多事。 赞分享 期待您来一发代码~~
雪    币: 1568
活跃值: 活跃值 (677)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
pxhb 活跃值 2 2017-3-5 15:36
4
0
新论坛连收藏功能都没了?
雪    币: 35757
活跃值: 活跃值 (153657)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
linhanshi 活跃值 2017-3-5 15:37
5
0
pxhb 新论坛连收藏功能都没了?
http://bbs.pediy.com/thread-215920.htm 壇主 已經回復過
雪    币: 111
活跃值: 活跃值 (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pinggle 活跃值 2017-3-6 08:48
6
0
谢谢分享,Mark一下,期待更多分享~
雪    币: 1044
活跃值: 活跃值 (305)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bengou 活跃值 2017-3-6 09:19
7
0
mark
雪    币: 83
活跃值: 活跃值 (76)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
RorschachL 活跃值 2017-3-6 09:19
8
0
看了两篇楼主的注入方案,思路感觉很新颖啊。but..对VA不是很了解,它启动的APP应该是没有之前数据的吧?这样的话只能对复制出来的APP进行注入,没法控制本身安