必威体育Betway必威体育官网
当前位置:首页 > IT技术

宏病毒的研究与实例分析03——宏病毒处理篇

时间:2019-10-13 13:12:20来源:IT技术作者:seo实验室小编阅读:63次「手机版」
 

宏病毒

文章目录

    • 宏病毒处理思路
      • 破坏宏标志
      • 宏清除脚本
      • 手工清理宏(针对* .DOCM和* .XLSM文档)
      • 替换宏代码
    • 说明

在前一章我们解析了宏病毒的二进制格式,本篇紧跟上文,利用宏病毒的二进制格式清除宏病毒。

宏病毒处理思路

破坏宏标志

在解析OLE文件时,我们介绍过Directory,其中其偏移0x42H这个字节的表示DirectoryEntry的类型Type。0为非法,1为目录(storage),2为节点(Stream),5为根节点。

我们可以定位宏工程所使用的Directory,将Type位修改为0,即非法Directory,这样Office办公软件在解析VBA工程时,会因为非法Directory而导致解析错误。

如图所示,表示该扇区类型的字节记录在偏移0x42处,该处值为1,表示该扇区是目录扇区,该扇区记录着Macros文件的地址。将偏移0x42处值修改为0,表示该扇区是非法扇区,office办公软件解析文档是就会忽略该扇区,也就无法找到存储Macros的扇区了。

img

在上图中,我们值修改了名为“宏”的这个目录中。实际上,用于宏的指南还有两个,分别名为 “VBA”,和 “_VAB_PROJECT_CUR”,分别是宏,VBA和的VBAProject扇区,

宏清除脚本

根据如上原理,笔者写了一个简单的Python处理脚本,源码如下:

import sys 
import os.path 

#read bytes 
def readfile(filename,address,size):
f = open(filename,'rb')
f.seek(地址,0)
cont = f.read(size)
f.close()
返回cont 

def writefile(文件名,地址,大小):
f = open(filename,'wb')
f.seek(address,0)
cont = f .write(0x0)
f.close()
返回cont 

#classify:doc,docm或其他?
def classify(filename):
filehead = readfile(filename,0,8)
if(filehead [0] == chr(0xD0)and filehead [1] == chr(0xCF)):
#print“这个文件是doc文件“ 
return 1 
elif(filehead [0] == chr(0x50)和filehead [1] == chr(0x4B)):
#print“此文件是docm / docx文件” 
return 2 
else:
#print“此文件不是word文件” 
return 0 

#repairfile 
def repairdoc(filename):
f = open(filename,'rb')
ff = open(newfile,'wb')
cont = f.read()
dirsect = readfile(filename,0x30,4)
diraddr =(0x1000000 * ord(dirsect [3])+ 0x10000 * ord(dirsect [2])+ 0x100 * ord(dirsect [1])+ ord(dirsect [0])+ 1)* 0x200 
flag = 0 
for i in range(0,16):
dirname = readfile(filename,diraddr + 0x80 * i,0x10)
if dirname = = CHR(送出0x4d)+ CHR(0×00)+ CHR(0x61)+ CHR(0×00)+ CHR(0x63)+ CHR(0×00)+ CHR(0x72)+ CHR(0×00)+ CHR(0x6f)+ CHR(0×00) + chr(0x73)+ chr(0x00)+ chr(0x00)+ chr(0x00)+ chr(0x00)+ chr(0x00):
#print“宏” 
标志= 1
typeaddr = diraddr + i * 0x80 + 0x42 
cont = cont [:typeaddr] + chr(0x00)+ cont [typeaddr + 1:] 
elif dirname == chr(0x56)+ chr(0x00)+ chr(0x42)+ chr( 0×00)+ CHR(0×41)+ CHR(0×00)+ CHR(0×00)+ CHR(0×00)+ CHR(0×00)+ CHR(0×00)+ CHR(0×00)+ CHR(0×00)+ CHR(0×00)+ CHR( 0x00)+ chr(0x00)+ chr(0x00):
#print“VBA” 
flag = 1 
typeaddr = diraddr + i * 0x80 + 0x42 
cont = cont [:typeaddr] + chr(0x00)+ cont [typeaddr + 1:] 
#cont [typeaddr] = chr(0x00)
elif dirname == chr(0x5f)+ chr(0x00)+ chr(0x56)+ chr(0x00)+ chr(0x42)+ chr(0x00)+ chr(0x41)+ chr (0x00)+ chr(0x5f)+ chr(0x00)+ chr(0x50)+ chr(0x00)+ chr(0x52)+ chr(0x00)+ chr(0x4F)+ chr(0x00):
#print“_VAB_PROJECT_CUR”,只需检查“_VAB_PRO” 
flag = 1 
typeaddr = diraddr + i * 0x80 + 0x42 
cont = cont [:typeaddr] + chr(0x00)+ cont [typeaddr + 1:]
#cont [typeaddr] = chr(0x00)
ff.write(cont)
f.close()
ff.close()
if flag == 0:
print“我没找到宏!” 
#print hex(diraddr)


