【ISCC 2025】区域赛Reverse

算法先锋·半月创作挑战赛 10w+人浏览 54人参与

faze

依然还是老规矩,先查壳

用 Die ,进行查壳

无壳,64位,放到 IDA 里,看主函数

可以看到 flag 就存储在 V9 

if ( (unsigned __int8)std::operator==<char>(v8, v9) )

处下断点

本地动调一下看到 flag

这道好像和校赛的一道re题一样,也是动调就出 flag 的

greeting

先查看是否有壳

引用了 PDB 调试符号文件,无壳 64位,IDA 打开,先看主函数

根据主函数,定位:sub_140001220 函数

分析 sub_140001220 函数,可以看到:xmmword_14001B390

获取地址:0x014001B390 ,读取 16 字节加密数据

0x5a + i 的值与字节进行异或

Exp:

from ida_bytes import *  # 🐍 IDA Python API:读取二进制字节



# 🎯 从指定地址读取 16 字节加密数据

encoded_bytes = list(get_bytes(0x014001B390, 16))



# 🔄 定义循环右移函数(8 位)

def rotate_right8(byte_val, shift):

    """

    🌪️ 对单字节进行 8 位循环右移

    :param byte_val: 原始字节值(0–255)

    :param shift: 移动位数

    """

    byte_val &= 0xFF

    shift %= 8

    return ((byte_val >> shift) | (byte_val << (8 - shift))) & 0xFF



# 🗝️ 解密主循环:先 ROR,再 XOR (key 0x5A + 索引)

for idx in range(len(encoded_bytes)):

    # 🚀 ROR:根据当前位置 idx % 5 决定移位

    encoded_bytes[idx] = rotate_right8(encoded_bytes[idx], idx % 5)

    # 🔑 XOR:与 (0x5A + idx) 异或

    encoded_bytes[idx] ^= (0x5A + idx)



# 🥳 将解密后的字节列表转换为字符串并打印

plaintext = "".join(map(chr, encoded_bytes))

print("🔓 解密结果:", plaintext)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值