yutao531315 发表于 2020-3-26 03:03

分享一个游戏盒子,登录协议分析!

大家也多多送点免费热心哈,我也有动力继续更新{:301_994:}
本人技术水平有限,因为我在分析的时候是通过word 文档写出来的,分析流程是在word文档里面完成的。这里图片没有,我文字流程上传到附件里面的,

此文仅限学习交流,因为分析得比较仓促,word文档只是我在边分析,边写出来的,里面全部都是个人想法


POST https://mapi.4399api.net/user/box/android/v1.0/log-in.html HTTP/1.1Content-Length: 173Content-Type: application/x-www-form-urlencodedHost: mapi.4399api.netConnection: Keep-AliveUser-Agent: 4399GameCenter/4.7.0.26(android;xiaomi 8;5.1.1;540x960;WIFI;1322.352;a4399)Accept-Encoding: gzipmauth: mareacode: 422800mauthcode: SM-DEVICEID: 20200326001043964fd95e7eddf8c9488cb8764cd01bc80181881b00f7a24em-id: 00%3A81%3Aa7%3A06%3Ac1%3A43a-id: cf291fb402b63fece-id: 865166028184599mdeviceId: 865166028184599pauth: s-id: 460005523373818mudid: 1094gpgEdBptNoZEa0tMUf606
dateline=1585152691&deviceIdentifier=865166028184599&info=1&model=xiaomi+8&password=lKbiScPzO7%2BARbqYcynHTQ%3D%3D&sign=0809033c79e0897036c8abef08b67371&username=yutao531315
第一步,进行抓包操作。看到关键字段,password字段,密码字段,采用加密算法是贝斯64算法
sign name 未加密定位按钮事件方法方法1通过搜索网址信息v1.0/log-in.html在类中位置是Lcom/m4399/gamecenter/plugin/main/controllers/user/LoginFragment; ,定位到 onClick(Landroid/view/View;)V 关键 方法
这里我们就找到突破口了,这是我们还通过另外一种方式来定位关键点,主要是用于灵活定位关键点,采取多种方法方法2 通过ui分析工具,抓取到按钮id名称,通过搜索名称,索引到按钮id ,接着搜索按钮id 0x7f3b0729   同样可以定位到关键点,
关键点,onclick 按钮事件定位到了以后,接着就要查看java代码。找到相对应的类Lcom/m4399/gamecenter/plugin/main/controllers/user/LoginFragment;
分析java 逻辑。OnFocusChangeListener 成功进入到 java层逻辑 代码,LoginFragment 是继承自a方法,接口 按钮监听事件,以及OnFocusChangeListener 处理控件焦点改变的事件

通过onclick 事件里面的 login_button按钮,定位到此处是我们点击登录按钮调用的逻辑
通过索引,定位到此处是设置 ,Password以及name 的值。 继续跟踪。进入loadData 类
看到 super 关键字,调用loadData 方法继续进入
看到通过层层定位,找到了一个抽象方法
   public abstract void buildRequestParams(String str, ArrayMap arrayMap);
这个因为是 这里是实现的抽象方法 ,这个类也是抽象类buildRequestParams
抽象方法表示的是 ,定义却未实现的类,
同时抽象方法所在的类,也要用abstrac 进行修饰,说明是抽象类,
抽象类是不能直接进行调用的,需要子类继承自抽象类,而抽象类方法的实现,在子类实现
成功找到抽象方法定义位置,调用了buildRequestParams
   成功定位到sig字段位置
调用了buildSignValue 方法

而继续通过,AppNativeHelper字段调用getServerApi
public static final native String getServerApi(String str);看到了一个native 修饰的方法,说明sig 字段是在so层实现的。到这里,我们就已经把sig 字段来源定位出来了。 通过java代码分析,得出程序是调用 libm4399.so   getServerApi(String str);传入的参数是一个str 字符串 而str 字符串集,是通过这个算法得出的,具体查看传入的字符串是什么值,可以通过hook    public String buildSignValue(String str) {      return AppNativeHelper.getServerApi(str);} 这个方法打印参数信息,hook代码这里就不写了,比较长当然也可以通过动态调试small 代码查看。


