Android 关于模拟点击和Hook框架的杂谈

1. 背景

    就跟我们以前玩页游挂机一样,Android端也有游戏,而且样式繁多,如果重复的操作每次都要自己重复一遍操作,那不得烦死,所以就有了这篇文章,本文仅探讨方案,大家可以尝试。而且现在的模拟器(比如MuMu,Nox)都提供录制脚本,然后在重复执行的功能,也很方便。

2. 技术选型

    从技术这方便看,大概需要三种技术,Android的模拟点击技术、Android设备支撑以及便于切换设备参数时用到的Hook框架

2.1 Android的模拟点击技术

2.1.1 使用模拟器自带的录制功能

    这个就不再多说,大家都可以尝试一下,有稍微的学习成本,但是不用自己开发,很方便。

2.1.2 AccessibilityService 辅助服务

  设计初衷在于帮助残障用户使用android设备和应用,在后台运行,可以监听用户界面的一些状态转换,例如页面切换、焦点改变、通知、Toast等,并在触发AccessibilityEvents时由系统接收回调。后来被开发者另辟蹊径,用于一些插件开发,比如微信红包助手,按键精灵,还有一些需要监听第三方应用的插件。 最后我会附上自己开发的一个按键录制功能,供大家参考学习。

2.1.3 UiAutomator 

    UiAutomator 是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架,基于 Accessibility 服务。其最大的特点就是可以跨进程操作,可以使用UiAutomator框架提供的一些方便的API来对安卓应用进行一系列的自动化测试操作,如点击、滑动、键盘输入、长按以及常用的断言方法等。这个最后我也会附上自己开发的一个脚本,供大家参考学习。

   模拟点击技术应该还有类似Monkey一类的,大家也可以提出讨论学习。

2.2 Android Hook框架

    因为很多时候,在做逆向的时候,使用Hook框架+静态分析,能够快速的找到切入点,而且现在的很多应用都是对设备id及账号做了绑定的,所以你如果多账号,但是只有一台设备的话,可以通过Hook设备信息,替换达到目的。

2.2.1 Xposed

    原理:Android系统中所有的app进程都是有zygote进程孵化而来的,Xposed会替换/system/bin/app_process文件,替换后的app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。

    这应该是我们最常用的一款Hook框架,而且版本众多,更新快,而且对新手特别友好,之前我也是一步一步的跟着吾爱破解的大神们学习的。

2.2.2 Cydia Substrate

    与 xposed 的hook原理是一样的,二者都可以作为Java Hook的框架,不同的是Cydia还可以用来Hook Native层的东西。

    这个框架我也是首次使用,最大的感受是对系统版本太敏感了,而且现在已经不更新了,不过对Android4.4及以前的版本可能可以用,大家也可以尝试一下,用起来倒是挺简单的,需要安装一个Cydia Substrate应用,以及指定需要Hook应用的包名及Application即可。不能安装在模拟器上,版本不支持。

2.2.3 Frida

    是一款基于 Python + JavaScript 的 Hook 与调试框架,支持跨平台。

    这个框架我倒是没用过,不过这个框架需要Pc端的环境支持,不能直接跑在Android环境下,这次也就没采用。

2.3 Android设备选择

    手机,模拟器,机顶盒,pad都可以。

3. 技术应用

3.1 AccessibilityService 的应用--录屏

    我做的仅仅完成了记录键盘输入的Keycode,整理输出成一个json,然后放在需要的地方应用。项目地址放在这里,有需要的可以参考学习下。

3.2 Uiautomator 的应用 -- 模拟点击

    这个Demo是完成了对上面录制脚本的解析,然后做一些模拟点击的操作。因为UIAutomator不能准确识别页面状态,所以有时候可能需要分析应用的页面元素,可以通过Android自带的 Android Device Monitor 工具,在Android SDK/Tools目录下的 monitor工具。如下截图,就可以用来分析页面层级,以及我们所需要点击的resourceid。

 4. 总结

    总而言之,如果想要做一个按键精灵,实现页面的模拟点击,还是有很多办法的,但常用的应该就这么些,如果还有更好的方案,大家也可以一起讨论学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值