[Buuctf] reverse2

在这里插入图片描述

这个文件不是exe文件

1.查壳

在这里插入图片描述
64位ELF文件
ELF文件是Linux操作系统上的标准可执行文件格式。

2.用64位IDA打开

在这里插入图片描述
OK
找到main函数,F5查看伪代码
在这里插入图片描述
发现flag

  if ( !strcmp(&flag, s2) )
    return puts("this is the right flag!");

双击flag查看里面的内容
在这里插入图片描述
不要忘了7Bh,它对应ascii码表的{
flag{hacking_for_fun}
再往上分析伪代码,可以看出s2是我们输入的字符串
可以看出flag被修改过

for ( i = 0; i <= strlen(&flag); ++i )
    {
      if ( *(&flag + i) == 105 || *(&flag + i) == 114 )
        *(&flag + i) = 49;
    }

105对应ascii码的i,114对应ascii的r,49对应ascii的1
破案了,原来的flag中的ir被替换为了1
我们写一个简单的脚本

flag='{hacking_for_fun}'
flag=list(flag)
for i in range(0,len(flag)):
    if (ord(flag[i])==105) or ord(flag[i])==114:
        flag[i]='1'
flagnew=''
for i in range(0,len(flag)):
    flagnew+=flag[i]
print(flagnew)
>>>{hack1ng_fo1_fun}

最终的flag是
flag{hack1ng_fo1_fun}

补充

strcmp函数
比较两个字符串,返回一个整数

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值