这里要补充两个smali指令 一个是if-eqz 另一个是if-nez 这两条指令是相对的
(1)if-eqz vA, vB, :cond_" 如果vA等于vB则跳转到:cond_
(2)if-nez vA, vB, :cond_" 如果vA不等于vB则跳转到:cond_
破解游戏思路
1.将支付成功的代码复制到支付失败和支付取消的代码处替换
2.在Success()处 switch选择替换 也可以替换函数入口
删除可能会产生费用的危险权限:
在AndroidManifest.xml里搜索(或者可以直接搜索下面的这个)
android.permission.SEND_SMS
删掉
应该是避免破解不成功不小心扣费的问题,在虚拟机环境中可以忽略此项
动态调试smali
原帖:https://www.52pojie.cn/thread-658865-1-1.html
1.AndroidKiller反编译后将smali代码打包文件夹导出 改名src 放入一个新建文件夹中
2.打开Android Device Monitor
3.找到要调试APK的包名和入口的Activity
这里要注意一下 在application标签里面要有 android:debuggable="true"
这句代码,没有是不能调试apk的 现在调试的这个例子默认是有这句代码的 有的apk中没有这句代码要自行添加上
4.把自己要调试的APK安装到手机中 并用数据线连接手机 打开USB调试模式
5.adb shell am start -D -n hfdcxy.com.myapplication/(hfdcxy.com.myapplication)(此处可以省略).MainActivity 对apk进行动态调试 这条命令运行后手机屏幕将会进入到调试界面(如果手机屏幕没有进入到调试界面说明USB没有连接好手机 或者USB调试模式 没有打开 或者其他原因)
adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity
6.记住Android Device Monitor中上一步找到的apk名字 得到online id和端口
记住下图圈起来的两个值 然后把Android Device Monitor关掉(这里一定要关掉,因为它会占用8700端口 导致后面转发端口失败)
7.打开命令行窗口 输入命令 adb forward tcp:8700 jdwp:19509
转发8700 端口 (这里 jdwp是自己Android Device Monitor中要调试app的Online值
)
8.导入第一步获得的smali文件夹,右键src Make Directory As --->Source Root
9.配置远程调试的选项,选择Run-->Edit Configurations
并增加一个Remote调试的调试选项,端口选择:8700
10.选择File-->Project Structure
配置JDK
11.下断点开始调试Run-->Debug'smali'
F8执行下一步 F9运行程序
可以调试smali代码了
注:
1.每次打开相同的app时online id 都会改变 要重新进行7 重新转发
2.打开Android Device Monitor时候在当前界面找不到再次打开的地方,要重新打开Android Studio