Android游戏破解练习-大圣降魔录

Android游戏破解练习-大圣降魔录

1569399317842

因为发现跟捕鱼的那个是同个公司,所以可以先直接用AndroidSkiller搜PaySuccesss

1569396373802

发现了两个

一个是接口

1569396350866

一个是匿名类

1569396432275

看到匿名类肯定想到,是调用了新接口 new 了一个,加下来要搜索它。

但是在Java Decompiler里面不太好搜索。

所以我们用jadx-gui打开apk搜索EgamePayListener

1569397039178

点击进去后。发现了取消支付,支付失败,支付成功的关键字。同时发现了他们调用了同一个函数。并且参数都是两个,猜测可以把这个函数拿到外面来。

1569397157823

用Monitor监视

先设置一下过滤器。过滤下信息,不然信息很多。

1569397758219

发现关键字

1569397849955

用jadx搜一下

发现请求支付所在的函数,有PayCancel,PaySuccess等这些关键字。而这些关键字调用来自 new了一个EgamePayListener,

1569398404660

回到Android Skiller

1569398454140

应该是在AppActivity.smali里面的order_internal函数里面创建了匿名类

1569398758738

往下看有创建了一个匿名类 Activity3.里面调用了onResult函数,把onResult函数想办法从内部函数弄到外面直接调用

程序原本的操作是:

1.通过new-instance指令去创建一个匿名类。然后放到v0

2.然后v0再去调用invoke-direct这个指令,最终调用的是Activity¥3里面的 init方法

(也就是说调用了构造方法)

3.然后v0再继续调用invoke-static这个指令,调用EgamePay方法。

所以这里创建了匿名类Activity3.

所以我们要去这个匿名类看一下

1569398694997

匿名类里面的可以看到成功的关键字等

1569399042949

但是因为是匿名类,

1.所以它要先调用外部类的指针。所以这里。iget-object就是获取p0指针,然后放到v0里面

2.v0再通过iget这个方法去获取外部类的mOrgID字段

1569399130698

3.获取到数值就调用onResult这个方法

1569399177496

所以,我们可以从内部类把代码弄到外部,然后把外部调用内部的代码注释掉。

1569399230418

v0要改成p0.因为我们已经从内部到了外部了。指针要对应上。

重新编译。破解成功

posted @ 2019-09-25 16:36  ltyandy  阅读(277)  评论(0编辑  收藏  举报