encode
写脚本时候发现了应该就是一个 base64 和 RC4 结合
base64
rc4的初始化S盒
rc4的异或加密
好久没有做题,有点忘记了,直接动调
可以把初始 S盒调出来,后面解总是出乱码,也是看了好久的wp才知道v6后面要赋值的字符串是十六进制bytes组成的
而IDA扫出来的这个字符串有点问题,它是加密后的hex,但是像01这种的它直接变成了1,所以bytes.fromhex的时候会出错,位数都对不上
这个之后也要问问
然后贴一个大佬的脚本吧,感觉脚本都学了很多
key0 = b'Flag{This_a_Flag}' #密钥
c = bytes.fromhex('E8D8BD91871A010E560F53F4889682F961420AF2AB08FED7ACFD5E00') #加密后的字符串
v9 = [i for i in range(256)]
v8 = (key0 * 50)[:256]
j = 0
for i in range(256):
j = (v9[i] + j + v8[i]) % 256
v9[i], v9[j] = v9[j], v9[i]
tab = [0] * 28
i, j = 0, 0
for t in range(28):
i = (i + 1) % 256
j = (v9[i] + j) % 256
v9[i], v9[j] = v9[j], v9[i]
tab[t] = v9[(v9[i] + v9[j]) % 256]
c = [tab[i] ^ v for i, v in enumerate(c)]
print(c)
v5 = "Flag{This_a_Flag}"
str_values = [35, 21, 37, 83, 8, 26, 89, 56, 18, 106, 57, 49, 39, 91, 11, 19, 19, 8, 92, 51, 11, 53, 97, 1, 81, 31, 16, 92]
result = []
for i in range(len(str_values)):
result.append(chr(str_values[i] ^ ord(v5[i % len(v5)])))
print(''.join(result))
再 base 解密就可以了
问题:这个 v6 是如何看出是十六进制字节组成的,又如何还原成正常 1–>01,不去0的形式
想自己来提取数据,还是有一点问题
data=[0x38443845,0x31394442,0x41313738,0x36354531,0x46333546,0x39383834]
array=[]
for i in range(0,len(data),1):
array.append((data[i]&0xff))
array.append((data[i]>>8)&0xff)
array.append((data[i]>>16)&0xff)
array.append((data[i] >> 24) & 0xff)
print(len(array))
for i in range(24):
print(chr(array[i]),end='')
#E8D8BD91871A1E56F53F4889
“D:\ctf附件2\BJD_hamburger_competition\BJD_hamburger_competition\BJD hamburger competition_Data\Managed\Assembly-CSharp.dll”
丢 dnspy
找到主要位置
应该是先 Sha1 再 Md5 加密了,解密反过来
之前做过还有点印象,还是要细心一点
JustRe
额,就这