python版xor解密源码

来源:互联网 发布:有sql注入漏洞的网站 编辑:程序博客网 时间:2024/06/06 07:51

【前言】

前天fireeye出了一份最新的关于APT28的报告,提到了最新的0day组合攻击。其中,包括微软Office的两个EPS图形文件的远程代码执行漏洞 ( CVE-2017-0261, CVE-2017-0262 ),和一个本地提权漏洞(CVE-2017-0263 ). 具体细节已经公开. 2015年火眼曾经公开了一个关于EPS的高危漏洞(CVE-2015-2545),让人记忆深刻。

0x01 EPS文件

CVE-2017-0262这个流行样本是名为【Trump’s_Attack_on_Syria_English.docx 】的docx文档,里面嵌入了恶意的eps文件. 个人认为这名字诱惑力很大,在中国的话可以起名为”2017年上海国际车展车模联系名单”,”震撼!女大学生夜跑被..”的头条体。 扯远了,回头。

这个EPS恶意文件通过XOR加密算法做了简单的混淆。解密用的key是0xc45d6491.

$ cat word/media/image1.eps%!PS-Adobe-3.0%%BoundingBox:   36   36 576 756%%Page: 1 1/A3{ token pop exch pop } def /A2 <c45d6491> def /A4{ /A1 exch def 0 1 A1 length 1 sub { /A5 exch def A1 A5 2 copy get A2 A5 4 mod get xor put } for A1 } def <bf7d4bd9[..这个是很长的加密后文本..]b97d44b1> A4 A3 exec quit

简单的方法是安装postscript程序执行这段代码,即可得到解密结果。

0x02 EPS文件解析

问题来了-什么是PostScript?

PostScript是一种用于描述矢量图形的页面描述语言。简单的说,用PostScript语言写成的文件就是PS格式的图片,一般文件后缀用 ps ,简称为PS文件。作为语言,该文件是可以用编辑器打开查看的。

看到“页面描述语言”这个词,可能会联想到HTML等网页标记语言。没错, PostScript的主要作用就是记载需要打印出的各种文字和图形,但它还是 一种简单的编程语言,支持分支、循环等控制结构,以及数组、字典等简单 的数据结构。

运行PostScript

查看PostScript文件需要使用PostScript解释器。最常见的解释器就是 GhostScript。Windows版只需下载 gs871w32.exe安装即可。Linux下一般都包含在发行版中,使用相应的 管理程序自动安装即可,例如Ubuntu下可以这样安装

$ sudo apt-get install ghostscript

安装完成后即可从开始菜单中启动GhostScript(Linux下直接使用 gs 命令启动)。 启动后出现提示符:

GS>

随后,可以直接在提示符下输入命令,也可以先把命令写成*.ps文件, 再用GhostScript运行。也可以在window下运行,安装包请自行search。

0x03 XOR解密代码

笔者这里手贱,用python解混淆,下面祭献出源码:

#!/usr/bin/env python#-*- coding: utf-8 -*-#coding=utf-8import binasciib = "c45d6491"a = "bf7d4bd9a13112f4b03407f0e43b0dffa03b0bffb07d55a1f47d17f2a53101f7ab3310b1b73810f7ab3310b1a3310bf3a53100f8a72944f3a13a0dffe47225a0f77d50a1f46d54a1e43901f7e47225a0f67d25a0f77d55a7e43400f8b27d55b1a53900b1a03802b1eb1c5cb1bf7d4bd0f16944f4bc3e0cb1a03802b1eb1c56a7e4381cf2ac7d00f4a27d4bd0f76a44d0f66b44fda13303e5ac7d00f4a27d4bd0f16a44d0f16944fda13303e5ac7d00f4a27d4bd0f06c44a3f16b44f5a13b44be856c55b1856e53b1856955b1ad390de7e43901f7e42644be856c55b1856c55b1f57d17e4a67d00f4a27d25a0f57d54b1a8291fb1a1250de5e42044f8a27d25a3f27d25a0f57d25a5f57d09e4a87d25a4f07d14e4b0340ae5a12f12f0a87d19b1a8320be1e41c56a7e42044f3"def fuckit(decrypt_key, data):    length = len(data)    m_data = []    for i in range(length):        m_index = i % len(decrypt_key)        m_key = decrypt_key[m_index]        m_data +=  chr(ord(data[i])^ ord(m_key))    data = "".join(m_data)    return dataif __name__ == '__main__':    #with open("postscript.txt", 'r') as fp:    #    a = fp.read()    m_b = list(binascii.unhexlify(b) )    m_a = list(binascii.unhexlify(a) )    print fuckit(m_b,m_a)

被解密文本如下:

这里写图片描述

0x04 参考

PostScript入门(1)-基本知识 charlee.li

警惕利用CVE-2015-2545漏洞进行的攻击

GMT参考手册

/* 代码不写include的不是好代码,文章不写参考的不是好文章。*/

1 0