vba p代码反汇编程序
pcodedmp的Python项目详细描述
pcodedmp.py-VBA P代码反汇编程序
简介
它并不广为人知,但是用vba(visualbasicforapplications;microsoft office中使用的宏编程语言)编写的宏有三种不同的可执行形式,每种形式都可以是运行时实际执行的内容,具体取决于环境。这些表格是:
源代码。宏模块的原始源代码被压缩并存储在模块流的末尾。这使得查找和提取宏分析所需的大多数免费DFIR工具相对容易,如oledump或olevba甚至许多专业工具反病毒工具只查看此表单。然而,大多数情况下,office完全忽略了源代码。实际上,可以删除源代码(因此使所有这些工具都认为不存在宏),但是宏仍然可以执行而不会出现任何问题。我已经创建了一个概念证明来说明这一点。大多数工具在此存档文件中看不到任何宏,但如果使用相应的Word版本(与文档名称匹配)打开,它将显示一条消息并启动
calc.exe
。令人惊讶的是,恶意软件作者并没有更广泛地使用这个技巧。P代码。当每个vba行被输入vba编辑器时,它立即被编译成p代码(堆栈机器的伪代码),并存储在模块流中的不同位置。p代码正是大多数时候执行的代码。实际上,即使在vba编辑器中打开宏模块的源代码,显示的也不是解压缩的源代码,而是反编译为源代码的p代码。只有在使用不同于用于创建文档的vba版本的office版本下打开文档时,存储的压缩源代码才会重新编译为p代码,然后执行该p代码。这使得可以在任何支持VBA的Office版本上打开包含VBA的文档,并使其中的宏保持可执行,尽管不同版本的VBA使用不同(不兼容)的P代码指令。
执行代码。当p代码至少执行了一次时,它的另一个标记形式存储在文档的其他位置(在流中,其名称以
\u srp\u
开头,后跟一个数字)。从那里可以执行得更快。但是,execodes的格式非常复杂,并且是特定于创建它们的特定office版本(而不是vba版本)的。这使得它们非常不便于携带。此外,它们的存在是不必要的-它们可以被删除,宏将正常运行(从p代码中)。
由于大多数情况下,p代码决定了宏到底要做什么(即使源代码和执行代码都不存在),所以有一个工具来显示它是有意义的。这就是我们创建此VBA P代码反汇编程序的原因。
安装
该脚本在Python2.6+版和Python3.x版中都可以使用。最简单的安装方法是使用 上述命令将安装最新版本的 如果您希望从github存储库安装它,可以这样做:pip
:
pip install pcodedmp -U
pcodedmp
(如果已经存在,则升级旧版本)。同时还要安装所有必需的依赖项(当前仅限于oletools
和win_unicode_控制台
,但将来可能还会有其他依赖项)。git clone https://github.com/bontchev/pcodedmp.git
cd pcodedmp
pip install .
用法
- 热门话题
- java附加两个数组 java如何在Extjs的不同页面中使用相同的存储 java Jung,大顶点的布局重叠,图形出现在奇怪的位置 java如何在Android中通过画布绘制圆? java验证库设计模式选择 java研磨机未知标记“timedTests” java Android领域子类实例方法 java使用resteasy/jaxrs从请求负载接收两种类型的数据 缓冲策略Java缓冲策略有时不能正确绘制 java跟踪棋子 密度无关像素如何在java中锐化图像缩略图? java如何在MongoDB更新查询中编写(或)更新 java A*寻路游戏系统退出问题 java在安卓中读取xml的最佳方式是什么? 通过反射调用的方法的java抑制警告 安卓 java。语言错误:信号11(SIGSEGV),代码10(?),故障地址006e006f java lombok 1.18.2使用DexBuilderForDebug抛出TransformClasses java JOptionPane CD对话框按钮? java只返回json中的一些值,而不是完整实体对象 java包不存在错误,请稍后重试