本帖最后由 非己非人 于 2017-9-7 23:05 编辑
新人第一次,感谢大神们提供的教程。
参考帖:破解参考:https://www.52pojie.cn/thread-632178-1-2.html ,去除可能会产生费用的危险权限: https://www.52pojie.cn/thread-620244-1-1.html
工具:Android Killer 、夜神模拟器
原版游戏下载地址:http://appstore.huawei.com/app/C10875454
破解后下载地址:https://pan.baidu.com/s/1gfCJoER 密码:egen 破解版本仅供学习,还请支持正版,谢谢。
1、首先还是先打开游戏,然后点击左上角的礼包,然后就出下面的这个东西,很明显,还是常用套路,搜索支付失败
2、使用Android Killer v1.3.1进行反编译,输入失败,然后在左下角的Aa选择文本转Unicode,发现MymmPay这个,感觉应该就是支付的那个文件了。
3、打开这个MymmPay.smali,使用Android Killer v1.3.1中的JAVA图标查看源码。可以找到下面这几个代码,说明我们找对了,确实是这个,那么接下来怎么修改呢?
4、修改取消购买和购买失败的代码,我们再回到Android Killer v1.3.1中,查看代码
.method public payResultCancel()V
.locals 2
.prologue
.line 1407
iget-object v0, p0, Lcom/mydefinemmpay/tool/MymmPay;->psif:Lcom/mydefinemmpay/mypay/PaySuccessInterface;
sget v1, Lcom/mydefinemmpay/tool/MymmPay;->payId:I
invoke-interface {v0, v1}, Lcom/mydefinemmpay/mypay/PaySuccessInterface;->doPayCancel(I)V
.line 1408
const-string v0, "\u8d2d\u4e70\u53d6\u6d88"
invoke-virtual {p0, v0}, Lcom/mydefinemmpay/tool/MymmPay;->showDebug(Ljava/lang/String;)V
.line 1411
return-void
.end method ####上面为取消购买的代码内容
.method public payResultFalse()V
.locals 3
.prologue
const/4 v2, 0x2
.line 1378
iget-object v0, p0, Lcom/mydefinemmpay/tool/MymmPay;->psif:Lcom/mydefinemmpay/mypay/PaySuccessInterface;
sget v1, Lcom/mydefinemmpay/tool/MymmPay;->payId:I
invoke-interface {v0, v1}, Lcom/mydefinemmpay/mypay/PaySuccessInterface;->doPayFalse(I)V
.line 1379
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/mydefinemmpay/tool/MymmPay;->paysuss:Z
.line 1380
const-string v0, "zhifu false"
invoke-virtual {p0, v0}, Lcom/mydefinemmpay/tool/MymmPay;->Printlog(Ljava/lang/String;)V
.line 1381
iget v0, p0, Lcom/mydefinemmpay/tool/MymmPay;->falseTime:I
add-int/lit8 v0, v0, 0x1
iput v0, p0, Lcom/mydefinemmpay/tool/MymmPay;->falseTime:I
.line 1384
const-string v0, "\u8d2d\u4e70\u5931\u8d25"
invoke-virtual {p0, v0}, Lcom/mydefinemmpay/tool/MymmPay;->showDebug(Ljava/lang/String;)V
.line 1385
iget v0, p0, Lcom/mydefinemmpay/tool/MymmPay;->falseTime:I
if-ne v0, v2, :cond_0
.line 1386
invoke-static {}, Lcom/mydefinemmpay/tool/MessageUtil;->getInstance()Lcom/mydefinemmpay/tool/MessageUtil;
move-result-object v0
iget v0, v0, Lcom/mydefinemmpay/tool/MessageUtil;->ADOpen:I
if-ne v0, v2, :cond_0
.line 1387
sget-object v0, Lcom/mydefinemmpay/tool/MymmPay;->adf:Lcom/mydefinemmpay/mypay/UUADSDKPayInterface;
if-eqz v0, :cond_0
.line 1388
sget-object v0, Lcom/mydefinemmpay/tool/MymmPay;->adf:Lcom/mydefinemmpay/mypay/UUADSDKPayInterface;
iget-object v1, p0, Lcom/mydefinemmpay/tool/MymmPay;->context:Landroid/content/Context;
invoke-interface {v0, v1, p0}, Lcom/mydefinemmpay/mypay/UUADSDKPayInterface;->init(Landroid/content/Context;Lcom/mydefinemmpay/mypay/MymmPayInterFace;)V
.line 1389
const-string v0, "\u8d2d\u4e70\u5931\u8d25\u4e24\u6b21\u5f00\u542f\u5e7f\u544a"
invoke-virtual {p0, v0}, Lcom/mydefinemmpay/tool/MymmPay;->showDebug(Ljava/lang/String;)V
.line 1396
:cond_0
invoke-virtual {p0}, Lcom/mydefinemmpay/tool/MymmPay;->getLibKind()I
move-result v0
const/4 v1, 0x1
if-ne v0, v1, :cond_1
.line 1397
invoke-static {}, Lcom/mydefinemmpay/tool/MessageUtil;->getInstance()Lcom/mydefinemmpay/tool/MessageUtil;
move-result-object v0
iget-object v0, v0, Lcom/mydefinemmpay/tool/MessageUtil;->sdkKind:Ljava/lang/String;
const-string v1, "0"
invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1
.line 1398
invoke-virtual {p0}, Lcom/mydefinemmpay/tool/MymmPay;->getPayT()I
move-result v0
if-nez v0, :cond_1
.line 1399
sget-object v0, Lcom/mydefinemmpay/tool/MymmPay;->osif:Lcom/mydefinemmpay/mypay/OtherSDKPayInterface;
invoke-interface {v0}, Lcom/mydefinemmpay/mypay/OtherSDKPayInterface;->pay()V
.line 1404
:cond_1
return-void
.end method ####一直到这,都是购买失败的代码
下面的是购买成功的代码:
.method public payResultSuccess()V
.locals 8
.prologue
const/4 v7, 0x1
const/4 v6, 0x0
.line 1344
invoke-static {}, Lcom/mydefinemmpay/tool/RecordOpreate;->getInstance()Lcom/mydefinemmpay/tool/RecordOpreate;
move-result-object v3
.line 1345
sget-object v4, Lcom/mydefinemmpay/tool/RecordOpreate;->totalMoey:Ljava/lang/String;
中间太多了我就删了点。。。
.line 1360
iget-object v3, p0, Lcom/mydefinemmpay/tool/MymmPay;->dpv:Ljava/util/Vector;
invoke-virtual {v3, v0}, Ljava/util/Vector;->remove(Ljava/lang/Object;)Z
.line 1357
add-int/lit8 v1, v1, 0x1
goto :goto_0
.end method
由于我是新手,跳转什么有点搞不太懂,我就直接把购买成功的代码复制替换掉失败的代码。就是将.method public payResultSuccess()V后面一直到.end method的所有代码复制替换掉.method public payResultFalse()V、.method public payResultCancel()V后面的代码。注:基本上和我上面说的参考贴是一样的做法,乱的话,可以直接看上面的参考贴。
5、最后删除可能会产生费用的危险权限:
在AndroidManifest.xml里搜索(或者可以直接搜索下面的这个)
android.permission.SEND_SMS
删掉
<uses-permission android:name="android.permission.SEND_SMS"/>
其实上面的参考贴里有两个,但是我只搜索到一个,所以我就删了一个,另外一个是什么表示完全不知道
6、最后打包编译,就可以快乐的玩耍了。支付的窗口如何跳过我还不知道,求大神讲解。最后取消购买,会显示支付失败,窗口关闭后会显示成功。强烈建议在飞行模式下打开,因为新手,不确定是否存在扣费的。
好了,第一次尝试破解游戏就这个样子了,破解没花多长时间,写个帖子,还真累。。。。
|