-
-
KCTF2019Q4 第四题 西部乐园
-
2019-12-7 14:57 2996
-
1. sys
根据传入的pass, 解密传入的shellcode, 并执行
解密算法: 1400015A0
ida抠出来直接用void x_decrypt_shellcode(PBYTE buf, int len, int pass);
解密成功的条件
struct IOStuff { char *out_buf; void *fn_wrong; DWORD64 pid; DWORD64 pass; char shellcode[0xE7]; }; DWORD enc_size = InputBufferLength - (plain_size + 0x24); x_decrypt_shellcode(&io->shellcode[plain_size + 4], enc_size, pass); if ( *&io->shellcode[plain_size + 4] == enc_size )
2. exe
shellcode起始: 1400060B0
shellcode大小: 231
shellcode加密部分起始: 140006151+4
shellcode加密部分大小: 0x42
shellcode解密成功后MessageBoxA弹出OK
3. cpp
void test() { for (DWORD i = 90000; i <= 96000; i++) { // 140006151 + 4 BYTE data[] = { 0xE8, 0x59, 0x0D, 0x6D, 0x80, 0x3C, 0xA2, 0x78, 0x15, 0x87, 0x16, 0x16, 0x07, 0x26, 0x68, 0x55, 0x7F, 0x12, 0xF1, 0xEF, 0xF9, 0xA1, 0x9C, 0xE8, 0xEA, 0x9C, 0x90, 0xF4, 0x9F, 0x3A, 0xA8, 0x8C, 0x27, 0x47, 0x79, 0xF6, 0xDC, 0x20, 0x7F, 0x86, 0xED, 0x34, 0x7E, 0xF7, 0x1C, 0x55, 0x6B, 0xF6, 0xEF, 0xF2, 0x2A, 0x7A, 0xF0, 0x44, 0x50, 0x8A, 0x9B, 0xE1, 0xC4, 0xE1, 0x45, 0x90, 0x2B, 0x0E, 0xCF, 0xAF }; DWORD len = sizeof(data); x_decrypt_shellcode(data, len, i); DWORD v1 = *(PDWORD)data; if (v1 == len) { printf("pass: %d\n", i); // 91024 printf("%s\n", util::bin2hex(data, sizeof(data)).c_str()); break; } } }
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
他的文章
KCTF2022春季赛 第三题 石像病毒
8257
KCTF2022春季赛 第二题 末日邀请
15382
KCTF2021秋季赛 第二题 迷失丛林
17916
KCTF2020秋季赛 第十题 终焉之战
8088
KCTF2020秋季赛 第九题 命悬一线
5816
看原图