-
-
[原创]2021KCTF秋季赛 ch1 身在何处
-
2021-11-30 09:58 13340
-
主体逻辑如下:
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_951340(HWND hDlg) { int name_length; / / ebx int v2; / / ebx int num_serial; / / eax signed int serial_length; / / [esp + Ch] [ebp - 260h ] char v6[ 200 ]; / / [esp + 10h ] [ebp - 25Ch ] BYREF CHAR name[ 200 ]; / / [esp + D8h] [ebp - 194h ] BYREF CHAR serial[ 200 ]; / / [esp + 1A0h ] [ebp - CCh] BYREF memset(name, 0 , sizeof(name)); memset(v6, 0 , sizeof(v6)); memset(serial, 0 , sizeof(serial)); name_length = GetDlgItemTextA(hDlg, 1000 , name, 201 ); if ( name_length && (serial_length = GetDlgItemTextA(hDlg, 1001 , serial, 201 ), v2 = encode(name, name_length), strspn(serial, "0123456789" ) = = strlen(serial)) && serial_length < = 10 && (num_serial = sub_95307F(( int )serial)) ! = 0 && (unknown_libname_13(v2 ^ num_serial, ( int )v6, 16 ), encode(v6, 8 ) = = 0x13B88C77 ) ) { SetDlgItemTextA(hDlg, 1001 , "Success!" ); return 1 ; } else { SetDlgItemTextA(hDlg, 1001 , "Wrong Serial!" ); return 0 ; } } |
由于提供了一组可用的账号密码:
1 2 | 用户名 : 01F845C5B7C52E56 序列号 : 653259165 |
因此通过调试,先得到encode(v6, 8) == 0x13B88C77)
中的v6为0x52a1ed5a,即v2 ^ num_serial。
由于已知用户名为KCTF,因此动调v2 = encode(name, name_length)
得到v2为0x5EE54F4C。
从而得到num_serial为0x5EE54F4C^0x52a1ed5a=205824534。
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
赞赏
看原图