一次逆向工程的记录-Xposed使用

场景:


最近接到一个需求,在支付宝上自动批量生成二维码,上传到服务器上。由于使用到的技术挺有趣,因此做一下记录。

主要使用到的技术是Xposed,但是Xposed只能运行在root后的手机上。辛亏有位大神提供了VirtualXposed,可以完美的在非root的手机上模拟Xposed环境。


开发思路:

使用Xposed hook到二维码生成界面和设置金额、备注界面的activity和相关的控件,根据任务不断的模拟用户操作,获取二维码。


遇到的问题和解决方案:

Q: 在某些手机上无法正常的使用Xposed log功能

A:换个手机就好


Q:支付宝检测到Xposed模块运行,自动关闭

A:将Xposed模块单独放在一个类内,并对程序进行apk包混淆


Q:如何正确的hook到需要的控件

A:首先通过adb 获取到相关的Activity,然后通过反编译获取到支付宝相关代码。

这些代码都是混淆过的,但是使用混淆过的成员变量名字,依然能够正确的hook这些变量。

需要注意的是,hook的函数,如果是基类声明的,则必须要在子类被重写才能hook到,否则无法正常hook。


Q:正确与XPosed模块通信

A:相关的账号和服务器配置是在我们自己的APP上进行配置的,获取到的支付宝收款二维码是在支付宝APP内,由于安卓相关的安全策略,两个APP是无法直接共享数据的,同时我们无法直接在支付宝调用我们接口。因此需要引入Service。使用Service的Message功能进行任务获取,传递给支付宝。同理,支付宝获取到二维码后,告诉Service,让Service上传相关的二维码。

更新:

由于现在大多数手机厂商都会清理Service,因此使用上述的方法在某些手机中无法保证数据传输的安全性,所以在新的版本中使用广播的方式进行数据传输,但是当发送多次后,广播也有可能无法被接收到,所以每次生成二维码后,并不直接传输,而是等到任务完成后,一次性发送。



程序安装:

最好保证手机环境干净,没有安装安全卫士和太多的其他APP,防止系统资源不足时,引发的异常。

首先将APP和支付宝安装到手机内,然后将两者一同安装到VirtualXposed中,将APP的模块勾选上。重启VirtualXposed,在VirtualXposed中运行APP,点击收钱,当后台有任务后,就会自动运行。

你可能感兴趣的:(一次逆向工程的记录-Xposed使用)