reverse_box_wp

reverse_box

这是一道攻防世界的逆向进阶中的一道题目。攻防世界里少给了一些条件,道中一开始看的时候,就非常懵逼,然后找到原题后看到提示:

挑战描述
$ ./reverse_box $ {FLAG}
95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a reverse_box.7z

这个二进制文件的用法是把你输入的第二个命令行参数当flag,然后程序给出一堆十六进制的数。
但是如果输入的第二个命令行参数相同,程序输出的十六进制数也可能不相同。
除去查壳等一系列工作,将文件拖入IDA中进行分析,

发现了相同输入但是不同输出的原因:程序里有一个随机函数,以时间作为种子:

然后通过这个随机数构造了一个数组,然后按照输入的flag,对应输出数组中的值.

gdb写脚本爆破

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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