【crackmes.one】———— Zero4

Language: c/c++ | Arch: x86-64 | Platform: Windows |Tech: crackme,anti-debug,xor

EXE info
无壳,直接打开IDA分析
作者打了反调试的标签,实际上只有一个ISDebuggerPresent
IsDebuggerPresent
strings列表里有一些加密数据,以及提示字符串,还有更关键的Wrong password和Press enter to exit,分别对应失败和成功
strings
main函数总体并不长,前面的输出函数是cout,下面紧接着是std::string对象的初始化

*(_OWORD *)buf = 0;
size = 0;
capacity = 15;
LOBYTE(buf[0]) = 0;

初始化的主要特征是16 字节清零 + 一个 0 + 一个 15 + 首字节 0
中间部分是关于c++虚表的内容,与本题无关
后面是获取输入的函数getline
getline
判断依据是这几个字符串,它们是getline的特征
str
后面这部分是在原字符串基础上把'\r'去掉,以及检查长度是否为71个字符。
其中0xF用于判断字符串长短,用于string的短串内联、长串堆分配判定
code
接下来验证逻辑就一行异或运算,根据可逆性编写python脚本就可以了
xor\

enc = []    #enc使用lazyida提取
flag = bytes(((i * 7 + 0x5A) & 0xFF) ^ enc[i] for i in range(0x47))
print(f"flag:{flag}")
posted on 2026-11-11 22:28  %HuTao%  阅读(3)  评论(0)    收藏  举报