这道题的考点是RC4加密
我们要获得key和明文,来得到flag
我觉得这道题最大的难点就是脚本这一关,我卡了许久:
前面IDA查壳什么的,我就不多赘述了
直接进入IDA操作界面、
你运行一次程序,试过就知道,开局的这个error和nicejob就是最后程序给我们的
我们跟进看一下
这道题主体没什么大的难度,就让你认识下RC4加密
最后这个12345678就是S表
而明文
肯定在最后比对里面去找
说了那么多 ,接下来这个脚本真是让我头疼,这个编码问题
#coding=gbk
import base64
from Crypto.Cipher import ARC4
def rc4_decrypt(data, key): # RC4解密函数
data = base64.b64decode(data)
key = bytes(key, encoding='utf-8')
enc = ARC4.new(key)
res = enc.decrypt(data)
res = str(res, 'utf-8')
return res
key = "12345678abcdefghijklmnopqrspxyz" # Str
byte_14013B000 = [0x9E, 0xE7, 0x30, 0x5F, 0xA7, 0x01, 0xA6, 0x53, 0x59, 0x1B, 0x0A, 0x20, 0xF1, 0x73, 0xD1, 0x0E, 0xAB,
0x09, 0x84, 0x0E, 0x8D, 0x2B]
tmp = [0] * len(byte_14013B000)
for i in range(len(byte_14013B000)):
tmp[i] = byte_14013B000[i] ^ 0x22
data = base64.b64encode(bytes(tmp)).decode() # 这里注意python3的解码编码方式与python2不同,要加个decode()方法
decrypt_data = rc4_decrypt(data, key) # RC4解密
print('答案:', decrypt_data)
不使用
这个gbk就是错的,我搞了大半天,真难受