!分析到这里以后,此协议关键字段,sig的来源,就已经理清楚了,下面还有一个pasword字段。其实通过之前的分析,我们已经看到了,password 的字段的来源,但是我们本着寻根问底的原则,一定还是要跟着程序的执行流程,寻找突破点。
通过跟踪,发现还是调用了一个抽象方法。 找到其实现的位置。

Passward 字段这时候也就出来了,很明显看得出来是 通过dexcbc算法来实现


Native 修饰的关键词,都是通过so 来实现的
到这里4399 java层逻辑就分析完了。























POSThttps://mapi.4399api.net/user/box/android/v1.0/log-in.html HTTP/1.1Content-Length: 173Content-Type:application/x-www-form-urlencodedHost: mapi.4399api.netConnection: Keep-AliveUser-Agent:4399GameCenter/4.7.0.26(android;xiaomi 8;5.1.1;540x960;WIFI;1322.352;a4399)Accept-Encoding: gzipmauth: mareacode: 422800mauthcode: SM-DEVICEID:20200326001043964fd95e7eddf8c9488cb8764cd01bc80181881b00f7a24em-id: 00%3A81%3Aa7%3A06%3Ac1%3A43a-id: cf291fb402b63fece-id: 865166028184599mdeviceId: 865166028184599pauth: s-id: 460005523373818mudid: 1094gpgEdBptNoZEa0tMUf606 dateline=1585152691&deviceIdentifier=865166028184599&info=1&model=xiaomi+8&password=lKbiScPzO7%2BARbqYcynHTQ%3D%3D&sign=0809033c79e0897036c8abef08b67371&username=yutao531315 第一步,进行抓包操作。看到关键字段,password 字段,密码字段,采用加密算法是贝斯64算法 sign name 未加密定位按钮事件方法方法1通过搜索网址信息v1.0/log-in.html在类中位置是 Lcom/m4399/gamecenter/plugin/main/controllers/user/LoginFragment; ,定位到 onClick(Landroid/view/View;)V 关键方法 这里我们就找到突破口了,这是我们还通过另外一种方式来定位关键点,主要是用于灵活定位关键点,采取多种方法方法2 通过ui分析工具,抓取到按钮id名称,通过搜索名称,索引到按钮id ,接着搜索按钮id 0x7f3b0729   同样可以定位到关键点,
关键点,onclick 按钮事件定位到了以后,接着就要查看java代码。找到相对应的类
Lcom/m4399/gamecenter/plugin/main/controllers/user/LoginFragment;
分析java 逻辑。OnFocusChangeListenerfile:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg

Native 修饰的关键词,都是通过so 来实现的

到这里4399 java层逻辑就分析完了。


哦 对了,这里应该搞个总结,
总的来说,我们是分析了,password 字段,跟sig字段的来源,password是通过加载libm4399.so调用里面的
desCbcEncrypt(String str);这个方法来得到加密密码



sig 字段是getServerApi(str);字段获取,都是在so层实现的。


要是大家觉得还行,评分超过50 + ,我会在下面的时间在把so层动态调试,给走一遍。!希望能给予大家一些帮助, 谢谢大家啦{:301_997:}

















你与明日 发表于 2020-3-26 03:33

这排版,H大看到要打人

yutao531315 发表于 2020-3-26 08:58

各位 都说排版没弄好,因为 我是大半夜 写出来的,不想 重新写一遍,协议分析,我上传附件了,里面,都是排版好的 ,

zkt190 发表于 2020-3-26 03:37

排版太乱了 只好回复下致谢

xytwlh 发表于 2020-3-26 06:10

看的云里雾里

q10123 发表于 2020-3-26 06:46

没看懂。。

hyoulin68 发表于 2020-3-26 07:04

这排版。。。。。。。。。

sharokku4869 发表于 2020-3-26 07:25

感谢大佬分享教程,小弟不明觉厉

pale123 发表于 2020-3-26 08:03

虽然不懂,但也要回复一下子

q6378561 发表于 2020-3-26 08:13

你排版不重新弄一下的话,+5都不会有

Tewq9855 发表于 2020-3-26 08:15

这是啥
页: [1] 2 3 4 5 6
查看完整版本: 分享一个游戏盒子,登录协议分析!