p-code
或native code
编译的(取决于恶意软件的版本)。在过去的几天里,我阅读了Alex Ionescu的论文以及有关该主题的另一篇论文,并且我对格式有一些疑问。另外,如果您有更多资源可以在此获取有关Visual Basic内部结构的其他信息,请随时在此处发布。所以问题是:
在
ProjectInformation
结构中,在偏移量0x20
处存在一个称为lpNativeCode
的字段。根据Alex的论文,描述为Pointer to .DATA section
。分析样本时,我注意到以下字段是0x0
编译样本的p-code
,并包含native code
编译样本的地址。因此,我的问题是:使用以下字段确定样本是p-code
还是native-code
是否安全?在
ObjectInfo
结构内部,存在偏移量0x20
和0x24
的字段,分别称为wMethodCount
和lpMethods
。对于p-code
编译的样本,我注意到lpMethods
字段指向该对象的方法数组。我不明白的是出现在数组中实际方法地址之前的零字节。为了更清楚起见,我包括以下图片: ObjectInfo
结构,而第二张图片是lpMethods
字段指向的方法数组。注意实际方法地址之前的8个零字节(在其他一些示例上,有8个以上的零字节,因此它并不总是那个数字)。我想知道的是那些零字节?最后是我的最后一个问题。在
PublicObjectDescriptor
结构中,在偏移量0x1C
处有一个名为dwMethodCount
的字段,其描述为Number of methods in Object
。同样,在ObjectInfo
结构内部有一个名为wMethodCount
的字段,在OptionalObjectInfo
中有一个称为wEventCount
和dwControlCount
的字段。我想知道的是这些领域之间的关系。 我注意到,对于
p-code
编译的样本,PublicObjectDescriptor.dwMethodCount
等于ObjectInfo.wMethodCount
,而对于native-code
编译的样本,以下关系不成立。 #1 楼
免责声明:由于VB文件结构仍未记录,因此,如果不对格式进行完全反向工程,我们将无法提供保证的答案。正如您和其他人所提到的那样,Ionescu和其他人已经尝试了这种方法。我将尽我所能尝试回答您的问题,而无需打开任何反向工程工具。如果您想问别人如何对VB文件格式和相关的可执行文件进行逆向工程,我建议您专门针对该主题提出另一个问题。有根据的猜测):
作为未记录的格式,我们不仅不能提供保证的“是”,而且格式和/或那些假设可能会在将来的版本中更改。对于像VB6一样古老的格式,这种情况不太可能发生,因为这种格式已被废弃,所以非常不可能。在这种情况下,这似乎是一个合理的假设。
由于
ObjectInfo
和PublicObjectDescriptor
结构是分开的,所以我可以假设null
数组中的ObjectInfo.lpMethods
值表示未实现方法(在PublicObjectDescriptor
中由名称定义)通过ObjectInfo
。再次,这是一个有根据的猜测,应进行进一步的逆向工程来验证它。我相信,由于
PublicObjectDescriptor
承担着面向外部的对象描述的作用,因此它被用来完整地描述对象。 ObjectInfo
在对象的p-code
部分上更为外部和特定。因此,在p-code
中完全实现的对象的ObjectInfo.wMethodCount
等于其PublicObjectDescriptor.dwMethodCount
,而部分(或完全)本地实现的对象的PublicObjectDescriptor.dwMethodCount
比ObjectInfo.wMethodCount
更高。
评论
您尝试过VB反编译器吗?以下是修改VB可执行文件的两个示例:-remkoweijnen.nl/blog/2013/01/02/…-remkoweijnen.nl/blog/2012/08/04/…