攻防世界4星题mfc逆向-200-writeup

提示Flag就在控件里

image-20240925104447448

程序加了VMP的壳,脱壳比较困难

image-20240925104438349

使用spy++工具对空间窗口进行分析,发现类名很特殊

image-20240925105156663

使用专用MFC xspy工具分析控件,发现一条自定义消息0464

image-20240925105414236

向这个空间句柄发送0464消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 1.cpp : 定义控制台应用程序的入口点。
//注意是MFC运行。

#include "stdafx.h"
#include<stdio.h>
#include<string.h>
#include "windows.h"

int main()
{
HWND h = FindWindowA("944c8d100f82f0c18b682f63e4dbaa207a2f1e72581c2f1b",NULL);
//HWND h = FindWindowA(NULL, "Flag就在控件里");
//HWND h = FindWindowA("944c8d100f82f0c18b682f63e4dbaa207a2f1e72581c2f1b", "Flag就在控件里");
//这里用到两个关键函数,一个是获取窗口句柄函数,第二个就是根据句柄发送消息函数。获取句柄的FindWindowA中第一个可以传入类名,第二个可以传入标题,因为我们两个都有,所以任意一个都可以锁定程序窗口。
if (h)
{
SendMessage(h, 0x464, NULL, NULL);
//发送函数中第二个是区别其他消息的常量值,这里题目用了自定义常量值,所以我们要对应一致。
}
getchar();
return 0;
}

控件发生变化出现{I am a Des key}

image-20240925105726685

进行DES解密获得flag

image-20240925110716874

__END__