jarvis oj reverse 病毒数据分析 writeup

本文档分析了一道涉及病毒数据分析的题目,该病毒在通过反debug检查和判断程序位置后,使用当前时间作为srand种子。接着,它在注册表中查找docx文件并进行加密。加密过程包括生成随机数、填充缓冲区、使用TEA加密并异或操作。关键在于确定srand的精确seed,即1465461209,从而实现解密。提供了解密代码详述。
摘要由CSDN通过智能技术生成

这题之前做过,但是做到一半就放弃了,现在又回来做一下

首先这题其实还是有点难度的

我们先来分析下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('<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值