攻防世界 逆向 IgniteMe

攻防世界 逆向 IgniteMe

(原创)
原题如下:
在这里插入图片描述
下载文件:
在这里插入图片描述
运行exe程序。
在这里插入图片描述
我随便输入了一串,enter之后当场退出程序。我们来用IDA打开这个文件。
找到main函数,F5反编译。
在这里插入图片描述
第27行就是我们程序运行时一定要运行的一句代码。
输入的字符串就是v6,
根据14行的strcpy函数和15行的for语句可以知道前4个字符是“EIS{”。
接下来是26行的sub_4011C0函数,这个函数返回的直应该是“1”,也就是true。我们看sub_4011C0函数的伪代码。
在这里插入图片描述
得到v4=“GONDPHyGjPEKruv{{pj]X@rF”,上一个函数带入的参数是v6,也就是flag。 在sub_4011C0函数中就是参数*a1,下面的while语句将flag复制到了v8.。。。。。这样一步一步分析。
写出脚本:

import string
 
result = ''
tmp = ['0x0D', '0x13', '0x17', '0x11', '0x2', '0x1', '0x20', '0x1D',
       '0x0C', '0x2', '0x19', '0x2F', '0x17', '0x2B', '0x24', '0x1F',
       '0x1E', '0x16', '0x9', '0xF', '0x15', '0x27', '0x13', '0x26',
       '0x0A', '0x2F', '0x1E', '0x1A', '0x2D', '0x0C', '0x22', '0x4']
f = 0
r = ''
comp = 'GONDPHyGjPEKruv{{pj]X@rF'
s = string.printable
print(s)
for i in range(24):
    for x in s:
        j = x
        if 97 <= ord(j) <= 122:
            x = chr(ord(j) - 32)
            f = 1
        if f == 0 and 65 <= ord(j) <= 90:
            x = chr(ord(j) + 32)
        r = chr(int(tmp[i], 16) ^ (ord(x) ^ 0x55) + 72)
        f = 0
        if r == comp[i]:
            result += j
            break
print(result)

得到flag。
可能有大佬有更好的方法,多谢指点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值