数信杯
re_ds001
拿到程序第一件事就是先分析,发现是64位的exe,并且在压缩包里还要有个enf文件,猜测后续会用到。
才开始进去后挺难找到主要函数加密都干了什么的,是我菜的原因吧,所有我直接丁真到base64的加密函数,一步一步的网上引用ctrl+x,最后还真让我找到了。
code就是我们主要分析的函数
主要加密就是这个框圈的函数,导开之后大概就是,把那个enf文件,给打开喽,然后给他做一个base64加密。
跟进后发现,在base后,在画红框的函数里面,又进行了一个简单的加密。
所有,这题的思路就有了,就先把文件打开,进行这个sub_140012240的解密后,直接base64解密就可以得到flag了。
import base64
def decrypt(data):
return bytes([((b >> 3) | (b << 5 & 0xFF)) for b in data])
with open("en_file_data.enf", "rb") as f:
encrypted = f.read()
decrypted = decrypt(encrypted)
with open("1.txt", "wb") as f:
f.write(decrypted)
re_ds002
re_ds002与001大部分都是一样的除了加密方式不一样,re_ds002用到的是rc4加密
通过这里的函数特征发现的,但是问题出现了,有了密文也就是那个文件,但是没有哦找到key
对比了一下rc4的源码,发现这里的v6对应的就是key,但是静态看不出来值是多少,所有这里就得使用到动调了。
key:6A1D4E2a2276Y7JL
可以利用rc4的特征直接运行密文让程序自行解密。不过好像是题目问题,只能解出来不对,但是思路我感觉是对的,解出来乱码就很难受。