CTF Reverse Igniteme.exe解题思路

CTF Reverse Igniteme.exe解题思路

一、文件描述

  1. 程序运行,提示输入flag;
    在这里插入图片描述
  2. 随便输入一串字符串后,程序终止退出;
    在这里插入图片描述

二、解题思路

  1. 主函数中,先是判断输入的序列长度是否在(4, 30)之间,然后判断flag的头部是否为“EIS{”,以及Str[28]的值是否为125,,当这三个条件都满足时,就进入sub_4011C0中。
    在这里插入图片描述
  2. 在sub_4011C0中,从Str[4]开始到倒数第二位进行字符的混淆。最关键的一步是在33行的Xor操作,最后Str2[i]='GONDPHyGjPEKruv{{pj]X@rF’。
  3. 这个逆向没什么难度,,根据Str2[i]可以得到v8[i]。
    在这里插入图片描述
    4.从26~31行是对v8[i]的混淆,通过v3=1或者v3=0对v8[i]加32或者减32,这里逆向思路也很简单,我们可以判断v8[i]的值属于哪个区间,具体步骤为:
if v8[i]+32 in range(97, 123):
	v8[i] += 32
elif v8[i]-32 in range(65, 91):
	v8[i] -= 32
else:
    v8[i] = v8[i]
  1. 所以整体的逆向脚本为:
import numpy as np
string = 'GONDPHyGjPEKruv{{pj]X@rF'
word = [0x0D, 0x13, 0x17, 0x11, 0x02, 0x01, 0x20, 0x1D, 0x0C, 0x02, 0x19, 0x2F, \
       0x17, 0x2B, 0x24, 0x1F, 0x1E, 0x16, 0x09, 0x0F, 0x15, 0x27, 0x13, 0x26, 0x0A, \
       0x2F, 0x1E, 0x1A, 0x2D, 0x0C, 0x22, 0x04]
string = list(string)
word = list(word)
str = np.zeros(24)
for i in range(24):
    tmp = ord(string[i]) ^ ord(chr(word[i]))
    tmp -= 72
    tmp ^= 0x55
    if tmp+32 in range(97,123):
        v8 = tmp+32
    elif tmp-32 in range(65, 91):
        v8 = tmp - 32
    else:
        v8 = tmp
    str[i] = v8
flag = ''
for i in str:
    flag += (chr(int(i)))
print('EIS{'+flag+'}')
  1. 代码拙劣,,看结果就好,,,
    在这里插入图片描述
  2. OD中验证下结果,flag正确没错咯!
    在这里插入图片描述
  3. FLAG:EIS{wadx_tdgk_aihc_ihkn_pjlm}
  4. 逆向小白,,纯属记录下解题思路,,持续更新中哦~
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值