每天一道ctf,能多不能少
题目链接
下载好以后双击点开

发现是这么个玩意儿,但我们却没法对它进行操作,好吧,查一下壳,然后直接用ida打开,查看主函数,这里我发现主函数是这种的

学识短浅的我只能去百度,大概了解了一下:windows支持两种应用程序,一种是一种是基于控制台用户界面的应用程序(Console User Interface,简称CUI),另一种是基于图形用户界面的程序(Graphic User Interface,简称GUI)。然后main函数和WinMain函数分别是这两种应用程序的主函数(不知道这样理解做没错,原话是这样的:main函数和WinMain 函数是分别做为CUI和GUI的进入点函数被使用的。)废话不多说,继续我们的ctf。
所以我们打开主函数,然后查看反码。

这里面的函数是一个windowsAPI函数,作用是从一个对话框资源中创建一个模态对话框。参数我并不太明白,百度了一下也没百度出个结果,看了其他大佬的wp是这样说的的:

继续往下,查看代码
INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4)
{
const char *v4; // esi
const char *v5; // edi
int v7[2]; // [esp+8h] [ebp-20030h] BYREF
int v8; // [esp+10h] [ebp-20028h]
int v9; // [esp+14h] [ebp-20024h]
int v10; // [esp+18h] [ebp-20020h]
int v11; // [esp+1Ch] [ebp-2001Ch]
int v12; // [esp+20h] [ebp-20018h]
int v13; // [esp+24h] [ebp-20014h]
int v14; // [esp+28h] [ebp-20010h]
int v15; // [esp+2Ch] [ebp-2000Ch]
int v16; // [esp+30h] [ebp-20008h]
CHAR String[65536]; // [esp+34h] [ebp-20004h] BYREF
char v18[65536]; // [esp+10034h] [ebp-10004h] BYREF
if ( a2 == 272 )
return 1;
if ( a2 != 273 )
return 0;
if ( (_WORD)a3 == 1001 )
{
memset(String, 0, 0xFFFFu);

本文解析了一个CTF挑战赛中的题目,涉及Windows API函数使用及逆向工程技巧,详细分析了如何通过代码逻辑找到正确的密钥。
最低0.47元/天 解锁文章
592





