利用vstruct解析二进制数据-m6aa8k.PDFVIP

  • 24
  • 0
  • 约1.07万字
  • 约 6页
  • 2017-06-24 发布于天津
  • 举报
利用vstruct解析二进制数据-m6aa8k

原原文文地地址址:/papers/8643 原文地址:/blog/2015/09/08/parsing-binary-data-with-%60vstr ct%60/ Vstr ct是一个纯粹由Python语言编写的模块,可用于二进制数据的解析和序 化处理。实际上,Vstr ct是隶属于vivisect 项目的一个子模块,该项目是由Invisig0th Kenshoto发起的,专门用来处理二进制分析。 Vstr ct的开发和测试已经有许多 年头了,并且已经集成到了许多生成环境下的系统中了。此外,这个模块不仅简单易学,而且重要的是,它还非常有 趣! 您还在使用str ct模块火急火燎地手工编写脚本吗?太苦逼了,不如使用vstr ct吧!利用vstr ct开发的代码,往往更具有 陈述性或声明性,更加简明易懂,这是因为在编写二进制解析代码时通常会带有大量样板代码,而vstr ct却不会出现这 种情况。声明性代码强调的是二进制分析的下 重要方面:偏移,大小和类型。这使得基于vstr ct的解析器更易于长期 维护。 0x00 安安装装vstruct Vstr ct模块是vivisect项目的一个组成部分,目前该项目与Python 2.7保持兼容,当然,面向Python 3.x的vivisect分支目前正 在开发之中。 由于vivisect的子项目不是用兼容set ptools的set p.py文件分发的,所以你需要自己下载vstr ct的源代码目录,并将其放入 你的Python路径目录中,比如当前目录下: $ git clone /vivisect/vivisect.git vivisect $ cd vivisect $ python In [1]: import vstruct In [2]: vstruct.isVstructType (str Out[2]: False 当然,通过set p.py来声明vstr ct依赖的Python模块是非常麻烦的事情,因此为方便起见,我提供了一个PyPI镜像包,名 为vivisect-vstr ct-wb,这样的话,大家就可以直接利用pip命令来安装vstr ct了: $ mkdir /tmp/env $ virtualenv -p python2 /tmp/env $ /tmp/env/bin/pip install vivisect-vstruct-wb $ /tmp/env/bin/python In [1]: import vstruct In [2]: vstruct.isVstructType (str Out[2]: False 我已经对这个镜像进行了更新,现在它既支持Python 2.7也支持Python 3.0的解释程序,以便于读者在将来的工程中继续 使用vivisect-vstr ct-wb 。另外,遇到问题时,千万不要忘了到Visi的GitH b上去看看有没有现成的答案。 0x01 Vstruct入入门门 下面的例子相当于大家学编程语言时的“Hello World !”程序,它使用vstr ct来解析字节串中的小端模式的32位无符号整 数: In [1]: import vstruct In [2]: u32 = vstruct.primitives.v_uint32( In [3]: u32.vsParse (b\x01\x02\x03\x04 In [4]: hex (u32 Out[4]: 0x4030201 请注意观察上面代码是如何创建v_ int32类型实例、如何使用.vsParse()方法解析字节串,以及如何像处理原生Python类 型实例那样来处理最后的结果的。为了更安全起见,我要显式地将解析后的对象转换成一个纯Python类型: In [5]: type (u32 Out[5]: vstruct.primitives.v_uint32 In [6]: python_u32 = int(u32 In [7]: type (python_u32 Out[7]: int In [8]: hex (python_u32 Out[8]: 0x4030201 事实上,每个vstr ct操作都被定义为一个以vs为前缀的方法,几乎在所有由vstr ct派生的解析器中,都能找到这些方法 的身影。虽然我最常用的是.vsParse()和.vsSetLength()这两个方法,但是我们最好熟悉所有方法的使用方法。下面是对每 种方法的简单总结:

文档评论(0)

1亿VIP精品文档

相关文档