Mini L-CTF 2025 reverse wp(复现)
参考:
https://idontknowctf.xyz/2025/05/09/Mini-LCTF2025-WriteUp/
https://astralprisma.github.io/2025/05/07/minil_25/
https://seandictionary.top/mini-l-ctf-2025/
以及官方wp
0.s1gn1n

最后那一段是程序的判断
异或可以这样看(虽然还是有一点抽象)
1 2 3 4 5 6 7
1^2 6^7
1 2` 3` 4`
异或解密:
#include <windows.h>
#include <stdio.h>
int main() {
int a[] = {0x58,0x69,0x7B,0x6,0x1E,0x38,0x2C,0x20,0x4,0xF,0x1,0x7,0x31,0x6B,0x8,0xE,0x7A,0xA,0x72,0x72,0x26,0x37,0x6F,0x49,0x21,0x16,0x11,0x2F,0x1A,0xD,0x3C,0x1F,0x2B,0x32,0x1A,0x34,0x37,0x7F,0x3,0x44,0x16,0xE,0x1,0x28,0x1E,0x68,0x64,0x23,0x17,0x9,0x3D,0x64,0x6A,0x69,0x63,0x18,0x18,0xA,0x15,0x70};
char flag[60];
flag[0] = 0x58;
for(int i = 1 ;i<60;i++){
flag[i] = a[i] ^ flag[i-1];
}
printf("%s",flag);
return 0;
}//X1JLRjFfbmlkZ197MG5GaV9pQGVycnRMfTNzM21ucmlDZ2VubkV2X1RJRXM=

中序的问题可以用映射来解决,动调可以发现变换的规律

用ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr得到了fPgHhQiDjRkIlSmBnToJpUqErVKWAXLYFZMaCbNcGdOe(44位是flag的长度)
#include <stdio.h>
#include <string.h>
int main() {
char flag[44] = {0};
const char enc[] = "_RKF1_nidg_{0nFi_i@errtL}3s3mnriCgennEv_TIEs";
const char s1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr";
const char s2[] = "fPgHhQiDjRkIlSmBnToJpUqErVKWAXLYFZMaCbNcGdOe";
int map[128] = {0};
for (int i = 0; i < 44; i++) {
map[s2[i]] = i;
}
for (int i = 0; i < 44; i++) {
char m = s1[i];
int index = map[m];
flag[i] = enc[index];
}
printf("%s", flag);
return 0;
}
flag:miniLCTF{esrevER_gnir33nignE_Is_K1nd_0F_@rt}
x96re
retf跳转到这里,异或0x4c





最后两位没有异或所以两段拼接一下
miniLCTF{3ac159d665b4ccfb25c0927c1a23edb3}

浙公网安备 33010602011771号