返回列表 发新帖

【转载】某气骑士 android 安全技术分析

[复制链接]

58

主题

673

帖子

2348

积分

大学生

Rank: 5Rank: 5

金币
646
好评
14
贡献
0

MT论坛新人考神

发表于 2021-9-3 12:52:23 | 显示全部楼层 | 阅读模式
7月注册论坛后,第一次发帖。 费时间4天。完成对元气骑士的安全分析

如图:购买付费角色,取消支付后 的界面

工具篇
        Fiddler(网络调试器) :所有的apk网络请求都会经过fiddler ,从中我们可以看到请求方式 get 或者post。请求参数和返回结果, 这个对于我们分析很有帮助。
        电脑上用的AndroidKiller 和 手机端NP管理器。功能很强大,包括但不限于注入日志信息(可以调试程序),apk签名,apk二次打包等功能。本案例中 主要用到也就是这个几个功能。
        android studio logcat 查看日志信息。 这里为了方便直接用android 开发工具。 本案例中,就是程序输出参数信息,打印到控制台,帮助分析程序流转过程。
分析过程:
首先既然是支付肯定是联网的,顺其自然就想到使用Filddler 查看调用的网络情况。配置一番后,连接手机,打开游戏,点击购买按钮后,fillder如下下界面:



大家请看里面有两个请求
第一个请求 结果 返回的是   orderId=20210902xx2605319330xx。返回的是订单id。
第二个请求的参数中包含了 orderId。 结果 返回的是  {"code":0,"msg":"wait for payment","data":[],"sign":"S3b\/gv3wD5NItvUjbNx+Utvve1UmWIF+666+\/AdxcVmI5blKtE4W01hAo8B3qMLw4UnJkgVD0LumtUYHrcySRLaw0yilMIk="} 貌似返回的是支付结果。这里不着急,慢慢往下看。
既然是请求,我用android kill 全局搜索 fnsdk.4399sy.com 结果如下。

我在思考,这个东西不会就这么简单的给你,一般都采用了加密方式来使用的。 经过很久的折腾以后,我终于发现了一个类 com.ssjj.fnsdk.lang.SsjjFNLang


由此得出 所有的url请求都在这里。
由于本人的是小米手机,里面集成自动登录和支付功能。我在想要不要去小米游戏服务中心去找一找线索,查找了小米提供的游戏支付sdk的文档里面的一句话, 让我找到了方向。

“网游创建充值订单时,先要在游戏服务器端生成一个cpOrderId,然后再由客户端发起充值,
因充值流程可能会耗时数分钟,所以当用户充值返回后一定要利用此cpOrderId到CP服务器上进行查询以便确保是否充值成功;
此外,如果服务器端收到小米游戏服务器的充值回调,也要通知给客户端,以便客户端及时将虚拟物品给用户“

通过整理得出支付流程(网络请求):
第一步 这个是向服务器提支付请求,服务器会返回一个 orderid
第二步 把第一步返回结果orderid作为参数,向服务器发出支付情况确认,返回的是 {"code":0,"msg":"wait for payment","data":[],"sign":"S3b\/gv3wD5NItvUjbNx+Utvve1UmWIF+666+\/AdxcVmI5blKtE4W01hAo8B3qMLw4UnJkgVD0LumtUYHrcySRLaw0yilMIk="}
第三步  对订单进行一个确认

整理思路后,开始研究代码。


登出以下支付过程:
ActivityWrapper4399.pay -> SsjjFNDjPayManager.djpay-> 执行网络url (第一步的orderid申请)->
ActivityWrapper4399.checkOrderLoop->SsjjFNDjPayManager.djCheckOrderLoop->执行网络url(第二步的支付情况查询)->
通过com.ssjj.fnsdk.core.cz.e 处理回调函数-> ActivityWrapper4399$18$1 回到总的回调处理后-->ActivityWrapper4399.confirmOrder 确认订单 ->
SsjjFNDjPayManager.djconfirmOrder ->执行网络请求(第三步的订单确认)->通过com.ssjj.fnsdk.core.cz.f 处理回调函数
->ActivityWrapper4399$19$1 中对 orderID 和productid 进行判断传值后,获取游戏道具成功
修改方法:
.class Lcom/ssjj/fnsdk/core/cz/e;在第二步访问服务器接口回调以后,改变条件分支判断,进入正常支付成功流程。触发第三步 订单确认阶段

.class public Lcom/chillyroom/plugin/wrapper4399/ActivityWrapper4399; 这里面confirmOrder 方法回调中。发现

只有orderId 而没有productId是无法成功获取道具的。 现在你成功就差一步。该怎么办呢?经过一个上午的思考,发现ActivityWrapper4399这个类pay()方法里面有productId输出。于是
我将pay方法里面的 productId 作为结果赋值给 ActivityWrapper4399这个类的静态变量(自己编写的)。截图如下:



最终实现了元气骑士的安全分析。大家有什么可以一起交流。



原作者:zwx117105


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
精通C、C++、Java、C#、VB、HTML、Delphi、JavaScript、PHP等语言的拼写
回复

使用道具 举报

0

主题

1721

帖子

6657

积分

硕士生

Rank: 6Rank: 6

金币
3810
好评
0
贡献
0
发表于 2021-9-3 12:58:37 来自手机  | 显示全部楼层
这图片模糊。。
回复

使用道具 举报

38

主题

1157

帖子

3294

积分

大学生

Rank: 5Rank: 5

金币
818
好评
7
贡献
0

考神MT论坛帅哥MT论坛活跃会员MT论坛最佳新人MT论坛新人

QQ
发表于 2021-9-3 12:59:25 来自手机  | 显示全部楼层
回复

使用道具 举报

21

主题

1708

帖子

4821

积分

大学生

Rank: 5Rank: 5

金币
609
好评
16
贡献
0

考神

发表于 2021-9-3 13:15:59 来自手机  | 显示全部楼层
大佬哇,看不懂
回复

使用道具 举报

18

主题

789

帖子

2686

积分

大学生

Rank: 5Rank: 5

金币
848
好评
16
贡献
0

MT论坛最佳新人

发表于 2021-9-3 13:22:54 来自手机  | 显示全部楼层
谢谢分享
回复

使用道具 举报

10

主题

380

帖子

892

积分

高中生

Rank: 4

金币
78
好评
0
贡献
0

考神MT论坛新人MT论坛帅哥

发表于 2021-9-3 14:03:51 来自手机  | 显示全部楼层
回复

使用道具 举报

2

主题

1892

帖子

6060

积分

硕士生

Rank: 6Rank: 6

金币
849
好评
1
贡献
0
发表于 2021-9-3 18:27:32 | 显示全部楼层
也就只能看看了
回复

使用道具 举报

92

主题

6857

帖子

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4556
好评
37
贡献
0

MT论坛活跃会员

发表于 2021-9-3 20:51:45 来自手机  | 显示全部楼层
路过支持一波
回复

使用道具 举报

0

主题

3194

帖子

6496

积分

硕士生

Rank: 6Rank: 6

金币
2432
好评
0
贡献
0
发表于 2021-9-4 01:34:01 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表