前言
此逆向学习仅提供思路和部分接口,本文章仅用于学习,如果觉得不妥可联系我进行删除。
接口
获取验证码
加密参数:sign,phoneNo
固定参数:version,versioncode,clienttype.....等
sign的加密方式:
采用md5加密,条件是设备信息加时间戳的方式。
// 生成Sign
func generateRandomStringSign(timestamp int64, device string) string {
// 将时间戳转换为字符串
currentTimeStr := strconv.FormatInt(timestamp, 10)
// 拼接设备信息和时间戳
var5 := strings.Builder{}
var5.WriteString(device)
var5.WriteString(currentTimeStr)
// 计算 MD5 哈希值
hash := md5.Sum([]byte(var5.String()))
var7 := fmt.Sprintf("%x", hash)
ret
phoneNo的加密方式:
这个有难度,但不多。
最开始是被绕进去了,逆向分析了半小时就解决这个接口了。
phoneNo的加密方式则是通过base64编码的公钥进行加密,方式是RSA加密。
不公开,此加密方式繁琐也证明了游戏官方的态度。
提供一下反编译的Java代码:
private final void addCommonParams(Request.Builder var1) {
String var4 = String.valueOf(System.currentTimeMillis());
StringBuilder var5 = new StringBuilder();
var5.append(this.deviceInfo);
var5.append(var4);
String var7 = StringExtentionsKt.md5(var5.toString());
var1.addHeader("timestamp", var4);
var1.addHeader("device", this.deviceInfo);
var1.addHeader("version", "5.30.91-beta");
var1.addHeader("versionCode", "230920");
var1.addHeader("guestId", String.valueOf(GlobalDataSource.INSTANCE.getGuestId()));
var1.addHeader("sign", var7);
var1.addHeader("clientType", "app");
var4 = MainApp.Companion.getSourceFrom();
CharSequence var8 = (CharSequence)var4;
boolean var3 = false;
boolean var2;
if (var8 != null && var8.length() != 0) {
var2 = false;
} else {
var2 = true;
}
if (!var2) {
var1.addHeader("sourceFrom", var4);
}
var7 = MainApp.Companion.getSourceType();
CharSequence var6 = (CharSequence)var7;
if (var6 != null && var6.length() != 0) {
var2 = false;
} else {
var2 = true;
}
if (!var2) {
var1.addHeader("sourceType", var7);
}
label31: {
var4 = MainApp.Companion.getChannelNo();
var8 = (CharSequence)var4;
if (var8 != null) {
var2 = var3;
if (var8.length() != 0) {
break label31;
}
}
var2 = true;
}
if (!var2) {
var1.addHeader("channelNo", var4);
}
}
登录接口
请求头内容和验证码的差不多,仅有body的json编码改变了些许。
requestBody := map[string]interface{}{
"account": "",
"password": "",
"serial": uuid.New().String(),
"phoneNo": phoneNumber,
"verificationCode": code,
}
这个地方的难度也是之前请求加密的phoneNo的加密,其余并无难度。
说点题外话把,此雷霆游戏APP有很危险的内容,一旦通过接口登录后会拥有accrssToken等关键信息,若是部分游戏登录时也采用这样的登录权限,极有可能通过root权限封包APP内的登录验证,不用输入账号密码也能登录。
部分灰产可通过登录凭证直接养号避开图像验证之类的。
本文章只是提供思路学习。
有一说一,爱加密和邦邦企业版挺难的,尤其是一旦函数涉及到so层,那就只能用工具一步步看着还原。
比如联通的APP,虽然逆向出来了,但也是花了快一天左右。
添加付费获取联系方式,仅讲解逆向思路,需要订单号:
2 条评论
现在最新版的爱加密企业版,还适合用吗?
可以下载旧版本的APP然后使用脱壳,或者是最新版只能重新写了,目前没研究了