CrackMe01
1.用exeinfo查壳,无壳,32位
2.运行一下,发现是个窗口,而且输入值之后没有报错信息。
3.因为出现了窗口,所以说,我们要知道Windows中与窗口有关的一些函数。
-
MessageBox ()
功能是显示一个消息对话框,一般会传入4个参数,其功能分别为:1.窗口句柄 2.消息框主体显示的字符串 3.消息框标题上的字符串 4.样式(就是下面有几个按钮,分别是啥东西)
一般为你输入一串字符串后用来提示你对不对。
但是这个题没有,我就是想把它记下来 -
DefWindowProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)
DefWindowProc这个函数是默认的窗口处理函数
一般有啥窗口(未进行特殊定义的窗口都是他)可以去找找这个函数。参数作用:1.hWnd:指向接收消息的窗口过程的句柄。 2.Msg:指定消息类型 3.wParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关 4.IParam:指定其余的、消息特定的信息。该参数的内容与Msg参数值有关
-
ShowWindow(HWND hWnd,int nCmdShow)
1.hwnd:没什么用 2.ncmdshow:窗口的形式
4。 在IDA的import窗口中查找DefWindowProc函数,并且寻找其交叉引用的位置。
5 进入第一个函数看看,然后好像看到了一些看起来比较重要的操作
我们能在此看到有之前提到的一个重要函数,就是showwindow(推测一下,应该是会出现一个类似与正确的提示),所以说我们可以推测出v6的值。而后就可以推测出chetext的值。
6 查看chText的值
接下来写脚本得出v6的值和chtext就行了
上代码
v6:
#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=1;i<=2000;i++)
if((i & 0xF00) == 1024 && (i & 0xF0) == 0xB0 && (i & 6) == 6)
{
cout<<i;
break;
}
return 0;
}
chText:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[30]={0x4F0, 0x4DA, 0x4D7, 0x4D1, 0x48C, 0x4FF, 0x4F5, 0x4FE, 0x4E3, 0x4F8, 0x4E7, 0x4FF, 0x4E3, 0x4E9, 0x4F0,0x4F3, 0x485, 0x480, 0x484, 0x4F2, 0x4F4,0x4F3};
for(int i=0;i<22;i++)
a[i]^=1206;
for(int i=0;i<22;i++)
cout<<char(a[i]);
return 0;
}
flag{ICHUNQIU_FE362DBE}