Author:share
这次没有打好,吸取了些教训
1.DontDebugMe
一道签到题

打开发现有个反调试,然后通过复杂的计算,算出key进行加密,加密逻辑是先加上key的高八位,在异或上低八位.
key直接动调出来就行了,这里是俩个字节进行加密的
exp:
v=[ 0xa9e9,0xa7f8,0xa2f9,0xd620,0xd69a,0xd9c8,0xd399,0x85cb,0xd29b,0xd5c7,0x8496,0xd4c9,0xd89a,0xd7ca,0xd59c,0x85c8,0xd597,0x859e,0xd49c,0x6dca, ]
key=[0x685,0xEE20]
for i in range(len(v)):
v[i]^=key[1]
v[i]-=key[0]
for i in range(len(v)):
print(chr(v[i]&0xff)+chr(v[i]>>8),end='')
2.BasicLoader

这题动调的时候发现了反调试,直接查看发现了这是修改了值,创建了另外一个进程来进行加密,直接dump出来加密程序

这里来到了第二部分,这里跟第一部分类似,是对v9进行rc4加密,然后当作函数来校验输入的对错,直接将加密后的数据写入二进制文件

这里就是简单的一个异或
exp:
v = [
0x20014077,
0x770A1073,
0x7C0B4320,
0x73524472,
0x73501128,
0x20564477,
0x77041321,
0x72524721
]
key=0x44332211
for i in range(len(v)):
v[i]^=key
for i in range(len(v)):
for j in range(4):
print(chr((v[i]>>8*j)&0xff),end='')
3.ez_rust
比赛的时候没有时间去做了,后面复现了一下
这是一道rust语言逆向,输入时用文件来完成的

这里是将前四位当作密钥来初始化rc4的,然后进行rc4加密,猜测是flag头的前四位DASC

这里使用了salsa20这个加密跟rc4一样是对称加密

这里的密钥是使用了rc4初始的s盒,这里拼接到最后的八位是nonce,然后进行加密
使用idapython,动调计算数密文后在进行rc4解密得到最后的flag

提取出密文
exp:
def rc4(key, data):
if isinstance(key, str):
key = key.encode('utf-8')
if isinstance(data, str):
data = data.encode('utf-8')
S = list(range(256))
j = 0
for i in range(256):
j = (j + S[i] + key[i % len(key)]) % 256
S[i], S[j] = S[j], S[i]
i = j = 0
result = []
for byte in data:
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
# 与密钥流进行异或操作
result.append(S[(S[i] + S[j]) % 256])
return result
# 示例用法
if __name__ == "__main__":
key = 'DASC'
# 明文
plaintext =[ 0xB5, 0x46, 0x94, 0x60, 0x4A, 0x85, 0x5C, 0xFF, 0xBA, 0x0E,
0x22, 0xDA, 0x65, 0x2B, 0xB4, 0xEB, 0x37, 0xF4, 0x61, 0xC7,
0x76, 0x76, 0x79, 0x03, 0x07, 0xA1, 0x36, 0xEF, 0x0A, 0xCD,
0x26, 0xA4, 0x1D, 0x26, 0x7D, 0x0C, 0x34, 0x4C, 0x0B, 0xA5,
0x97,]
a=[]
ciphertext = rc4(key, plaintext)
for i in range(len(plaintext)):
a.append((plaintext[i]^ciphertext[i])&0xff)
print(bytes(a))
还需要努力✊