首页
社区
课程
招聘
[原创]看雪CTF2017 第一题 CrackMe分析
2017-6-3 02:13 3097

[原创]看雪CTF2017 第一题 CrackMe分析

2017-6-3 02:13
3097

分析的应该是限制了多解的版本。


一、答案

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);
    }
  }
}


编译运行即可得到开头的两组答案。


阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/06/06
最新回复 (1)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
凡人亦不凡! 2017-7-25 23:19
2
0
依旧惊叹ida  f5的便捷  唉
游客
登录 | 注册 方可回帖
返回