jctf2014RE200

来源:互联网 发布:python 循环定时器 编辑:程序博客网 时间:2024/06/11 03:38

拿到题以后放到IDA和OD中都没什么卵用,于是上网搜了一下,发现是PE头有问题,需要修改,于是放入Winhex中:这里写图片描述
DOS头的最后一个参数应该是指向PE头的位移,所以应该是E8,而PE头的起始位应该是50 45 00 00。修改以后保存,放入OD中,搜素字符串:
这里写图片描述
可以看到有个success应该就是成功的跳转,于是回车跳到那段程序,发现程序好长。。。汇编比较菜,果断放入IDA,搜素success字符串,F5。
这里写图片描述
可以发现,要求输入9个数字,分别为v30-v38。
要求:

  1. v31 * v32 * v30 / 11 ==106
  2. (v31 ^ v30) == v32 - 4
  3. (v32 + v31+ v30)%100 ==34
  4. v33==80
  5. v34==94
  6. v35==98

    后面的代码好像没什么用,第6-9个数应该是随意输入。

Python代码:

for i in range(10000):    for j in range(10000):        k = (i^j)+4        if i*j*k//11==106 and (i+j+k)%100==34:            print(i,j,k)

输出:

6 13 15
6 15 13
13 6 15
13 15 6
15 6 13
15 13 6

就是6,13,15三个数的排列组合,于是一个个尝试一下:
这里写图片描述

得到最后flag。

原创粉丝点击