213 字
1 分钟
DontDebugMe
2025-11-08

点开pseudocode,

DontDebugMe-1

发现是对buf2进行加密,

显然v5就是加密的key

而sub_401000这个函数就是为key赋值

那么只要复现sub_401000函数,得出key即可

这里有两个没见过的函数,

HIWORD: 取出dword中的高位word

HIBYTE: 取出dword中的高位byte

不知道没关系,在asm里有很清晰的解释

(pseudocode里遇到不懂的先看asm)

DontDebugMe-2

DontDebugMe-3

#HIWORD
uint32_t val;
uint16_t hi = val >> 16;
#HIBYTE
uint32_t val;
uint8_t hi = val >> 24;

注意Buf2的类型,是word,所以从.data段dump的时候注意一下

编写dec

#include <bits/stdc++.h>
using namespace std;
uint16_t cipher[20] = {
0xA9E9, 0xA7F8, 0xA2F9, 0xD620, 0xD69A,
0xD9C8, 0xD399, 0x85CB, 0xD29B, 0xD5C7,
0x8496, 0xD4C9, 0xD89A, 0xD7CA, 0xD59C,
0x85C8, 0xD597, 0x859E, 0xD49C, 0x6DCA
};
uint32_t key = 109440544;
int main() {
for (int i = 0; i < 20; i++) {
cipher[i] ^= key;
cipher[i] -= (key>>16);
    }
for (int i = 0; i < 20; i++) {
cout.write(reinterpret_cast<char *>(&cipher[i]),sizeof(cipher[i]));
}
return 0;
}
// DASCTF{152c147fe66b51dd450e375ce259e74e}
DontDebugMe
https://c0d4.ink/posts/dontdebugme/
作者
Coda
发布于
2025-11-08
许可协议
CC BY-NC-SA 4.0