【720】破解移动游戏【武林传】的代码分析
本帖最后由 737672679 于 2014-11-28 21:42 编辑我来了。就不会让论坛人少,我是720.新手报道。
此论坛一定要比吾爱破解论坛人气高。纪念游人客栈。
支持Dawn。
论坛是发帖的多,。才有人气的。
废话少说;帖子正题开始;
破解移动游戏之武林传代码分析。
移动游戏【武林传】
游戏不是垃圾不垃圾。而是说讲的是里面的验证系统。和修改方法。
通常直接搜;onbillingfinish即可。
那么我就搜订购。来查找。
如图。↓。
图2
图3
图4
从图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中。同样可以达到破解成功。
要注意路径问题。
到此。教程结束。
朋友们,看懂了吗?没看懂可以到这里提问,
看懂了,鬼哥的方法也简单,直接定义const/16 p1, 0x3e9 顶一个:) 楼主的讲解很精彩,期待楼主下次的破解教程:lol
页:
[1]