-
-
[原创]基于Xposed实现的对注入app的UI模拟操作
-
发表于:
2018-4-2 16:19
13276
-
[原创]基于Xposed实现的对注入app的UI模拟操作
研究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日开班!