Buuoj reverse1

逆向题目

题目在这https://buuoj.cn/challenges#reverse1

1.  首先,就是直接调出字符串界面,然后找到里面含flag的任意字符串点击就完事了,就下面这样!

 

2. 然后因为我当时直接开了伪代码做的,所以……我就按我的理解解释下为什么伪代码是这样的把

3. 点完任意一个带flag的字符串以后再点击会跳转到这个界面

 

4. 顺带认识一下吧,第一个a的就是上面这个界面,中间那个是伪代码,最后一个b的就是你们的字符串界面

 

5. 然后我缩放了下窗口,就右键fit window,可以看到这段代码是嵌了个循环,不过我们现在还不太清楚这里这个循环是干啥的,所以先找

 

6. 然后我最初是直接把hello_world当flag输入了,然后显示错了…………所以考虑加密的问题,然后看下有关于str2有关的语句

 

7. 通过对上图的分析我们知道了str2的首地址被赋到了rcx里,然后那个movsx指令是用来将str2字符串里的数据和o作比较的,然后盲猜这里应该是循环比对,因为我们可以搜搜我划了黄色的区域看看!

 

8. 那么我们继续分析下来

 

9. 因为[rbp+130h+var_12C]的初始值是0,指的是这个地址上的值为0,那么下面就可以翻译成找一个将字符串第一个字符放入到eax里(不要急,后面会证明这个表示的将第n个字符放入eax里,只是现在没有那么多资料)

 

10. 然后就是分析上面那个下来以后的值了,那么这一段我们可以可以看出应该是一个if判断了表示的意思应该是存储在eax里的字符是否是’o’,这里其实没必要想寄存器的变化然后想是正确跳转哪个指令,我觉得那样会把问题复杂化,我们只需要知道这些判断完会导致下面的两种情况,然后我们看看和str2相关的指令

 

 

11. 然后我们可以看到上面的操作,mov指令把0放入了一个数组里………….我不知道这里会不会有人直接懵逼,其实没必要紧张,即便你不记得rcx和rax表示的什么也没关系,我们可以简单判断一下,rcx和rax两个必然是地址,在哪先没必要管,我们先判断下,只要找到rcx和rax最近赋值的地方,我们必然可以理解这个mov在干啥,所以直接点击rcx和rax看看他们被赋了什么

 

    然后就可以得到左边玩意,得到了就好办了,根据我们前面的分析可以得出这里rax应该是0,rcx是str2的地址,所以这里的意思就是修改str2第一个字符为0

 

12. 综上这些表示汇编语言表示的就是str2第一个字符是否是o如果是o,则将其改成0

13. 然后我们接着看,看最后一个字符框

 

14. 然后我们分析下这个通过简单的分析,我们可以知道这里的语句可以翻译成将[rbp+130h+var_12C]上的值加上1(因为这真的很好看,没啥好解释的),那么我们所有的线索就都串在了一起,也就是[rbp+130h+var_12C]可以表示为n,,然后你就可以顺着我前面的分析,只要把第一个字符换成第n个字符就完事了,我就不赘述了

 

15. 最后回到可以看出这实际上就是说的检验下[rbp+130h+var_12C]有没有超过字符串的长度了,自此,基本一整个程序加密的逻辑都盘清楚了

当然还有最近的输入的问题,不过这道题输出真没啥好说的,不会分析的话可以看我前面写的,

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cjz-lxg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值