-
-
[原创]看雪CTF2017 第一题 CrackMe分析
-
-
[原创]看雪CTF2017 第一题 CrackMe分析
分析的应该是限制了多解的版本。
一、答案
1555
151N
二、分析:
比较简单,WannaLOL2.exe扔到IDA里,WinMain里看到对话框的消息处理函数DialogFunc:
DialogFunc里看到Register按钮处理函数地址004011F4:
004011F4函数里有两个花指令,导致IDA无法识别成函数,需要把00401262和004012AA两处地址的字节改为0x90(nop),然后在004011F4地址处按p创建函数,就可以F5了:
代码很简单,总结:
1、key必须为4个字符,不能是0000,前两个字符必须为15
2、假设key为char str[4],则必须满足表达式:
((double)(str[2] - 0x30) - 0.2) * (double)(str[3] - 0x30) * 16.0 == 384.0
写个代码简单粗暴的列出str[2]和str[3]的所有可能值:
// 需要C++11
#include <cstdio>
#include <cmath>
int main() {
for (unsigned char c = 0; c != 0xff; ++c) {
int n = c - 0x30;
double x3 = n;
double x2 = 24.0 / x3 + 0.2;
if (std::isnormal(x2) && // 非0、NaN、infinite等
!std::signbit(x2) && // 非负数
std::fmod(x2, 1) == 0.0) { // 整数
printf("15%c%c\n", // key前两个字符固定为15
static_cast<int>(x2) + 0x30,
static_cast<int>(x3) + 0x30);
}
}
}
编译运行即可得到开头的两组答案。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!