baidu_201711_CrackMe01

step

1.跑程序,看到图形框,用IDA开

run

2.寻找常用的函数,先找message,发现有PostMessageW和MessageBoxW,分别双击进入,ctrl+x查看调用

MessageBoxW

PostMessageW

3.发现调用PostMessageW,查看函数,可见将堆的地址传入了函数;没有找到更多信息后查找window函数引用

heap

ShowWindow

4.进入函数后,发现字符chText,按F5查看伪码

5.由伪码可以看见判断,chText和v6逐字节做异或,得出flag,其中(v6 & 0xF00)1024 && (v6 & 0xF0)-80 && (v6 & 6)==6,我们取v6 < 0xff做一下。chText的值进入IDA可以查看。

6.编写CPP程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<string.h>
using namespace std;

int main()
{
unsigned int data[]={0x4F0, 0x4DA, 0x4D7, 0x4D1, 0x48C, 0x4FF,
0x4F5, 0x4FE, 0x4E3, 0x4F8, 0x4E7, 0x4FF,
0x4E3, 0x4E9, 0x4F0, 0x4F3, 0x485, 0x480,
0x484, 0x4F2, 0x4F4, 0x4F3};
for(unsigned int i=0;i<0xff;i++)
{
for(unsigned int j=0;j<22;j++)
{
printf("%c",data[j]^i);
}
printf("\n%X\n",i);
}
return 0;
}

7.运行得到flag

flag

download