-
-
[原创]CTF2019Q2T1 破文
-
发表于: 2019-6-12 14:45 2191
-
上IDA,定位到主函数:
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。
.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 2653
- [原创]2019CTFQ2T6 2624
- [原创]CTF2019Q2T1 破文 2192
- [求助]WIN10 X64 下用户如何权限配置? 3252
看原图
赞赏
雪币:
留言: