-
-
[原创]CTF2019Q2T1 破文
-
发表于: 2019-6-12 14:45 2316
-
上IDA,定位到主函数:
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 34 35 | int __cdecl main( int argc, const char **argv, const char **envp) { int v3; // esi unsigned int v4; // kr00_4 unsigned int v6; // ecx char szData[7]; // [esp+10h] [ebp-3Ch] CPPEH_RECORD ms_exc; // [esp+34h] [ebp-18h] v3 = 0; Printf(( int ) "请输入序列号:\n" ); sub_4013D0( "%s" , szData); v4 = strlen (szData); if ( v4 < 7 && szData[5] == '3' && szData[4] == '5' && szData[3] == '3' && (unsigned __int8 )szData[2] + (unsigned __int8 )szData[1] + (unsigned __int8 )szData[0] == 149 ) { v6 = 0; if ( v4 ) { do v3 = (unsigned __int8 )szData[v6++] + 16 * v3 - '0' ; while ( v6 < v4 ); } ms_exc.registration.TryLevel = 0; if ( v3 ) JUMPOUT(*(_DWORD *)&byte_401353); Printf(( int ) "error!\n" ); while ( 1 ) ; } Printf(( int ) "error\n" ); return 0; } |
很明显答案 ***353。 *的和未149. 那么理论值为 0 1 2 3 4 5 和为5。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | .text:00401342 ; __try { // __except at loc_401379 .text:00401342 mov [ebp+ms_exc.registration.TryLevel], 0 .text:00401349 test esi, esi .text:0040134B jz short loc_40135D .text:0040134D push eax .text:0040134E call loc_401354 .text:0040134E ; --------------------------------------------------------------------------- .text:00401353 byte_401353 db 0EBh .text:00401354 ; --------------------------------------------------------------------------- .text:00401354 .text:00401354 loc_401354: ; DATA XREF: _main+EE↑o .text:00401354 pop eax .text:00401355 sub eax, 0 .text:00401358 sub esi, eax .text:0040135A div esi .text:0040135C pop eax |
以上代码有点变异。 执行完成后直接跳转到错误输出处。在下边不远处为sucess值。
唯一可能在div 指令进入异常处理。那么eax = esi。eax = 401353。
所以答案 401353
赞赏
他的文章
- [原创] CTF2019-3-07 web svr wp 2789
- [原创]2019CTFQ2T6 2783
- [原创]CTF2019Q2T1 破文 2317
- [求助]WIN10 X64 下用户如何权限配置? 3509
赞赏
雪币:
留言: