这是一道RC4解密的题目
RC4 是一种对称加密算法。它的加密过程是:将明文与密钥流逐字节进行异或运算,从而得到密文;反过来,密文与相同的密钥流再次逐字节异或,就可以还原出明文。
RC4 的整个流程可以分成两个主要步骤:
-
初始化阶段:先初始化两个长度为 256 的数组------状态向量 S 和临时向量 T。其中,S 初始为 0 到 255 的递增序列,T 则根据输入的密钥循环填充。
-
密钥流生成阶段:通过对 S 数组进行打乱(即密钥调度算法 KSA),生成伪随机的密钥流。随后,这个密钥流与明文按字节异或,完成加密;解密时,则用相同的密钥流与密文异或。
使用了 IDA 对可执行文件进行静态分析。首先,通过查看伪代码定位到 main 函数,将其作为程序的入口点。接着,从 main 函数出发,进一步追踪了两个关键的子函数:一个负责初始化向量 T,另一个负责执行实际的加密过程。



最后解密脚本如下:
python
my_data=[0x9E,0xE7,0x30,0x5F,0xA7,0x01,0xA6,0x53,0x59,0x1B,0x0A,0x20,0xF1,0x73,0xD1,0x0E,0xAB,0x09,0x84,0x0E,0x8D,0x2B]
cipher_text=""
cipher_arr=[]
cipher_text2=""
for i in range(len(my_data)):
cipher_text+=str(hex(my_data[i]^0x22))[2:]
cipher_text2+=chr(my_data[i]^0x22)
print(str(hex(my_data[i]^0x22))[2:])
cipher_arr.append(my_data[i]^0x22)
# 算出密文
print(cipher_text)
print(cipher_text2)
# 计算key
my_key="12345678abcdefghijklmnopqrspxyz"
v9=[]
for i in range(256):
v9.append(i)
v7=0
v6=0
for j in range(256):
v8=v9[j]
v7=(ord(my_key[v6%len(my_key)])+v8+v7)%256
v9[j]=v9[v7]
v9[v7]=v8
v6=v6+1
pass
# 这样计算出了v9
i=0
j=0
plain_arr=[]
plain_text=""
print(v9)
for r in range(len(cipher_arr)):
i=i+1
v7=v9[i]
j = (v7 + j)%256
v8 = v9[j]
v9[i] = v8
v9[j] = v7
plain_arr.append(cipher_arr[i-1]^(v9[(v8+v7)%256]))
plain_text=plain_text+chr(plain_arr[-1])
print(plain_text)