尝试了下输入没有任何反应
查看——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; // eax
LPARAM v5; // edx
__int16 v6; // bx
void *v7; // edi
HDC v9; // esi
unsigned int v10; // ecx
__int16 v11; // ax
unsigned int i; // eax
int v13; // edi
int SystemMetrics; // eax
struct tagRECT v15; // [esp+18h] [ebp-68h] BYREF
struct tagRECT Rect; // [esp+28h] [ebp-58h] BYREF
struct tagPAINTSTRUCT Paint; // [esp+38h] [ebp-48h] BYREF
v4 = 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
下班!