-
-
[原创]游戏协议大道-练气篇
-
2021-2-17 00:39
10202
-
"仙与魔,只在一念之间."
00.前言
最近玩一款修仙游戏,达到神力境界后提升需要周期太长。实在太闲了,就对该游戏协议进行分析。
01.抓包
该游戏提供了三个登录方式,本文使用账密登录。
![](upload/attach/202102/749276_ZXDQNBDQVF3ARRM.png)
祭出Fiddler抓取登录请求,经过多次测试,初步发现参数:key 随帐号以及密码变动。
![](upload/attach/202102/749276_882GDYN2QSX79NM.png)
02.分析
使用法宝JEB加载apk,定位key、userpwd值的生成.
通过搜索登录URL的字符串"sdkLogin",找到如下方法:
![](upload/attach/202102/749276_YADPD43EGWQ4A5Y.png)
2.1、userpwd的生成
通过该段代码并印证得知,密码的密文通过des加密,密钥为:leiting
1 2 3 4 5 6 7 8 9 10 11 12 | public void doSdkLogin(String arg3, String arg4) {
UserBean v0 = new UserBean();
v0.setUsername(arg3.trim());
String v3 = DesUtil.encrypt(arg4.trim(), "leiting" );
if (TextUtils.isEmpty(v3)) {
this.loginFailNotify(String.valueOf( - 3 ), ResUtil.getString(this.mActivity, "lt_encrypt_fail_msg" ), false);
return ;
}
v0.setUserpwd(v3);
this.doSdkLogin(v0, false);
}
|
![](upload/attach/202102/749276_2QCZM6CFFGTBW4T.png)
2.2、key的生成
静态分析发现,最终登录是调用handleLogin函数.
1 | this.handleLogin(this.setUserBean(arg3, arg4), arg4, 0 );
|
而参数的生成都在setUserBean函数,key也在其中.
![](upload/attach/202102/749276_QRX7MPPY8YRG9UY.png)
key的生成如下
1 2 3 4 5 6 7 8 9 | arg4.setKey(CookieUtil.encryptMsgMd5(arg4.getUsername() + "|" + arg4.getUserpwd() + "|" + arg4.getGame(), "leiting" ))
public static String encryptMsgMd5(String arg3, String arg4) {
try {
return MD5Util.getMd5( "(" + arg3 + "%" + arg4 + "%" + "20210216" + ")" );
}
catch(Exception unused_ex) {
return "";
}
}
|
通过代码并印证得知key为一个md5字符串,拼接的明文则如下:
(13888888888|83578346c5474f1a7aa78c83e43aa46a|xian%leiting%20210216)
![](upload/attach/202102/749276_CP985M3A2EH78MA.png)
最后正确帐号的请求如下:
![](upload/attach/202102/749276_J5HRWYX548CJ48M.png)
03.最后
通过后面的抓包发现,本篇所写的登录分析只是为了获取对应帐号绑定的的sid.
而sid才是游戏真正的帐号,且其通过另一套协议来实现游戏数据的交互等等.
后续分析请等待下一篇章的到来,谢谢观看.
End.
[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!