gfsj(getit)

getit

1.下载附件并查壳
在这里插入图片描述
elf文件且是64位
2.用ida64打开,找到main函数f5,开始分析
在这里插入图片描述

(/tmp是linux临时文件夹,运行完之后就被清理了。)

可以看到先判断v5是否大于s存储字符串的长度,然后通过运算,最后将得到的flag写入文件
两种方法,
1.动态调试
思路:在flag文件未被删除前,查看他。
1.我们向下追踪,追踪到for循环的位置,因为,flag是在这里存入文件的,所以,我们可以在内存中找到正要存储的字符串
我们将鼠标指向strlen(),在下面可以看到汇编所在的地址,然后我们根据大概的地址去看汇编代码
在这里插入图片描述
在这里插入图片描述

可以看到这是调用strlen()函数的汇编指令

我们通过第一个图片,可以知道经过for()的判断条件后,还要进行一步fseek函数,所以,根据汇编代码,可以确定jnb loc_4008B5就是fseek()函数,那么,mov eax,[rbp+var_3C]肯定就是最后要得到的flag了
2.下面就要去linux调试它了
首先

1.gdb -q 文件名 //让其在gdb里运行
2.b *0x400832  //下断点
3.r //运行

在这里插入图片描述
我这里用到了gdb的插件peda,这个插件可以强化视觉效果,可以更加清楚的显示堆栈,内存,寄存机的情况,想去下载的小伙伴,可以点这里
SharifCTF{b70c59275fcfa8aebf2d5911223c6589}

2.静态分析
脚本如下:

s='c61b68366edeb7bdce3c6820314b7498'
v5=0
flag=''
while v5<len(s):
    if v5 & 1:
        v3=1
    else:
        v3=-1
    flag+=chr(ord(s[v5])+v3)
    v5+=1
print(flag)

运行结果:
在这里插入图片描述
再加一个外壳就行。

总结:
1.动态调试的要找好断点,我也是试了几次才找到的
2.静态分析的脚本用python更快

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值