一、反编译
用 jadx-gui 直接打开Apk,发现没有加固,源码如下:
二、源码分析
\1. 打开app,通过adb查看当前activity的名称
adb shelldumpsys activity | grep -i run
com.box.base.MainActivity就是主页
\2. MainActivity有四个tab页,找到第一个tab页FragmentLivePlatform
打开FragmentLivePlatform,整个界面比较简单,为RecyclerView实现的GridView视图
找到item的点击事件
查看ActivityRoomList类,与FragmentLivePlatform类似的GridView布局,
查找item点击
jionLiveRequest请求完成后,会触发续费的dialog窗口,我们在这里拦截响应结果
我们发现请求时会传递当前界面的handler,查看hadler实现
当isSuccessFul方法返回false时,会弹出续费的dialog,那么问题简单了,我们只要修改isSuccessFul的返回值即可
修改isSuccessFul方法,永远return true
三、破解
\1. apktool -r d test.apk
\2. 将isSuccessFul复制到as中并修改
\3. 生成smali代码(as java2smali插件)
\4. 替换原代码(第一步apktool 反编译出来的smali文件)
\5. apktool b test, 拿到未签名的apk
\6. 签名
jarsigner -verbose -keystore test.keystore -signedjar G:\signapk\test.apk G:\hack\test_unsigned.apk android.keystore
大功告成
总结:
文中的app为快餐式应用,并未进行加固,代码混淆,重签名校验等安全策略,
所以并未涉及到脱壳,xposed,动态分析so,网络抓包等内容。
后面会针对性的去尝试破解,并寻找对应的安全方法