测试文件:https://adworld.xctf.org.cn/media/task/attachments/6df7b29f8f18437887ff4be163b567d5.exe

1.准备

获取信息

  • 32位文件

2.IDA打开

BOOL __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4)
{
HMODULE v5; // eax
HICON v6; // eax
HMODULE v7; // eax
HCURSOR v8; // ST20_4
HWND v9; // eax
CHAR String; // [esp+8h] [ebp-340h]
CHAR v11[]; // [esp+108h] [ebp-240h]
char v12; // [esp+10Ch] [ebp-23Ch]
char v13; // [esp+10Dh] [ebp-23Bh]
char v14; // [esp+10Eh] [ebp-23Ah]
char v15; // [esp+10Fh] [ebp-239h]
char v16; // [esp+110h] [ebp-238h]
char v17; // [esp+111h] [ebp-237h]
char v18; // [esp+112h] [ebp-236h]
char v19; // [esp+113h] [ebp-235h]
char v20; // [esp+114h] [ebp-234h]
char v21; // [esp+115h] [ebp-233h]
char v22; // [esp+116h] [ebp-232h]
char v23; // [esp+117h] [ebp-231h]
CHAR Text; // [esp+208h] [ebp-140h]
char Src[]; // [esp+308h] [ebp-40h]
__int128 v26; // [esp+318h] [ebp-30h]
int v27; // [esp+328h] [ebp-20h]
__int128 v28; // [esp+32Ch] [ebp-1Ch]
int v29; // [esp+33Ch] [ebp-Ch]
__int16 v30; // [esp+340h] [ebp-8h] if ( a2 == )
{
EndDialog(hDlg, );
return ;
}
if ( a2 == )
{
v5 = GetModuleHandleW();
v6 = LoadIconW(v5, (LPCWSTR)'g');
SetClassLongA(hDlg, -, (LONG)v6);
v7 = GetModuleHandleW();
v8 = LoadCursorW(v7, (LPCWSTR)'f');
v9 = GetDlgItem(hDlg, );
SetClassLongA(v9, -, (LONG)v8);
return ;
}
if ( a2 != || (unsigned __int16)a3 != )
return ;
memset(&String, (unsigned __int16)a3 - , 256u);
memset(v11, , 0x100u);
memset(&Text, , 0x100u);
GetDlgItemTextA(hDlg, , &String, );
GetDlgItemTextA(hDlg, , v11, );
if ( strstr(&String, "@") && strstr(&String, ".") && strstr(&String, ".")[] && strstr(&String, "@")[] != '.' )
{
v28 = xmmword_410AA0; // "Registration fai"
v29 = 'erul';
*(_OWORD *)Src = xmmword_410A90; // "Registration Suc"
v30 = '.';
v26 = xmmword_410A80; // "cess!Your flag"
v27 = ':si';
if ( strlen(v11) != // 序列号长度为16
|| v11[] != 'C'
|| v23 != 'X'
|| v11[] != 'Z'
|| v11[] + v22 != // v22=65='A'
|| v11[] != ''
|| v11[] + v21 != // v21=98='b'
|| v11[] != 'd' // v11="CZ9d"
|| v20 != ''
|| v12 != 'm'
|| v19 != 'G'
|| v13 != 'q'
|| v13 + v18 != // v18=57='9'
|| v14 != ''
|| v17 != 'g'
|| v15 != 'c'
|| v16 != '' )
{
strcpy_s(&Text, 0x100u, (const char *)&v28);
}
else
{
strcpy_s(&Text, 0x100u, Src);
strcat_s(&Text, 0x100u, v11);
}
}
else
{
strcpy_s(&Text, 0x100u, "Your E-mail address in not valid.");
}
MessageBoxA(hDlg, &Text, "Registeration", 0x40u);
return ;
}

3.代码分析

只要将代码认认真真看一遍,并不难。邮箱的要求在代码第53行

 if ( strstr(&String, "@") && strstr(&String, ".") && strstr(&String, ".")[] && strstr(&String, "@")[] != '.' )

要求邮箱有'@'和'.'字符,并且这两个字符并能在一起。

序列号即v11[4]+v12+v13+...v23,可以看上面注释。

4.get flag!

CZ9dmq4c8g9G7bAX

最新文章

  1. XMind共享未保存的思维导图的教程
  2. api接口类型
  3. Android Log Tag含义
  4. android nio
  5. 不要使用SBJSON(json-framework)
  6. Reactive Extensions(Rx)并发浅析
  7. Java将一个目录下的所有数据复制到另一个目录下
  8. Linux OpenGL 实践篇-4 坐标系统
  9. SlopOne 改进
  10. NOIP-Vigenère密码
  11. vue父子组件之间传值
  12. 小菜鸟从0基础开始学Linux系统
  13. Java中String类型的数据比较
  14. select默认选中
  15. LFI/RFI总结
  16. leetcode521
  17. e655. 混合风格的文本
  18. 【转】深入浅出 iOS 之生命周期
  19. zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件
  20. windows部署PHP开发的cms系统

热门文章

  1. JavaScript正则表达式(四)
  2. Manacher模板( 线性求最长回文子串 )
  3. sh_09_格式化输出
  4. 将HTML5封装成android应用APK文件若干方法(转)
  5. SpringCloud 教程 (五) 断路器监控(Hystrix Dashboard)
  6. vue项目使用axios发送请求让ajax请求头部携带cookie
  7. Zipf's law
  8. mycat 配置简介
  9. 深入探讨 Python 的 import 机制:实现远程导入模块
  10. Delphi XE2 之 FireMonkey 入门(10) - 常用结构 TPoint、TPointF、TSmallPoint、TSize、TRect、TRectF 及相关方法