BUUCTF [FlareOn4]IgniteMe

打开文件

文本文件给出了提示

文件没有加壳 直接拖入IDA

进入start函数

hFile = GetStdHandle(0xFFFFFFF6)调用GetStdHandle函数获取标准输入句柄

使用WriteFile函数向dword_403074)写入一段数据,长度为0x13字节。

继续跟进sub_401000函数

首先,通过调用sub_401000函数获取一个初始的v4值。

然后,使用一个for循环,从v1 - 1到0遍历byte_403078数组。在每次迭代中,它执行一个异或操作(^),将v4byte_403078[i]的值进行异或,并将结果存储在byte_403180[i]中。之后,更新v4的值为byte_403078[i],以便在下一次迭代中使用。

接下来我们进入sub_401000函数找v4的值

这里认识了一个新函数 _ROL4_函数是一个自定义的循环左移函数

__ROL4__(-2147024896, 4)-2147024896的二进制表示循环左移4位。这意味着最左边的4位(1000)会被移动到最右边,并与原来的数组合。因此,循环左移后的二进制表示变为0000 0000 0000 0000 0000 0000 1000 0000。但是这里循环左移四位后再右移一位,最终返回值是0x380004,也就是v4初值

编写解密脚本

# 定义编码后的标志数据
encode_flag000 = bytes([
    0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C,
    0x5D, 0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44, 0x6F, 0x6E,
    0x56, 0x09, 0x5F, 0x45, 0x47, 0x73, 0x26, 0x0A, 0x0D, 0x13,
    0x17, 0x48, 0x42, 0x01, 0x40, 0x4D, 0x0C, 0x02, 0x69, 0x00
])

# 初始值tmp
tmp = 0x380004

# 解码后的标志,初始化为全零的字节数组
flag = bytearray(40)  # 分配40个字节的空间

# 解码过程
for i in range(38, -1, -1):  # 从38到0,倒序遍历
    flag[i] = encode_flag000[i] ^ (tmp & 0xFF)  
    tmp = flag[i]

print("Decoded flag (hex):", flag.hex())

得到flag

hex值转换一下

得到flag{R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值