打开程序,可以进行画图类似于一个画图程序,猜测题目要求是画出某个图形之后进行对比,对比成功后获取flag。
乱画一通后,点击check按钮,弹出消息框:
看看WinMain之后,顺着Wrong消息框找到sub_401130核心函数,F5后的类c代码如下:
int __stdcall sub_401130(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
HDC v4; // eax
int result; // eax
HGDIOBJ v6; // eax
HDC v7; // esi
void *v8; // esi
HRSRC v9; // eax
HGLOBAL v10; // eax
_BYTE *v11; // eax
signed int v12; // edi
_BYTE *v13; // ecx
int v14; // eax
char pv; // [esp+8h] [ebp-80h]
LONG v16; // [esp+Ch] [ebp-7Ch]
UINT cLines; // [esp+10h] [ebp-78h]
struct tagBITMAPINFO bmi; // [esp+20h] [ebp-68h]
if ( Msg <= 0x111 )
{
if ( Msg != 0x111 )
{
switch ( Msg )
{
case 1u:
v7 = GetDC(hWnd);
hbm = CreateCompatibleBitmap(v7, 200, 150);
hdc = CreateCompatibleDC(v7);
h = SelectObject(hdc, hbm);
Rectangle(hdc, -5, -5, 205, 205);
ReleaseDC(hWnd, v7);
::wParam = (WPARAM)CreateFontA(12, 0, 0, 0, 400, 0, 0, 0, 0x81u, 0, 0, 0, 0x12u, pszFaceName);
dword_4084E0 = (int)CreateWindowExA(
0,
ClassName,
WindowName,
0x50000000u,
60,
85,
80,
28,
hWnd,
(HMENU)0x64,
hInstance,
0);
SendMessageA((HWND)dword_4084E0, 0x30u, ::wParam, 0);
return 0;
case 2u:
v6 = SelectObject(hdc, h);
DeleteObject(v6);
DeleteDC(hdc);
PostQuitMessage(0);
return 0;
case 0xFu:
v4 = BeginPaint(hWnd, (LPPAINTSTRUCT)bmi.bmiColors);
BitBlt(v4, 0, 0, 200, 150, hdc, 0, 0, 0xCC0020u);
EndPaint(hWnd, (const PAINTSTRUCT *)bmi.bmiColors);
return 0;
}
return DefWindowProcA(hWnd, Msg, wParam, lParam);
}
if ( wParam == 100 )
{
GetObjectA(hbm, 24, &pv); // 将所需的资源进行加载
memset(&bmi, 0, 0x28u);