这题之前做过,但是做到一半就放弃了,现在又回来做一下
首先这题其实还是有点难度的
我们先来分析下main函数部分,首先它做了反debug判断,获取父进程信息
其次它还判断了程序所在位置,过了这几个判断之后,获取当前时间作为seed给srand
然后在注册表里面拿到文档所在的目录
接着在目录里面搜索docx后缀的文件,将其加密之后发送出去
在加密那里,它做了几件事
1. 生成8字节随机数
2. new了一个缓冲区,首先往里面放了文件的大小,然后在里面填了bufFileContent这个字符串,之后往里面塞文件内容,然后在最后加上bufFileName,然后在加上文件名
3. 之后在加密函数里面,先拿缓冲区前8个字节,用tea加密,加密的key可以从数据包中拿到,加密完之后,xor一下生成的8字节随机数
4. 之后再拿缓冲区8个字节,异或前一个8字节tea加密之后的数据,然后用tea加密这个数据,然后再异或前8个没加密字节,之后一直循环这样 (感觉我也说不清楚….还是自己调试或者看下我下面放出来的代码吧
有了加密的过程,逆推就得到未加密的数据
这里一个关键是,如何得到srand的seed?
因为这个时间可以在数据包中获取,但是这个是不准的,我试了一下,发现准确的seed是 1465461209
下面就是解密的代码
import struct
import binascii
def rev(x):
return struct.unpack('>L',struct.pack('<