-
-
[原创]2021 KCTF 秋季赛 第一题 身在何处[签到题] wp
-
发表于: 2021-11-16 08:38 3230
-
IDA打开,直接定位到check部分的代码,简单处理一下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | int __cdecl sub_401340(HWND hDlg) { int nLenUser; / / ebx int v2; / / ebx int v3; / / eax signed int nLenPass; / / [esp + Ch] [ebp - 260h ] char v6[ 200 ]; / / [esp + 10h ] [ebp - 25Ch ] BYREF CHAR strUserName[ 200 ]; / / [esp + D8h] [ebp - 194h ] BYREF CHAR strPassword[ 200 ]; / / [esp + 1A0h ] [ebp - CCh] BYREF memset(strUserName, 0 , sizeof(strUserName)); memset(v6, 0 , sizeof(v6)); memset(strPassword, 0 , sizeof(strPassword)); nLenUser = GetDlgItemTextA(hDlg, 1000 , strUserName, 201 ); if ( nLenUser && (nLenPass = GetDlgItemTextA(hDlg, 1001 , strPassword, 201 ), v2 = sub_401260(strUserName, nLenUser), strspn(strPassword, "0123456789" ) = = strlen(strPassword)) && nLenPass < = 0xA && (v3 = sub_40307F(( int )strPassword)) ! = 0 && (sub_4042B3(v2 ^ v3, ( int )v6, 16 ), sub_401260(v6, 8 ) = = 0x13B88C77 ) ) { SetDlgItemTextA(hDlg, 1001 , "Success!" ); return 1 ; } else { SetDlgItemTextA(hDlg, 1001 , "Wrong Serial!" ); return 0 ; } } |
通过动态调试,sub_401260是自写的查表函数,sub_40307F是atoi函数,
sub_4042B3是itoa函数
整个验证只需要满足以下条件:
sub_401260(v6, 8) == 0x13B88C77
其中
v6:sub_4042B3(v2 ^ v3, (int)v6, 16)
v2 = sub_401260(strUserName, nLenUser)
v3 = atoi(strPassword);
通过输入正确的用户名、序列号,通过动态调试获取正确的V6是字符串‘52a1ed5a’的指针,即v2^v3 = 0x52a1ed5a
再次输入用户名KCTF,通过动态调试获取v2 = 0x5EE54F4C
因此v3 = v2 ^ 0x52a1ed5a = 0xC44A216
所以 flag = 205824534
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: