攻防世界--->地穴

前言:学习笔记。

下载 解压 查壳。

64位ida打开。

进入主函数。

很容易得知,这是一个RC4加密。

(题外话)

在reverse中,RC4考点,不会很难。

reverse中RC4关键点就是,抓住异或。

一般解这种题,都可以在xor处下断点去,看看加密后的值。

此题,在RC4加密完后,与0x22进行异或与密文进行对比。

先得到与0x22异或前的数据。(flag_RC4_encode)

编写RC4解密脚本:


""" 未魔改的RC4,逆向推导明文"""
def rc4(key, data):
    S = list(range(256))
    j = 0
    out = []

    # Key-scheduling algorithm (KSA)
    for i in range(256):
        j = (j + S[i] + key[i % len(key)]) % 256
        S[i], S[j] = S[j], S[i]

    # Pseudo-random generation algorithm (PRGA)
    i = j = 0
    for char in data:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        k = S[(S[i] + S[j]) % 256]
        out.append(char ^ k)

    return bytes(out)

key = b'12345678abcdefghijklmnopqrspxyz' # RC4_Key值。
ciphertext = bytes.fromhex('BCC5127D852384717B392802D351F32C892BA62CAF09') # RC4加密后的值。
plaintext = rc4(key, ciphertext)
print(f"明文:{plaintext.decode()}") # 解密。

在线工具也可以。

flag{nice_to_meet_you}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值