首页
社区
课程
招聘
[原创]基于Xposed实现的对注入app的UI模拟操作
发表于: 2018-4-2 16:19 13276

[原创]基于Xposed实现的对注入app的UI模拟操作

2018-4-2 16:19
13276
研究xposed也有一段时间了,现分享一个基于Android的测试框架robotium深度修改的模拟ui操作的库UIMocker。
先附上github地址: a3fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6D9N6h3W2D9K9e0p5$3i4K6u0r3g2f1W2y4L8$3y4C8k6i4t1`.

使用起来也很简单,在一个被hook的应用的application的onCreate()方法里面实例Solo这个类,然后另起一个线程,在新的线程里面就可以
使用Solo所提供的一些api来模拟点击,滚动屏幕以及基本的手势操作了


上面是我写了一个很简单的测试demo

实现原理很简单
我们知道Android的所有View都是由WindowManager来管理的,但WindowManager只是一个代理(这么描述可能不太准确),真正用来管理view的是WindowManagerGlobal这个类



这里面有一个Filed,叫mViews


这个mViews就是当前AndroidUi所显示的当前View的父view,也是我们熟知的DecorView,拿到它就获得了一个app所展示的所有的信息,而拿到这个mView非常的简单,只需要反射sDefaultWindowManager就可以了。





剩下就是暴力的遍历这个view了,具体可以看ViewGetter.java的具体实现。

UIMocker的所实现的功能不止于此,还有对Activity的动态劫持(非hook实现),实现思路也非常的简单。
分析ActivityThread.java的实现:


一个activity的生命周期的回调onCreate(),onResume(),onPause(),onDestroy()都是由mInstrumentation所代理实现的,这样只需要在运行时通过反射注入的形式将
mInstrumentation替换成我们自己所创建的,并通过动态代理的形式来对一个Activity的启动进行拦截就可以了.


这样就可以很方便的在一个Activity的onCreate()创建之前,对activity的启动Intent进行拦截和替换。

目前还在测试的功能就是对webview进行动态注入js的功能,目前仅仅实现了对android标准的webView的注入,但是对于像微信的x5内核还没有找到合适的办法,因为微信的x5内核的sdk是混淆的处理,不同版本的字节码不兼容,无法解决js执行结束后的回调。

这个库目前还在开发中,很多地方实现还不完善,欢迎star和fork。





[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1595
活跃值: (2539)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
2
赞!
2018-4-2 18:45
0
雪    币: 8275
活跃值: (2939)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2018-4-2 18:48
0
雪    币: 546
活跃值: (555)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
牛逼了,老哥
2018-6-15 18:37
0
游客
登录 | 注册 方可回帖
返回