mfc逆向-200_攻防世界

这题就是一个脑洞题,但可以大概的了解一下windows编程

查壳发现是虚拟机
8b4mz4.png

IDA打开,脱壳怕是不可能的了,只能换其他方法。

这里用面向大佬博客做题法

因为Flag就在控件里,干脆spy++查看一下

8b4uQJ.png

找到句柄,用xspy查一查

1
OnMsg:0464,func= 0x00402170(mfc逆向-200.exe+ 0x002170 )

找到了一个奇怪的东西,但是接下来不知道该怎么做了

然后偷瞄大佬博客

大佬掐指一算应该发个消息,vs启动

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include<Windows.h>
int main()
{
HWND h = FindWindowA(NULL, "Flag就在控件里");
if (h)
{
SendMessage(h, 0x464, NULL, NULL);
}
return 0;
}

这里只是简单的用到了两个函数

第一个FindWindowA,定义如下

1
2
3
4
HWND FindWindowA(
LPCSTR lpClassName, {窗口的类名,可为空}
LPCSTR lpWindowName {窗口的标题名}
);

这个函数不查找子窗口(FindWindowEx),返回的是这个窗口的句柄,其实就是我们之前用spy++查询到的句柄,也可以用下面的代码

1
auto h = HWND(0xa505f4);

作用是一样的,找到句柄之后就可以发消息,用到了SendMessage

定义如下

1
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)

参数
hWnd:指定要接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
wParam:指定附加的消息特定信息。
IParam:指定附加的消息特定信息。
返回值:返回值指定消息处理的结果,依赖于所发送的消息。

所以给这个控件发个0x464,然后窗体里面的内容变了,变成了{I am a Des key}

有了key,但是密文是什么……

大佬掐指一算,之前这个控件有个奇怪的类名944c8d100f82f0c18b682f63e4dbaa207a2f1e72581c2f1b

解密得到flag

1
thIs_Is_real_kEy_hahaaa

不仅懂得比大佬少,脑洞也比不过大佬

tar-tar-binks-攻防世界 HouseplantCTF-wp

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×