[第五空间]re nop题目详解

27 篇文章 0 订阅
[第五空间]nop

第一次写这种题,看网上其他大佬的代码处理有点晕,这里提供一种不同的思路(xky太强了)

ida打开,发现f5反编译的代码太诡异,直接输入完东西后就跳地址,应该是用了花指令什么的来混淆,所以直接看汇编代码

在这里插入图片描述

我们从最开的输入一步步分析,

这里OFFSET是将数值回送变量或标号的偏移地址值,所以意味着我们这里是要输入数字的(从%d也可以看出)

然后把我们的输入给了number(这个number是我自己改的,方便看)

然后按照程序顺序来看,

[(D:\markdown\文件\图片\7.8.2.png)]

number给了eax,eax自加一,然后跳到loc_80486F5,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30BypL69-1594191301689)(D:\markdown\文件\图片\7.8.3.png)]

然后又把eax给了number(就是相当于number自加一,而eax相当于一个中间变量),接着执行sub_804857B函数,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ppJ8lX6D-1594191301692)(D:\markdown\文件\图片\7.8.5.png)]

由于sub_804857B里面是仅仅对eax进行的操作,并没有把eax给了number,而且后面的eax后来又再次被number赋值,所以对程序没啥影响,直接略过(后来才知道是反调试函数)

再往下还是number给eax,eax++,跳转到loc_8048701

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-14T8QyBS-1594191301694)(D:\markdown\文件\图片\7.8.4.png)]

这里又把eax给了number,加上之间的,number现在已经加了二,

由于sub_80485C4(这张图里面有三处)里面是仅仅对eax进行的操作,并没有把eax给了number,而且后面的eax后来又再次被number赋值,同之前的那个函数一样,对程序没有影响(后来才知道是反调试函数)

再往下分析,就是eax+0x0CCCCCCCC,这样从最开始,刚开始输入的number就成了

number=number+2+0x0CCCCCCCC

然后再次把number给了eax,之后调用sub_8048753,这个数最后一个函数,应该是到了判断我们的输入的地方了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dkH8gMBN-1594191301695)(D:\markdown\文件\图片\7.8.6.png)]

这里先把number给了eax,然后执行sub_8048691函数,之后eax++,再执行一遍sub_8048691,然后就到判断对错的地方了

蹊跷的是,这里程序是直接跳到错误地方,无论你输入什么也是错误,可以从文本模式看出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xbVepEmP-1594191301696)(D:\markdown\文件\图片\7.8.7.png)]

然后根据这个题目nop就想到:可能是sub_8048691执行了某些操作吧这个08048765的数据给nop了,

由于执行了两遍sub_8048691,我们只需要让第一次的nop掉08048764,第二次nop掉08048765的就行了

进入这个函数看看,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OqSaLeEV-1594191301697)(D:\markdown\文件\图片\7.8.8.png)]

补充知识点:1.nop的机械码是0x90

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M48cMAS0-1594191301698)(D:\markdown\文件\图片\7.8.9.png)]

通俗点讲,ptr就是指向的整个程序的内容,然后这里就把ptr[eax]的位置的内容变成了nop,验证了我们上面的猜想

那么我们就得到这样一个式子
n u m b e r + 2 + 0 x C C C C C C C C = 0 x 08048764 number+2+0xCCCCCCCC=0x08048764 number+2+0xCCCCCCCC=0x08048764
由于这里涉及到溢出(0xCCCCCCCC怎么也比0x0804848764),所以我们不能按正常的加减法来算,得这样算
0 x f f f f f f f f − ( 0 x c c c c c c c c − 0 x 08048765 ) − 2 0xffffffff-(0xcccccccc-0x08048765)-2 0xffffffff(0xcccccccc0x08048765)2
得到

993507990

常的加减法来算,得这样算
0 x f f f f f f f f − ( 0 x c c c c c c c c − 0 x 08048765 ) − 2 0xffffffff-(0xcccccccc-0x08048765)-2 0xffffffff(0xcccccccc0x08048765)2
得到:993507990

验证是正确的,所以flag为:flag{993507990}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值