2020 "第五空间"智能安全大赛 Re nop

Posted mayfly-nymph

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020 "第五空间"智能安全大赛 Re nop相关的知识,希望对你有一定的参考价值。

测试文件:https://wwa.lanzous.com/is4hte2ulfc

 

代码处理

 技术图片

这道题是花指令相关题目,利用int 80h做中断。

首先将包含int 80h中断的sub_804857Bsub_80485C4函数和反调试函数sub_804865B全部nop掉。

接着,将

push 地址
...
pop ebx
jmp ebx

这种形式的代码,都修改为

jmp 地址

这样在反编译后能够看到跳转的函数

void __cdecl main(int a1, char **a2)
{
  char *v2; // eax
  int savedregs; // [esp+8h] [ebp+0h]

  v2 = *a2;
  puts("input your flag");
  __isoc99_scanf("%d", &dword_804A038);
  ++dword_804A038;
  ++dword_804A038;
  dword_804A038 -= 0x33333334;
  ++dword_804A038;
  sub_8048751((int)&savedregs);
}

 

代码分析

第一部分

第9~13行代码,对输入num+3-0x33333334

 

第二部分

进入sub_8048751函数

int __usercall sub_8048753@<eax>(int a1@<ebp>)
{
  _BYTE *v1; // eax
  int result; // eax
  int v3; // ecx

  v1 = sub_8048691((_BYTE *)dword_804A038);
  sub_8048691(v1 + 1);
  puts("Wrong!");
  result = 0;
  v3 = *(_DWORD *)(a1 - 4);
  return result;
}

打开sub_8048691函数

_BYTE *__usercall sub_8048691@<eax>(_BYTE *result@<eax>)
{
  *result = 0x90u;
  return result;
}

这个函数实际上就是在对num地址进行nop(0x90)操作,转到前面的汇编代码

技术图片

我们可以看到,这条指令是直接跳转到Wrong处,那么我们只需要将这个跳转指令(两个字节)nop掉,那么就能输出Right。

因此num+3-0x33333334=0x8048965需要成立,则num=993507990,这样就得到了flag。

 

get flag!

flag{993507990}

以上是关于2020 "第五空间"智能安全大赛 Re nop的主要内容,如果未能解决你的问题,请参考以下文章

第五空间智能安全大赛-web

“第五空间”智能安全大赛-Web-writeup

“网络安全智能防御新技术”报告受欢迎

自动驾驶报告——"智能"与"网联"融合发展成行业大势

2019-2020 191316《信息安全专业导论》第七周学习总结

2019-2020-1学期20192402《网络空间安全专业导论》第七周学习总结