太菜了只会初级题 :'(weeqw
Windows初级题
先判断flag长度为27
print(len(bytes.fromhex("6b83537e8a30477b3e59362e4c293535340c5b5a5c797f5073747e")))
搜索Success,在附近下断点,输入全1,直接调试即可得到flag


fl@g{52pOj1E_2025#Fighting}
Android初级题
拖入JADX
在FoldFragment2类中看到三个Base64编码的字符串:
"2hyWtSLN69+QWLHQ"
"hjyaQ8jNSdp+mZic7Kdtyw=="
"cYoiUd2BfEDc/V9e4LdciBz9Mzwzs3yr0kgrLA=="
在TO类可以看到db方法,即Base64解码后应用XXTEA解密,密钥为my-xxtea-secret填充至16字节
粘贴到IDE里运行即可
运行后可以知道这三个字符串分别对应为:
flag{
xnkl2025!}
快去寻找flag吧!
所以flag为
flag{xnkl2025!}
EXP:
import java.util.Base64;
import java.nio.charset.StandardCharsets;
public class Main {
private static final String YYLX = "my-xxtea-secret";
public static final byte[] de(byte[] data, byte[] key) {
return toByteArray(de(toIntArray(data, false), toIntArray(fK(key), false)), true);
}
private static int[] de(int[] iArr, int[] iArr2) {
int length = iArr.length;
int i = length - 1;
if (i < 1) {
return iArr;
}
int i2 = iArr[0];
for (int i3 = ((52 / length) + 6) * (-1640531527); i3 != 0; i3 -= -1640531527) {
int i4 = (i3 >>> 2) & 3;
for (int i5 = i; i5 > 0; i5--) {
int i6 = iArr[i5 - 1];
i2 = iArr[i5] - (((i2 ^ i3) + (i6 ^ iArr2[(i5 & 3) ^ i4])) ^ (((i6 >>> 5) ^ (i2 << 2)) + ((i2 >>> 3) ^ (i6 << 4))));
iArr[i5] = i2;
}
int i7 = iArr[i];
i2 = iArr[0] - (((i2 ^ i3) + (iArr2[i4] ^ i7)) ^ (((i7 >>> 5) ^ (i2 << 2)) + ((i2 >>> 3) ^ (i7 << 4))));
iArr[0] = i2;
}
return iArr;
}
private static int[] toIntArray(byte[] bArr, boolean z) {
int length = (bArr.length + 3) / 4;
int[] iArr = new int[length + (z ? 1 : 0)];
int length2 = bArr.length;
for (int i = 0; i < length2; i++) {
int i2 = i / 4;
iArr[i2] = iArr[i2] | ((bArr[i] & 0xFF) << ((i % 4) * 8));
}
if (z) {
iArr[length] = bArr.length;
}
return iArr;
}
private static byte[] toByteArray(int[] iArr, boolean z) {
int length = iArr.length * 4;
if (z) {
length = iArr[iArr.length - 1];
}
byte[] bArr = new byte[length];
for (int i = 0; i < length; i++) {
bArr[i] = (byte) ((iArr[i / 4] >> ((i % 4) * 8)) & 255);
}
return bArr;
}
private static byte[] fK(byte[] bArr) {
byte[] bArr2 = new byte[16];
System.arraycopy(bArr, 0, bArr2, 0, Math.min(bArr.length, 16));
return bArr2;
}
public static void main(String[] args) {
String v1 = "2hyWtSLN69+QWLHQ";
String v2 = "hjyaQ8jNSdp+mZic7Kdtyw==";
byte[] decode1 = Base64.getDecoder().decode(v1);
byte[] decode2 = Base64.getDecoder().decode(v2);
byte[] bytes = YYLX.getBytes(StandardCharsets.UTF_8);
byte[] flag1 = de(decode1,bytes);
byte[] flag2 = de(decode2,bytes);
String flag1_ = new String(flag1, StandardCharsets.UTF_8);
String flag2_ = new String(flag2, StandardCharsets.UTF_8);
System.out.println(flag1_ + flag2_);
}
}
|