"仙与魔,只在一念之间."
最近玩一款修仙游戏,达到神力境界后提升需要周期太长。实在太闲了,就对该游戏协议进行分析。
该游戏提供了三个登录方式,本文使用账密登录。
祭出Fiddler抓取登录请求,经过多次测试,初步发现参数:key 随帐号以及密码变动。
使用法宝JEB加载apk,定位key、userpwd值的生成.
通过搜索登录URL的字符串"sdkLogin",找到如下方法:
通过该段代码并印证得知,密码的密文通过des加密,密钥为:leiting
静态分析发现,最终登录是调用handleLogin函数.
而参数的生成都在setUserBean函数,key也在其中.
key的生成如下
通过代码并印证得知key为一个md5字符串,拼接的明文则如下:
(13888888888|83578346c5474f1a7aa78c83e43aa46a|xian%leiting%20210216)
最后正确帐号的请求如下:
通过后面的抓包发现,本篇所写的登录分析只是为了获取对应帐号绑定的的sid.
而sid才是游戏真正的帐号,且其通过另一套协议来实现游戏数据的交互等等.
后续分析请等待下一篇章的到来,谢谢观看.
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);
}
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
;
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)