攻防世界reversebox

本文介绍了攻防世界中关于reversebox的挑战,重点讲解了main函数的参数组成,包括argc、argv和envp。通过学习gdb脚本和分析题目提示,解题关键在于理解伪随机数生成并利用flag的特征进行爆破。作者分享了使用gdb脚本的解题方法,并探讨了其他可能的解题途径,如IDA脚本和模拟盒子数的生成。
摘要由CSDN通过智能技术生成

小知识点:

  • 一般来说,我们写main函数,就定义main(),它的参数部分看似没有,实际上,main函数也是有参数的,只是在我们写时省略了。

    main函数的参数由三部分组成,分别是argc(int型,表示命令行参数的个数)、argv[](char数组型,指向命令行的每一个命令参数)、envp[](char数组型,指向环境变量)。

    说明:argc包括程序本身,所以它大于等于1。argv以NULL结尾,且也包括程序本身,所以它的元素个数大于等于2。
    —摘自https://blog.csdn.net/smell201611010513/article/details/80130941

  • (unsigned_int8) 这是一个强制转换的符号,意思是强制转成一个字节大小。

  • gdb脚本的学习

gdb参考学习:https://www.xuebuyuan.com/3193223.html


解题点:找出摆放正确数组的盒子。(就是正确的数组罢了)

吐槽:

题目漏了给关键提示:

$ ./reverse_box ${FLAG}
95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a
flag格式:TWCTF{}

原题的提示,解题关键点。

涉及到一些知识点,一些没见过的操作等。

看到rand,发现只是伪随机数,把这些dump出来就行了。

根据flag的特征,TWCTF{}进行爆破。

emmm,查看给出的hint,要求输出的第一个是95,

因为对应的代码是输出的是%x 十六进制形式。

所以要爆破第一个95,那就好办了。

因为flag的格式第一个是TWCTF,第一个就是T,对应的是95,

找出内置的盒子就ojbk了。

使用gdb脚本,借鉴大佬的。

-PS:为什么想到会一定有一个对应的正确盒子?

因为想想,无论随机数是啥,输入正确flag都会输出对应那一条密码,

那么,很容易联想到,这是一个伪随机数,中间夹着一大段操作是寻找不同的盒子,

当flag正确,无论哪一个随机数都会对应正确盒子所在地,那么就很好解释了,也只是猜想,

反正没啥思路,就按这个做,结果是对的。(猜想有重复的话,就试试下一个,这样子)

emmm,明天再搞搞。–9.10

经过一段摸索,发现应该几种解法。

  • 一种是直接写IDA脚本提取出来,这种还没弄懂
  • 一种就是直接写脚本模拟盒子的数的生成,然后再一个一个去挑选,(这个比较好理解)
  • 一种就是上面说的gdb脚本了,这个脚本一开始肯定想不到了,因为学的太少了,先模仿,再学会。

理解的关键就是看懂流程。

在gdb中用define就可以写下面的脚本了,

也可以写在另一个文件中,用source引入即可。

set $i=0
set $total=256
while($i<$total)
  b *0x80485b4
  b *0x8048704
  run T
  set $i=$i+1
  set *(char*)($ebp-0xc)=$i
  continue
  if ($eax==0x95)
    print $i, $i
    x/256xb $esp+0x1c
    set $i=256
  end
  stop
end

cao的脚本,因为对gdb不是太熟悉,理解一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值