尝试了下输入没有任何反应
查看——32位——IDA打开
我之前没怎么写过win32,所以我开始在string里面找flag,wrong,right什么的字符,都不行
然后我又在函数里面找main,也什么收获的没有,OK废话完了
在win32里面 关于弹窗的函数:
MessageBox ()
DefWindowProc这个函数是默认的窗口处理函数
ShowWindow(HWND hWnd,int nCmdShow)
我们先找
messagebox(我们动调按的时候,没有弹出来新窗口,所以否定他)
我们看
处理机制,因为他让我们输入,肯定要处理我们输入的数据才行
在第一个函数里面
LRESULT __stdcall sub_A27F0(HWND a1, UINT Msg, WPARAM wParam, unsigned int lParam)
{UINT v4; // eaxLPARAM v5; // edx__int16 v6; // bxvoid *v7; // ediHDC v9; // esiunsigned int v10; // ecx__int16 v11; // axunsigned int i; // eaxint v13; // ediint SystemMetrics; // eaxstruct tagRECT v15; // [esp+18h] [ebp-68h] BYREFstruct tagRECT Rect; // [esp+28h] [ebp-58h] BYREFstruct tagPAINTSTRUCT Paint; // [esp+38h] [ebp-48h] BYREFv4 = Msg;v5 = lParam;v6 = 0;v7 = wParam;if ( Msg > 0xF ){if ( Msg != 4097 )return DefWindowProcW(a1, v4, v7, v5);v10 = 0;do{v11 = *(wParam + 2 * v10++);v6 += v11;}while ( v10 <= lParam );for ( i = 0; i < 44; i += 2 )*(&chText + i) ^= v6;GetWindowRect(a1, &v15);v13 = (v15.left - v15.right + GetSystemMetrics(16)) / 2;SystemMetrics = GetSystemMetrics(17);SetWindowPos(a1, HWND_MESSAGE|0x2, v13, (v15.top - v15.bottom + SystemMetrics) / 2, -1, -1, 5u);SetWindowPos(a1, 0xFFFFFFFE, 0, 0, 0, 0, 3u);if ( (v6 & 0xF00) == 0x400 && (v6 & 0xF0) == 0xB0 && (v6 & 6) == 6 ){ShowWindow(a1, 5);UpdateWindow(a1);}v7 = wParam;
LABEL_18:if ( v7 )free(v7);v5 = lParam;v4 = Msg;return DefWindowProcW(a1, v4, v7, v5);}switch ( Msg ){case 0xFu:v9 = BeginPaint(a1, &Paint);GetClientRect(a1, &Rect);DrawTextW(v9, &chText, -1, &Rect, 0x25u);EndPaint(a1, &Paint);goto LABEL_18;case 1u:return 0;case 2u:PostQuitMessage(0);return 0;}return DefWindowProcW(a1, v4, v7, v5);
}
在这里,improt 里面居然有自定义的变量,这是一个异常点!
我们看CHtext
那个4很奇怪
最后知道这段是dword
师傅给的代码提取
shift+F2
import idc
v=[idc.get_wide_word(i) for i in range(0x002464A0,0x002464Cb,2)]
key = 0x4b6
for i in range(len(v)):v[i]=v[i]^key
print(bytes(v))
这里的key就是V6,我们从前面找不到V6的数据,我们往后面看
就可以知道V6=0x4f6
最后得到flag
ICHUNQIU_FE362DBE
下班!