def main(filename):
filetype = classify(filename)
if(filetype == 1):#doc file 
repairdoc(filename)print'DOC 
repair done!' 
elif(filetype == 2):#docm / x file 
print“这个文件是高版本的olefile,请自行修复!” 
else:
print“这个文件不是olefile。” 
if len(sys.argv)!= 2:
print“USAGE:deletemacro.py filename” 
print“eg:deletemacro.py D:\ 1.doc” 
else:
filename = sys.argv [1] 
newfile ='new _'+ os.path中。

。上述脚本只能处理的* .doc,*。xls的文档,处理说明:

.DOCX和*的.xlsx的文件不含宏,所以不需要处理。

处理之后打开文件,有时会触发“宏告警”或“文件损坏告警”,但不会影响正常使用,文件中的宏不会运行,文字内容也可以正常查看。

分析运行结果:

​ ·如果返回“干净完成!”,说明宏清理工作已经完成,新生成的文件名为new_filename,本例中为new_1234.doc,该文件中的宏已经被清理。

img

如果返回“这个文件是高版本的olefile,请自行修复!”,说明该文档是* .docm或* .xlsm文档,需要手工清理宏

img

·如果返回“此文件不是olefile”,说明该文件不是* .doc,。docm, .xls,*。xlsm文件。

img

手工清理宏(针对* .DOCM和* .XLSM文档)

·首先拷贝文件,生成文件副本,将文件后缀名修改为ZIP

img

打开拉链文件(不要解压),下面两个图中,上图是* .DOCM的情况,下图是* .XLSM的情况

img

img

·打开word(xl)文件夹,删除vbaProject.bin文件

img

·将ZIP文件后缀名修改为.DOC或.xls的。文件可以正常使用。

实际上* .DOCM和* .XLSM文件使用的标准的压缩算法,稍微改造上述脚本,就可以利用脚本实现对* .DOCM,*。XLSM的处理。

替换宏代码

上述方式修改标志位,对文档中的宏代码数据没有做丝毫改变,这样处理之后杀毒软件仍然会查杀。

我们已经可以解析宏数据,那么我们就可以将宏代码进行修改和替换,如使用字符’a’替换宏代码中的每一个字符。例如MsgBox“hello”,就会被修改为aaaaaaaaaaaa。这样修改之后整个宏都已经被修改和破坏掉,杀软将不会查杀,文档也可以正常使用。

说明

  • 本文并非原创,乃是征得作者同意后的转载 原作者为狐狸先生 未经允许,禁止转载
  • 需要相关文件可以到我的Github下载:https://github.com/TonyChen56/Virus-Analysis
  • 应作者要求 贴上知识星球图片 主要分享病毒分析和逆向破解技术,文章质量很高 我也在这个星球里 大家可以积极加入

在这里插入图片描述

相关阅读

网易云音乐、酷狗音乐、QQ音乐:移动音乐APP竞品分析

前言:菜鸟一枚,本篇为学习之作,产品见识经验尚浅,难免存在流于表面有失偏颇之处,还请不吝交流指教,感谢!一. 市场规模数字音乐市场规模

设计总结:对常见tab样式做的一个分析

今天这篇文章来给大家分析一下tab。其实tab隶属于产品导航体系的一部分,所以你要了解tab,必须要它放在导航体系中来分析。希望这篇

美国2012年总统候选人政治献金数据分析

导入包import pandas as pd import numpy as np from pandas import Series,DataFrame import matplotlib.pyplot as plt %matplo

初创企业该怎么做竞品分析?

元旦期间,一位小兄弟找我,聊他的一个创业项目,我问到他竞品分析的事,回答却是非常的模糊,后来进一步和其他创业者聊,发现竞品分析做的基

lds文件分析

官方文档:https://sourceware.org/binutils/docs-2.30/ld/index.html#SEC_Contents所有创建可执行文件的最后一步就是链接。它是由

分享到:

栏目导航

推荐阅读

热门阅读