zoukankan      html  css  js  c++  java
  • Android破解学习之路(五)——Android游戏 割绳子:魔法 + 在游戏加入Toast弹窗提示

    前言:这一期的破解教程,有新的知识内容出现啦!

    这一期破解的游戏是找不到之前的关键字,怎么破解呢?

    破解成功之后,添加一个Toast弹窗提示由XX破解,这操作该如何实现呢?请往下看~

    链接: https://pan.baidu.com/s/1dF8jKdF 密码: 6666

    破解步骤:

    1.试玩,找不到关键字

    由图片可以看出,这是中国移动的咪咕游戏,这款游戏是接入了咪咕游戏基地的sdk,如果你不懂sdk,那么我也不会解释,百度是你的好老师!

    游戏使用了咪咕游戏基地的sdk,其中的smail文件一般都有Billing这个关键字,那么我们试着搜索看看

    2.查找Paycallback关键字

     可以看到,我们经过文件类型筛选之后,还是有许多的结果,这时我们可以再原来的关键字上再加上个pay进行搜索

    嗯,这下子结果就是少了很多了,咪咕游戏这类sdk,关于支付的类名一般都是含有callback,所以我们可以定位到图中的三个含有callback的文件,第一个我就不圈出来了

     我们一个个使用工具去查看其的java伪代码,则可以再次精确定位到ChinaBillingPayCallBack$1这一个文件

    3.理解支付逻辑

    我们查看ChinaBillingPayCallBack$1这个smail文件的伪代码

     

    可以看到,是if与else if的嵌套的分支语句,每个判断都是给i赋值,估计大家看得不太懂,说实话,其实我也不太懂,那个for循环里面有个setResultCode,其中的参数为i,个人觉得这个应该是支付成功的关键代码,问题就来了,我们不知道i等于几时,这个setResultCode才是支付成功,这个时候,我们有什么办法吗?答案很简单,一个个地试,我们将i的值改变,测试APP,就是可以知道i为1的时候,就是会进入支付成功的方法

    回到smail文件中,与之前的java伪代码对比,可以发现v1就是那个i值,之后,就好办了,我们跳过所有的判断语句,修改v1的最后的值进行测试

    PS:const/4 v1,0x1 这个的意思为给v1赋值为1,如果是const/4 v1,0x2,就是给v1赋值为2,我这里只是简单的说明,想要深入的可以百度搜索一下smail中const指令

    我们测试到1,就会发现支付已经成功了,这也算是成功破解了,不过,我觉得还是得再分析分析这smail文件

    4.破解思路

     我们分析一下上述的smail文件,首先,v1接收参数p1的值,之后,判断参数p1与v2的值,相等的话也就是v1为1,之后向下执行,从前面我们知道,v1为1的时候,就是支付成功的代码,我们可以删除掉这一行的判断从而实现破解的功能,不相等的话就是跳转到cond_1,记住末尾的cond_0和goto_0这两个,之后会提到

     我们从上面跳转到了cond_1这里,v2就是被赋值为3了,之后,参数p1又是接着与v2比较,相等则是往下执行,也就是给v1赋值为3,跳转到goto_0,也就是之前上面说的地方,不相等就是跳转到cond_2,以此类推,大家应该能理清楚大概逻辑了吧

    PS:大家可能不知道if-ne这个语句的作用,可以直接使用鼠标放在上面,之后就会浮出提示

     

    两种方法破解:

    上面都有提及到了,这里写个总结

    1.删除第一个判断语句,不跳转到之后去判断,,v1就是为1

    2.在所有判断结束之后,给v1赋值为1

    5.增加Toast提示

    接下来就是新学的内容了,重点来了!!

    首先,先确定开始的界面是哪一个activity,我使用了当前activity 这款APP,之后运行游戏,左上角就是会有提示,我们可以知道CTRMActivity这个

    第二步,我们需要找到这个activity对应的smail文件,直接搜索(如果你不嫌麻烦的话,可以找包名,依次地寻找)

    我们在a文件夹那里,右击,之后选择打开方式->打开文件路径

    第四步,新建一个txt格式文件,修改文件名为craker,之后把扩展名改为smali(呃,好像发现我之前都是写成了smail,大家注意下啊,我就不修改了

    返回到Androidkiller中,点击右边的刷新按钮

    之后,你就发现有craker这个smali文件了,打开它,写上下列代码,可以看到,有个toast的字符串,我们只需要将这里修改成我们想要Toast提示的信息,如果是中文的话,需要转换成Unicode,直接使用Androidkiller自带的工具转换吧,前面几篇也是有说过,我就不多说了

    .class public Lcrack;
    .super Ljava/lang/Object;
    .source "craker.java"
     
    .method public static toast(Landroid/content/Context;)V
        .locals 2
        .prologue
     
            const-string v0, "by stars-one"
     
            const/4 v1, 0x1
     
            invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
     
            move-result-object v0
     
            invoke-virtual {v0}, Landroid/widget/Toast;->show()V
     
            return-void
    .end method

     最后,我们在CTRMactivity中的onCreate方法里写上调用的代码,就大功告成了

    invoke-static {p0}, Lcrack;->toast(Landroid/content/Context;)V 

    诶,等等,onCreate方法呢?没有??擦嘞,不可能。。好吧,我们找错了,我们再运行一遍游戏,我看到了一个ChannelSplash,就决定是它了,去Androidkiller找找看(下面的图片是我已经修改成功了的图片,请忽略弹出的Toast

     这次找对了,这里有onCreate方法,之后的步骤与上面的一样,这里我就不多说了,注意一下最后调用代码添加的位置,还有记得删除掉之前在CTRMactivity中添加的代码

    成功了,不过想到了activity的模式,好像onstart方法也是可以用,刚才的那个CTRMactivity就是有一个onstart方法,我把前面的删除,之后按照之前的步骤,尝试在CTRMactivity中里面写上了调用的那一段代码

    之后,测试的时候,发现成功显示

     

     6.删除权限,测试

    我们可以把这个APP的名字更改了,这样显得比较高端哈!

    直接搜索割绳子就行了,之后进入到string文件,修改app_name

    这里不得吐槽一下,这个游戏好像删除发送短信会出错,进入游戏的时候提示应用已停止,暂时还不知道解决,有哪位大神看到这里能知道如何解决这个问题,希望能够告知~~感激不尽!!

    还有,悬浮窗广告还不知道怎么破解,有大神能教教我吗~~

  • 相关阅读:
    973. K Closest Points to Origin
    919. Complete Binary Tree Inserter
    993. Cousins in Binary Tree
    20. Valid Parentheses
    141. Linked List Cycle
    912. Sort an Array
    各种排序方法总结
    509. Fibonacci Number
    374. Guess Number Higher or Lower
    238. Product of Array Except Self java solutions
  • 原文地址:https://www.cnblogs.com/stars-one/p/8151182.html
Copyright © 2011-2022 走看看