这题就是一个脑洞题,但可以大概的了解一下windows编程
查壳发现是虚拟机
IDA打开,脱壳怕是不可能的了,只能换其他方法。
这里用面向大佬博客做题法
因为Flag就在控件里,干脆spy++查看一下
找到句柄,用xspy查一查
1 | OnMsg:0464,func= 0x00402170(mfc逆向-200.exe+ 0x002170 ) |
找到了一个奇怪的东西,但是接下来不知道该怎么做了
然后偷瞄大佬博客
大佬掐指一算应该发个消息,vs启动
1 | #include <iostream> |
这里只是简单的用到了两个函数
第一个FindWindowA
,定义如下
1 | HWND FindWindowA( |
这个函数不查找子窗口(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 |
不仅懂得比大佬少,脑洞也比不过大佬
Comments