TypechoJoeTheme

霍雅的博客

登录
用户名
密码
/
注册
用户名
邮箱

2024蓝桥杯reverse逆向复现

2025-04-16
/
0 评论
/
55 阅读
/
正在检测是否收录...
04/16

1.rc4
题目提示rc4,可以猜测为rc4算法
分析主函数,一眼就可以看完
赋值一个字符串到Str
传了一个数组和数组长度和字符串还有个42到一个函数
剩下打印输出str
所以核心加密函数在sub_401005

点进去看还是进一步的传参

点进去看有很多256的特征,是标准的rc4算法,没有魔改

第一种方式
把数组提取出来
通过标准rc4解密代码解密

def rc4(key, data):
    S = list(range(256))
    j = 0

    # 初始化状态数组 S
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]  # 交换 S[i] 和 S[j]
        S[j]=S[j]
    i = j = 0
    output = []

    # 加密过程
    for byte in data:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]  # 交换 S[i] 和 S[j]
        K = S[(S[i] + S[j]) % 256]
        output.append(byte ^ K)  # 生成密钥流并加密数据

    return bytes(output)

# 示例使用
key = b"gamelab@" # 密钥
plaintext =[0xB6,0x42,0xB7,0xFC,0xF0,0xA2,0x5E,0xA9,0x3D,0x29,0x36,0x1F,0x54,0x29,0x72,0xA8,0x63,0x32,0xF2,0x44,0x8B,0x85,0xEC,0xD,0xAD,0x3F,0x93,0xA3,0x92,0x74,0x81,0x65,0x69,0xEC,0xE4,0x39,0x85,0xA9,0xCA,0xAF,0xB2,0xC6]

#plaintext=b""

# 解密(使用相同的函数)
decryptedtext = rc4(key, plaintext)    #

print(decryptedtext)

为什么gamelab@为秘钥呢其实靠猜也能猜出来
从代码分析,因为Str只参与了s盒的生成,
这也是rc4的一个特征
为什么判断他没有魔改呢
这种题,加密逻辑简单,其实都不用看有没有魔改
先用标准函数解一遍,解不出来再考虑魔改

第二章方法就是
仔细会看函数,函数并没有输入和比较功能
根据rc4的特点可以知道,加密和解密都是一个函数完成
所以函数存在自解密
一般像这种题,结尾没有比较或者没有输入都是函数存在自解密
所以直接在return下个断点
flag就出来了

欢乐时光
题目给了提示
flag被使用了算法分成若干个小块,每个块使用相同的加密解密方法,但是这个算法是对称加密,请将分析密文并还原。
说明是分组加密
分组加密的密码有TEA XTEA XXTEA AES DES一般ctf就出这几个
查看主函数

有什么drink cup应该就是tea系列的了
前面那三个不用管,没有参与到后续的加密
然后分析一下逻辑
read输入42个直接到buf
然后经过cry函数传了buf和v5 v5在上面是一个数组
下面是一个比较函数
比较buf是不是等于v6
点进去看像这种结果的tea家是xxtea
tea和xtea长得比较像,都是3行操作去加密

先不管有没有魔改,直接用标准解密去跑
经过前面的分析,buf和v6比较
说明v6是密文,v5是秘钥
除此之外,一般tea加密的秘钥都是4组
把密文和key复制进去

发现是解不出来的

回去看加密
其实做题做的多的,一眼就能看出来是轮速被魔改了

把他改成和题目一样的格式

运行一下flag就出来了

这种题属于是新生赛都放不过第二周的

朗读
赞(1)
版权属于:

霍雅的博客

本文链接:

https://huoya.work/bk/index.php/archives/474/(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月