因为接触了XPosed以后,感觉在这条路上越走越远了。作为一个资深的标准C++程序员,其实我个人是不建议做这种事情,但奈何有很多的朋友也想了解这块的技术,就简单的用最近很火的一个应用的hook做个项目的分析吧,仅做技术分享,可能没有太营养的内容,只是提供思路。
一. 项目的需求
- 二维码数据
- 获得账单详情
- 自动账号登录
- 掉单数据核对
二.项目剖析
- 针对二维码数据获取,这个是最简单的,基本只要找到口,就能获得数据。
- 账单详情有两种方式获得。第一种,在支付成功后,抓取应用服务器主动推送的数据并解析即可。第二种相对繁琐。主动打开账单列表,获得账单列表数据,并指定打开某条订单,获取订单详情。
- 登录方式有多种,人脸,指纹,账号密码。既然是自动登录,只能做账号密码了。登录界面的事情,肯定是hook登录界面来解决。
- 由于网络的原因以及不可控的因素影响,人工核对太麻烦,肯定要做掉单的自动核对并补单。这块就需要用到之前说的账单列表获取订单详情的方式来处理。先获得账单列表中的所有订单号,再和后端进行核对,然后将漏掉的订单详情主动补全,这块也是最繁琐的一个步骤。
三.门槛
- 反编译,比较好用的有AndroidKiller以及jadx。
- 插件客户端和服务端的数据交互,个人建议使用websocket,毕竟数据太重要了,http不稳定。
- 插件和hook应用的数据交互,直接通过Intent就够了。
- 数据的获取,这个就是个细致的活了,不厌其烦的尝试,当然有一些技巧可以减少不必要的工作,这个大家可以多摸索一下。
- Hook接口的获取,基本一个应用的剖析,90%的时间都是在做这个工作。并不是简单找到口就够,还需要配合整体的流程找到最佳的位置。使用完了以后,释放窗口也是应该的,否则,开了一堆的窗口,占用太多的系统资源,那就自己把自己搞死了。
- 代码混淆以及混编。代码混淆的问题,只能通过尝试,当然,如果能反编译出源码,事半功倍。