运行
开始游戏界面
注意
夜神模拟器完全没进入到开始页面就崩溃了
雷电还能多用一会,能开局
但是建议此APK不要下载练习了,本文就看看吧,或者用其他APK文件练习
目的
AndroidKiller
字符串搜索
将中文注入后转为UniCode后搜索:
建议搜索关键字“购买”、“支付”、“付费”:
JavaDecompiler
查看源码,在Java代码中找到关键函数和逻辑,可以使用Ctrl+F查找字符串:
修改Smali
注意到有这样一个字符串“恭喜您达到消费上限,自动开通尊享VIP,您可以免费购买任何道具”,这是符合破解目的的函数所在。
那么思路就是,当支付/购买失败时,都运行成功的逻辑——“payResultSuccess”函数。
1️⃣替换
替换支付结果。
支付结果一共有三种,取消(“;->payResultCancel”),失败(“;->payResultFalse”),成功(“;->payResultSuccess”):
将取消和失败都替换为成功。
操作
2️⃣修改跳转
java代码
if (!tanLibao())
{
payResultFalse();
}
else if (MessageUtil.getInstance().free.equals("1"))
{
payResultSuccess();
}
smali代码
invoke-virtual {p0}, Lcom/mydefinemmpay/tool/MymmPay;->tanLibao()Z
move-result v2
if-nez v2, :cond_3
.line 958
invoke-virtual {p0}, Lcom/mydefinemmpay/tool/MymmPay;->payResultFalse()V
goto :goto_0
.line 962
:cond_3
invoke-static {}, Lcom/mydefinemmpay/tool/MessageUtil;->getInstance()Lcom/mydefinemmpay/tool/MessageUtil;
move-result-object v2
iget-object v2, v2, Lcom/mydefinemmpay/tool/MessageUtil;->free:Ljava/lang/String;
const-string v3, "1"
invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_4
.line 963
invoke-virtual {p0}, Lcom/mydefinemmpay/tool/MymmPay;->payResultSuccess()V
不等于改为等于
#如果v2不等于0则跳转到:cond3
if-nez v2, :cond_3
#if-nez改为if-eqz
if-eqz v2, :cond_3
回编译
smali代码修改
为了让效果明显一点,在“doPaySuccess”函数内把字符串加了点信息: