首页
社区
课程
招聘
[原创]CTF2019晋级赛Q2第一题分析(qwertyaa)
2019-6-13 05:35 1451

[原创]CTF2019晋级赛Q2第一题分析(qwertyaa)

2019-6-13 05:35
1451

结合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.


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回