使用 MT管理器
显示加固状态为未加固 如遇到加固,可以使用使用 BlackDex
进行脱壳
https://github.com/CodingGay/BlackDex
支付逻辑
进入游戏,同时使用 MT管理器
的 activity
记录器查看当前 activate
当前是 StartActivity
点击记牌器,切换了 Activity
点击购买,跳转到阿里的支付 Activity
使用jadx查看具体源码
关键字搜索,先查一下有没有 "记牌器"
这个关键词,发现真有
搜索字符串,知道了 com.june.game.doudizhu.activities.b.a
方法会判断开通的是哪一个,就是开通几天的记牌器
然后查看什么调用了这个 a
方法。一共有 3个
调用,结合关键字 2
7
30
,应该就是开头 2天
,7天
,30天
对应的逻辑操作
查看其中一个方法,是对 Dialog
的 ClickListener
综上可以知道一定的支付逻辑,点击记牌器会出现 3
个 Dialog
,属于三种不同的记牌器,然后点击其中一个会调用 com.june.game.doudizhu.activities.b.a
方法,2
7
30
作为传参,然后 a
根据传参调用不同的支付
然后接着看 图4
中的 com.june.game.doudizhu.activities.b.a
方法,a方法
会根据上一步中我们选择的不同的 dialog
来进行不同的操作。最后会经过调用 com.june.game.a.a.a().a(this.e, str, str2, d + "", new w(this));
方法,参数是刚才的赋值
进入 com.june.game.a.a.a().a()
函数
java public void a(String str, String str2, String str3, String str4, c cVar) {
if (str3 == "") {
str3 = ".";
}
String a2 = a(str, str2, str3, str4);
String a3 = f.a(a2, "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAN565YmUT5fKPEho3DRpQFhmsRkZTAr+5mbsYgyya8hlOlte/U0/6iD/fzZqkdXUqg80zwUO5bw6iZj5zVb66iYScY6W6bMQkYkTOMSmsqVUkbdpaYojOkC4cBR87N/VGL8hTDWHlwoXCpMAEDIwV5Rmpj6AZNYGfE5ertMEAQJbAgMBAAECgYBOvLvjtwN8Ouyey82zFtTY9G8U7OkGszOjlWEWEUcoAvtmPvXykv4vc3z4Kzs1rDALdasWpTEVLrpn03CiqeaXraS++2+8utnFdA2jH+FQPGBPHu+uP5Ye5NeE2o3HD+0VFC9MBcZomPGA8tKT3b82FFnmtUhdw+UzhN5AUQkVAQJBAPtX6+Y6tQwPIsAw/8pHxKvZcMI+5E5X23I6BtzTc5YFGKxTRy5HRbhMQEeYuENhzXJPiCZs7EXjFCqPrm+KSpsCQQDimhTFI4txjX/6H6QKkiAETTgog+1AUVZt8OWJdz6TwOziGv1vpXqaiumTRq8C+owWDAWhbzFtCQUc/Wv6MMNBAkBKxhBXEPYVnVcgSDOA0TMQUQL7tswjBn4xkFPEVF/ZrLB3a9sMSIXUW1LwOd3vpeQB8uk1TUhJTlIMi2xAoKqrAkAvcEJY4xAWPaFFI8qby+uX+vJ+yN+qT1zgt0XWeXhIRmNREoVsEiCQqfQsOOf6n6kkFHA5U6XtRa4kW4l3Xy4BAkAzMB2x6cX18IIe3suZPZfTLLeiXXmMm+IiwlRExKKYevwZ3U5a+yK7+UEedwkCWf92HQW9e5xDSZEqeFzuUq7r");
try {
a3 = URLEncoder.encode(a3, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
new b(this, a2 + "&sign=\"" + a3 + "\"&sign_type=\"RSA\"", cVar);
}
调用 b(this, a2 + "&sign=\"" + a3 + "\"&sign_type=\"RSA\"", cVar)
函数,查看该函数,看到了 PayTask
,终于看到了支付关键字
使用 jadx
查找用例,可以发现该函数的调用用例
查看 com.june.game.doudizhu.activities.b.w.a
函数,发现这一段比较关键的代码,首先从一个函数中获取返回值 a2
,然后判断这个值是否等于 9000
,再进行下面的购买(关键词 pay
,具体逻辑先不看)操作
其中 PayTask
函数的返回值就是上面 a函数
的入参,然后将入参作为获取 String a2 = new com.june.game.a.e(str).a();
的入参,最后将 a2
与 9000
比较,由于这里是写死的 if-else
比较,我们可以先不考虑具体的调用阿里支付的逻辑,来看一下 9000
有没有特殊含义
使用 jadx
搜索关键词:9000
,找到 alipay
的库中的调用
进一步查看,可以得出 9000
是支付结果的 resultcode
,代表着成功,那就意味着可以直接修改 a2
或者 if
挑战条件就可以忽略支付真是的返回结果
修改支付逻辑
经过上面的分析可以直接用 MT
管理器 dex
编辑器直接定位到 com.june.game.doudizhu.activities.b.w
类
方法一:不管 a2
获取的什么支付结果,都重新赋值为 9000
方法二:将 if-eqz (if equal to zero)
改为 if-nez (if not equal to zero)
,改变跳转逻辑。为了方便将两个方法写在了一起,方便放一张图。
结果,选择购买跳转支付宝支付后返回就可以。购买成功,记牌器可以成功使用 (两种方法皆可以)
总结
找到最终要修改的部分的逻辑图
本文作者:1051733384208540
原文地址:https://xz.aliyun.com/t/12962
黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!
如侵权请私聊我们删文
END