-
-
[原创]CTF2019晋级赛Q2第一题分析(qwertyaa)
-
发表于: 2019-6-13 05:35 1929
-
结合IDA结果并手工分析try-catch块代码如下
int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // esi unsigned int v4; // kr00_4 unsigned int v6; // ecx unsigned __int8 v7; // [esp+10h] [ebp-3Ch] unsigned __int8 v8; // [esp+11h] [ebp-3Bh] unsigned __int8 v9; // [esp+12h] [ebp-3Ah] char v10; // [esp+13h] [ebp-39h] char v11; // [esp+14h] [ebp-38h] char v12; // [esp+15h] [ebp-37h] CPPEH_RECORD ms_exc; // [esp+34h] [ebp-18h] v3 = 0; printf("请输入序列号:\n"); scanf("%s", &v7); v4 = strlen((const char *)&v7); if ( v4 < 7 && v12 == '3' && v11 == '5' && v10 == '3' && v9 + v8 + v7 == 149 ) { v6 = 0; if ( v4 ) { do v3 = *(&v7 + v6++) + 16 * v3 - 48; while ( v6 < v4 ); } if ( v3 ) { try{ EAX=GetEip(); v3-=EAX; EAX/v3; printf("error!\n"); }catch(...){ //一些其他检验 printf("success!\n"); } } while ( 1 ) ; } printf("error\n"); return 0; }
GetEip()
处的EIP为401353
,它恰好满足前面的条件,同时字符串转换成整数后恰会引发除0异常,故这个数值就是FLAG.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: