Hi there

CS student, into reverse engineering, OS internals, and compilers.

CSAW 2013 Reversing2 Writeup

题目信息 来源:攻防世界新手区 / CSAW CTF 2013 文件:32 位 Windows PE,无壳 提示:听说运行就能拿到 Flag,不过菜鸡运行的结果不知道为什么是乱码 行为分析 直接运行,弹出一个标题为 “Flag” 的 MessageBox,内容是一串乱码。 拖进 IDA,main 函数的逻辑: memcpy_s 把 0x409B10 处的加密数据拷到堆上 调用 IsDebuggerPresent() 检测调试器 检测到调试器 → int 3 断点 → 调解密函数 sub_401000 → 然后 ExitProcess 退出(解密后的 flag 没机会弹框) 没检测到 → 直接 MessageBoxA 弹加密数据 → 看到乱码 所以程序把解密逻辑写了,但用反调试把它藏起来了。 解密算法 sub_401000 逻辑很简单,4 字节循环异或: uint32_t key = 0xDDCCBBAA; for (int i = 0; i < 36; i++) { buf[i] ^= ((uint8_t*)&key)[i % 4]; } 解法 三处 patch 即可: 地址 原指令 改为 作用 0x401094 jz loc_4010B9 jmp loc_4010B9 强制进入解密分支 0x40109A int 3 nop 绕过断点异常 0x4010A3 jmp loc_4010EF jmp loc_4010B9 解密后跳去弹框而不是退出 IDA 里 Edit → Patch program → Assemble,然后 Apply patches to input file,运行即得 flag。 ...

July 29, 2026 · 1 min