Android游戏破解练习-大圣降魔录
Android游戏破解练习-大圣降魔录
因为发现跟捕鱼的那个是同个公司,所以可以先直接用AndroidSkiller搜PaySuccesss
发现了两个
一个是接口
一个是匿名类
看到匿名类肯定想到,是调用了新接口 new 了一个,加下来要搜索它。
但是在Java Decompiler里面不太好搜索。
所以我们用jadx-gui打开apk搜索EgamePayListener
点击进去后。发现了取消支付,支付失败,支付成功的关键字。同时发现了他们调用了同一个函数。并且参数都是两个,猜测可以把这个函数拿到外面来。
用Monitor监视
先设置一下过滤器。过滤下信息,不然信息很多。
发现关键字
用jadx搜一下
发现请求支付所在的函数,有PayCancel,PaySuccess等这些关键字。而这些关键字调用来自 new了一个EgamePayListener,
回到Android Skiller
应该是在AppActivity.smali里面的order_internal函数里面创建了匿名类
往下看有创建了一个匿名类 Activity3.里面调用了onResult函数,把onResult函数想办法从内部函数弄到外面直接调用
程序原本的操作是:
1.通过new-instance指令去创建一个匿名类。然后放到v0
2.然后v0再去调用invoke-direct这个指令,最终调用的是Activity¥3里面的 init方法
(也就是说调用了构造方法)
3.然后v0再继续调用invoke-static这个指令,调用EgamePay方法。
所以这里创建了匿名类Activity3.
所以我们要去这个匿名类看一下
匿名类里面的可以看到成功的关键字等
但是因为是匿名类,
1.所以它要先调用外部类的指针。所以这里。iget-object就是获取p0指针,然后放到v0里面
2.v0再通过iget这个方法去获取外部类的mOrgID字段
3.获取到数值就调用onResult这个方法
所以,我们可以从内部类把代码弄到外部,然后把外部调用内部的代码注释掉。
v0要改成p0.因为我们已经从内部到了外部了。指针要对应上。
重新编译。破解成功