-
-
[原创]21kctf秋:签到题 身在何处
-
发表于: 2021-11-15 19:00 2278
-
21kctf秋
签到题 身在何处
寻找Success字符串所在的函数
通过静态加动态分析,得到如下结果:
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 32 33 | int __cdecl mmmm(HWND hDlg) { int nNameNum; / / ebx int code1; / / ebx int nSeri; / / eax int result; / / eax signed int nSeriNum; / / [esp + Ch] [ebp - 260h ] char str [ 200 ]; / / [esp + 10h ] [ebp - 25Ch ] BYREF CHAR strName[ 200 ]; / / [esp + D8h] [ebp - 194h ] BYREF CHAR strSeri[ 200 ]; / / [esp + 1A0h ] [ebp - CCh] BYREF memset(strName, 0 , sizeof(strName)); memset( str , 0 , sizeof( str )); memset(strSeri, 0 , sizeof(strSeri)); nNameNum = GetDlgItemTextA(hDlg, 1000 , strName, 201 ); if ( nNameNum && (nSeriNum = GetDlgItemTextA(hDlg, 1001 , strSeri, 201 ), code1 = GetCode1(strName, nNameNum), strspn(strSeri, "0123456789" ) = = strlen(strSeri)) / / 序列号是[ 0 - 9 ]组成 && nSeriNum < = 10 / / 序列号长度 < = 10 && (nSeri = Dec2Int(( int )strSeri)) ! = 0 && (Int2Hex(code1 ^ nSeri, ( int ) str , 16 ), GetCode1( str , 8 ) = = 0x13B88C77 ) ) { SetDlgItemTextA(hDlg, 1001 , "Success!" ); result = 1 ; } else { SetDlgItemTextA(hDlg, 1001 , "Wrong Serial!" ); result = 0 ; } return result; } |
Dec2Int() 是将字符串转成int
Int2Hex() 是将int转成16进制格式的字符串,且不带0x,以及字母为小写
相当于求解如下python脚本
1 2 3 4 5 6 | name = 'KCTF' # serial = '' a = int (serial) ^ GetCode(name) b = GetCode( hex (a)[: 2 ]) if (b = = 0x13B88C77 ) print ( 'Success!' ) |
因为已经给了一组正确的name/serial对,可以动态调试得到GetCode(hex(a)[:2]) == 0x13B88C77
一组解为a = 0x13B88C77
然后动态调试得到GetCode('KCTF') = 0x5ee54f4c
于是可以得到:
1 | serial = str ( 0x5ee54f4c ^ 0x52a1ed5a ) |
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
看原图
赞赏
雪币:
留言: