前言
近期运营提出一个需求:实现租号玩免密登录游戏功能,然后集成进交易虎 App,用户在 App 里面进行租号,我们不需要将用户名密码给到用户,而是只提供一个打开游戏的按钮,用户点击后自动打开游戏,并直接进去区服选择界面。这样既方便了用户,同时也使得卖家的账号信息不被泄漏。 我负责前期调研,通过脱壳、反编译破解了租号玩 App,实现了 QQ、微信免密登录。注:说说是免密,实际上只是我们代替用户去登录,然后把登录信息给到 App。
本次得到的收获
Xposed 相关
Xposed 框架可以实现任意方法以及资源的 Hook, Xposed 只支持到 Android 7.0,而我的手机是 Android 10.0 因此不能使用,于是考虑使用 EdXposed 其支持 Android 8.0 ~ 11.0 ,不过安装方式没有 Xposed 那么简单。
安装
首先需要 Root 手机(小米手机首先用官方自带的方式解锁,然后刷入开发版即可),然后需要安装 Magisk ,安装完毕后在其内部再安装 Riru 以及 Riru-EdXposed 模块然后重启手机就发现 EdXposed 以及安装完毕,然后后续操作与 Xposed 基本一致。
使用
API 低于 26 的机型可以结合 Xposed 框架以及以下三个方法实现脱壳。注:成功实现腾讯加固的脱壳
- ClassLoader.loadClass(String, boolean)
- Class.getDex()
- Dex.getBytes()
class UnShellHook : Hook { |
Smali 相关
Smali 也能进行动态调试,这非常有利于分析代码。
操作步骤
要能调试首先该应用的 AndroidManifest.xml 中的 application 节点下,必须存在 android:debuggable = “true” 否则无法进行调试,修改这个也简单,反编译一下修改后回编译签名就行。
接着使用 adb 启动该应用,该命令执行后,就会打开该应用,然后显示等待 debugger attach 上。
adb shell am start -D -n com.hefuwei.demo/com.hefuwei.demo.MainActivity # 包名/入口 Activity 全类名
接着再使用 adb 获取 pid。
adb shell ps |grep demo # demo 表示过滤条件
接着再设置 adb 进行端口转移。
adb forward tcp:8700 jdwp:16939 # 8700 为调试端口号随意 16939 为应用的 pid
使用 apktool 反编译 apk,并将 smali、smali_classN 合并到 smali 文件夹下,然后将该文件夹名称修改为 src,并将其放入 demo 文件夹下(名称任意)。
使用 as 导入 demo 文件夹,然后安装插件 ideasmali 插件,下载地址 https://bitbucket.org/JesusFreke/smalidea/downloads/ 安装完毕后重启。
然后添加一个 run configurations,类型为 Remote 端口号为刚才指定的端口号。
打开 smali 文件打上断点,点击启动调试即可。