吾爱2023新年红包题第四题
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
吾爱论坛2023年春节红包安卓题随便玩一玩
https://www.52pojie.cn/thread-1738015-1-1.html
第四题https://www.52pojie.cn/home.php?mod=task&do=view&id=23
首先我们下载后打开apk看下界面提示情况
看界面是用到了 你的吾爱uid 以及计算出来的flag 进行效验
先定位到方法我们又看到用到了MD5加密和 base64
还是先看方法逻辑吧
obj也就是第一个输入框的内容那不就是uid吗
String obj = StringsKt.trim((CharSequence) editText.getText().toString()).toString();
后面这个就是第二个输入框flag
StringsKt.trim((CharSequence) editText2.getText().toString()).toString())
进入a.m25B方法
uid -> str ->encode ->c.cipher(mD5Utils.MD5(base64Utils.encodeToString(bytes)), 5)
flag -> str2 -> substring
显然这个方法是 返回一个 bool类型结果那就是 true | false;
又看到最后确实是比对这两个值
分析其逻辑我们只要知道c.cipher(mD5Utils.MD5(base64Utils.encodeToString(bytes)), 5)
就是比对的结果
分析运算逻辑
将 uid + “Wuaipojie2023” 进行 encode 方法运算
public static String encode(String str) {
int length = str.length();
char[] cArr = new char[length];
int i = length - 1;
while (i >= 0) {
int i2 = i - 1;
cArr[i] = (char) (str.charAt(i) ^ '5');
if (i2 < 0) {
break;
}
i = i2 - 1;
cArr[i2] = (char) (str.charAt(i2) ^ '2');
}
return new String(cArr);
}
后转bytes进行base64编码
====这里的base64也都是标准的无魔改无改码表
然后将base64之后进行md5加密加密后得出32位值再用 cipher 做运算
public final String cipher(String str, int i) {
Intrinsics.checkNotNullParameter(str, "str");
StringBuilder sb = new StringBuilder();
int length = str.length();
for (int i2 = 0; i2 < length; i2++) {
if (Intrinsics.compare((int) str.charAt(i2), 65) >= 0 && Intrinsics.compare((int) str.charAt(i2), 90) <= 0) {
sb.append(cipher(str.charAt(i2), i));
} else if (Intrinsics.compare((int) str.charAt(i2), 97) < 0 || Intrinsics.compare((int) str.charAt(i2), 122) > 0) {
sb.append(str.charAt(i2));
} else {
sb.append(cipher(str.charAt(i2), i));
}
}
String sb2 = sb.toString();
Intrinsics.checkNotNullExpressionValue(sb2, "sb.toString()");
return sb2;
}
运算之后
那就是 cipher之后h8203kj86395hf8677jgj599ki82g0i9
那么格式就是 flag{cipher之后的值了}