https://buuoj.cn/challenges#[Zer0pts2020]easy%20strcmp tar.gz 解压 7z 解压完拉进去发现还是个 tar 再解压,应该是 windows 这边的原因 elf 64 ./chall zer0pts{********CENSORED********} Wrong! 就说没这么简单嘛 往下翻翻这个函数 找到一处隐藏调用的函数 __int64 __fastcall sub_5621E80006EA(__int64 a1, __int64 a2) { int i; // [rsp+18h] [rbp-8h] int v4; // [rsp+18h] [rbp-8h] int j; // [rsp+1Ch] [rbp-4h] for ( i = 0; *(_BYTE *)(i + a1); ++i ) ; v4 = (i >> 3) + 1; for ( j = 0; j < v4; ++j ) *(_QWORD *)(8 * j + a1) -= qword_5621E8201060[j]; return qword_5621E8201090(a1, a2); } _QWORD qword_5621E8201060[5] = { 0LL, 4686632258374338882LL, 796841318371695088LL, 5695428477452625963LL, 0LL }; 字符串长度 33,刚好分成 4 组 → 基本类型数据大小 小端序 import binascii str_1 = b"********" str_2 = b"CENSORED" str_3 = b"********" word_1 = 4686632258374338882 word_2 = 796841318371695088 word_3 = 5695428477452625963 bin_1 = int(binascii.b2a_hex(str_1[::-1]), 16) bin_2 = int(binascii.b2a_hex(str_2[::-1]), 16) bin_3 = int(binascii.b2a_hex(str_3[::-1]), 16) j_1 = binascii.a2b_hex(hex(word_1+bin_1)[2:])[::-1] j_2 = binascii.a2b_hex(hex(word_2+bin_2)[2:])[::-1] j_3 = binascii.a2b_hex(hex(word_3+bin_3)[2:])[::-1] print((j_1+j_2+j_3).decode()) l3ts_m4k3_4_DETOUR_t0d4y