傲世V雄哥720 发表于 2014-11-16 14:14

破解移动游戏【武林传】的代码分析

本帖最后由 傲世V雄哥720 于 2014-11-16 14:55 编辑

移动游戏【武林传】
游戏不是垃圾不垃圾。而是说讲的是里面的验证系统。和修改方法。

通常直接搜;onbillingfinish即可。
那么我就搜订购。来查找。如图。↓。

图1



图2



图3




图3



从图3中。可以看到。

判断结果返回是不是0x3e9.如果是,就跳到成功。
反之跳转到失败。

这种移动的游戏以前的模式是这种代码。

0x66
if-eqz v0 cond_22
0x68
if-eqz v0 cond_32
(if-eqz v0 cond_32跳转到失败)

现在的模式的代码概括是这种的;

0x3e9 (成功)
if-eqz v0 cond_22
成功的代码

cond_22
失败的代码


接着看成功和失败的2段代码;

成功代码:

    const/16 v0, 0x3e9

    if-ne p1, v0, :cond_0   

    const-string v0, "\u8ba2\u8d2d\u7ed3\u679c\uff1a\u8ba2\u8d2d\u6210\u529f\u3002"

    invoke-direct {p0}, Lorg/meteoroid/plugin/feature/MMIAPSMS;->jR()V

    :goto_0
    invoke-virtual {p0}, Lorg/meteoroid/plugin/feature/MMIAPSMS;->getName()Ljava/lang/String;

    move-result-object v1

    invoke-static {v1, v0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    return-void


失败的代码;

    :cond_0
    invoke-static {p1}, Lmm/sms/purchasesdk/SMSPurchase;->getReason(I)Ljava/lang/String;

    move-result-object v0

    iput-object v0, p0, Lorg/meteoroid/plugin/feature/MMIAPSMS;->asZ:Ljava/lang/String;

    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v1, "\u8ba2\u8d2d\u7ed3\u679c\uff1a"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    iget-object v1, p0, Lorg/meteoroid/plugin/feature/MMIAPSMS;->asZ:Ljava/lang/String;

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-direct {p0}, Lorg/meteoroid/plugin/feature/MMIAPSMS;->fail()V

    goto :goto_0


0x3e9是定义成功的。

if-ne p1, v0, :cond_0 属于判断。

既然知道了结果,那么修改的方法有几种。

第一种;
删掉; if-ne p1, v0, :cond_0 。因为代码变换了位置。
所以删掉该句跳转。就不会跳转到cond_0。直接运行成功的代码。


第二种;
看成功和失败代码中的2句;

成功中的;

    invoke-direct {p0}, Lorg/meteoroid/plugin/feature/MMIAPSMS;->jR()V

失败中的;

   invoke-direct {p0}, Lorg/meteoroid/plugin/feature/MMIAPSMS;->fail()V

也就是说成功会跳转到方法;
jR()V 方法中。实现成功

失败会跳转到;
fail()V方法中。实现失败。

所以把jR()V替换fail()V同样可以破解成功。



第三种;
jR()V方法中的代码替换到fail()V中。同样可以达到破解成功。
要注意路径问题。

到此。教程结束。





星空白菜 发表于 2015-2-2 22:33

这样看很直观,支持一下

dtao 发表于 2015-2-1 22:29

感谢分享~~~会看smali,但是java不会看{:1_907:}

圝◤初ф甡◥圝 发表于 2014-11-16 14:46

沙发!谢谢分享!

2217936322 发表于 2014-11-16 14:47

安卓的,没JAVA基础。

暖手季 发表于 2014-11-16 14:50


感谢分享

forrest888 发表于 2014-11-16 19:05

学习了感谢分享

huahua687 发表于 2014-11-21 10:45

支持支持一个

dgxtcsn 发表于 2014-11-22 13:28

支持一下,感谢

B6B6B6 发表于 2015-1-31 13:33

感谢分享!

上官原石cjy 发表于 2015-1-31 19:14

这个会了。。。。

失心c 发表于 2015-2-1 18:08

。。。。。。
页: [1] 2
查看完整版本: 破解移动游戏【武林传】的代码分析