python版xor解密源码

【前言】

前天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-8
import binascii

b = "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 data


if __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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值