其具体过程如下:对于给定的恶意代码可执行文件,即二进制文件,读取8位为一个无符号的整形(范围为0-255),固定的行宽为一个向量,整个文件最后生成一个二维数组。将此数组可视化为一个灰阶图像,该二维数组中每个元素的范围为0-255,正好为灰度图像中每个像素的取值范围,即每个数组元素对应图像中的一个像素。
例子:
将如下文件映射为图片:
代码为:
import numpy, scipy, os, array
filename = 'd:/test/QQApp.exe'
graphname = 'd:/test/QQApp.png'
f = open(filename,'rb') # 读入文件
ln = os.path.getsize(filename) # 文件长度(byte)
width = 256 # 固定图片宽度为256
rem = ln%width # 计算余出的字节
a = array.array("B") # uint8 数组
a.fromfile(f,ln-rem) # 将文件读入数组a中,舍去余出的字节
f.close()
g = numpy.reshape(a,(len(a)/width,width)) # 将数组转为二维
g = numpy.uint8(g)
scipy.misc.imsave(graphname,g) # 保存图片
转化后的图片为: