原创干货 | 【恶意代码分析技巧】04-exe_VB

admin 2021年1月19日20:56:46原创干货 | 【恶意代码分析技巧】04-exe_VB已关闭评论124 views字数 2702阅读9分0秒阅读模式

1.VB的介绍

今天我们来介绍一下Visual Basic样本的分析技巧。Visual Basic 是一种具有良好图形用户界面的程序设计语言。
Visual的意思是“可视的”,也就是直观的编程方法,在编程时不需要编写大量代码去描述界面元素的外观和位置,只需把预先建立的对象拖放到窗体上。Basic是指BASIC语言,VB使用了BASIC语言作为代码。

VB采用面向对象和事件驱动的程序设计机制,这种机制下,VB程序往往是多线程的,在分析过程中定位主线程和事件处理过程尤为重要。

在编译方式上,VB既有直接编译生成的可执行程序,也有间接编译生成的可执行程序,不同的编译方式有不同的分析方法。直接编译又被称为自然编译(Native-Compile),是编译器将高级语言转化为汇编代码,并经链接生成exe程序的过程;间接编译又被称为伪编译(Pcode-Compile),伪编译是编译器将高级语言转换为某种语言后,将其解释、执行此代码的一段程序一同链接,生成exe程序。

Visual Basic 1~4都必须将源代码编译成 VB 伪代码后解释执行,都是P-code,之前文章中介绍的python、java编译的实质也是这个。此类解释型语言,都有对应的反编译器,可以使用Dodi’s VB 3/4 Disassembler反编译VB3和VB4的VB程序。VB 1~4已经很古老了,笔者在实际工作中从来没有遇到过,在此就不作分析。

VB7以及之后的VB版本,又被称作VB.Net,可以采用.Net程序的分析方式进行分析,这在本系列之后的文章中再做介绍。

在实际工作中,遇到最多的VB程序是VB5和VB6,这也将是本文分析的重点。VB3和VB4,VB程序都是P-code 编译,单纯调用 vbrun.dll解释执行。到了VB5,微软在继续保留 P-code 编译的同时也引入了 Native 编译方式,其运行库变为msvbvm.dll。接下来就针对这两种编译方式生成的VB程序进行分析。

2.Native和PCode比较

2.1.Native自然编译

自然编译的VB程序,直接生成x86汇编代码,可以直接使用OD、IDA进行分析。
但是需要注意的是,VB函数的调用遵循 stdcall 原则,即函数入口参数按从右到左的顺序入栈,并由被调用的函数在返回前清理传送参数的内存栈。而且VB程序不是直接调用Windows API函数,而是调用VB库里的函数。如图所示的是某个VB样本的导入函数情况,所有导入函数都来自于msvbvm*.dll。

原创干货 | 【恶意代码分析技巧】04-exe_VB
由此可见,熟悉VB库里的函数,在分析Native编译的VB样本时能够事半功倍。下图是是笔者在《加密与解密》一书中截取的VB函数列表片段,更详细的内容,可以阅读《加密与解密》一书:

原创干货 | 【恶意代码分析技巧】04-exe_VB
同时,VB的程序中会有大量对控件属性的操作,这些操作往往是通过虚函数实现的。所以在OD动态调试时,会发现有大量call [ecx+*]形式的调用,可以通过查表迅速定位其调用的函数,下表摘自《软件加密技术内幕》:

原创干货 | 【恶意代码分析技巧】04-exe_VB

原创干货 | 【恶意代码分析技巧】04-exe_VB

原创干货 | 【恶意代码分析技巧】04-exe_VB

原创干货 | 【恶意代码分析技巧】04-exe_VB

原创干货 | 【恶意代码分析技巧】04-exe_VB

2.2.Pcode伪编译

运行时依赖解释器将伪代码翻译为汇编代码再执行。
如图所示,是Pcode编译的VB程序反汇编得到的结果的片段,可以看到Pcode编译得到的是Pcode汇编代码,而不是直接得到x86汇编代码。

原创干货 | 【恶意代码分析技巧】04-exe_VB
Pcode编译的VB程序,在执行时会调用msvbvm*.dll首先对Pcode汇编进行解释,翻译成x86汇编代码,然后才能由CPU执行。如果使用OD跟踪Pcode编译的VB程序,很容易迷失在伪代码解释引擎中。

Pcode指令速查https://www.52pojie.cn/forum.php?mod=viewthread&tid=70403 。

2.3.编译方式识别

①使用DetectItEasy能直接识别Native和PCode编译:

原创干货 | 【恶意代码分析技巧】04-exe_VB

原创干货 | 【恶意代码分析技巧】04-exe_VB
②导入函数数量上的比较,Native编译的程序往往有比Pcode编译的程序更多的导入函数:

原创干货 | 【恶意代码分析技巧】04-exe_VB
③汇编代码比较,Native编译直接反汇编为x86汇编语言,Pcode编译反汇编为Pcode伪汇编代码:

原创干货 | 【恶意代码分析技巧】04-exe_VB

3.分析工具和技巧:

3.1.VB Decompiler

VB Decompiler目前是VB程序逆向分析最强大的功能,支持VB5/6,同时支持Native和Pcode编译的程序。
此软件使用也很简单,直接将VB程序拖拽进VBDe即可,该软件能将VB窗体的事件处理过程识别出来,还能显示对应的反汇编和反编译代码:

原创干货 | 【恶意代码分析技巧】04-exe_VB

原创干货 | 【恶意代码分析技巧】04-exe_VB
VB Decompiler是一款静态分析工具,没有办法动态调试。如果是Native程序,可以结合OD进行动态调试,如果是Pcode程序,就需要使用WKTVBDebugger。

3.2.WKTVBDebugger

WKTVBDebugger是一款古老的软件,也是Pcode程序最好用的调试软件。此软件的具体使用可以参考https://www.52pojie.cn/thread-33119-1-1.html。

原创干货 | 【恶意代码分析技巧】04-exe_VB

此软件在使用中,有几个方面要注意:
①待分析的VB程序需要和复制到 WKTVBDebugger 安装目录里调试,即与 Loader.exe 同一目录;
②需要将安装目录的 WKTVBDE.dll 文件复制到系统目录里;
③需要将 MSVBVM60.DLL 替换成 2003 年以前版本。

3.3.VB程序真正的入口

原创干货 | 【恶意代码分析技巧】04-exe_VB

如图所示,VB程序的ENTRY POINT进入后第一个指令是push指令,如果我们从这里开始分析,就会进入编译器的代码中,浪费大量的分析时间,所以我们需要定位VB程序真正的入口。
push xxxxxxxx压入的实际上是一个指针,指向VBHEADER的结构。此结构体的解析如下:

原创干货 | 【恶意代码分析技巧】04-exe_VB
我们需要重点关注VBHEADER结构体中的成员pSubMain,这才是VB程序真正的入口。
在本例中,入口地址是0x4327b0,接下来我们可以下段直接运行到这里,然后再进行分析:

原创干货 | 【恶意代码分析技巧】04-exe_VB

原创干货 | 【恶意代码分析技巧】04-exe_VB

参考资料:

https://bbs.pediy.com/thread-28715.htm
https://bbs.pediy.com/thread-29307.htm
http://www.baike.com/wiki/VB

Defeating the VB5 Packer


《加密与解密 第四版》
《软件加密技术内幕》

相关推荐: 某CTF题天津垓解题思路

各位表哥好,在这里给大家分享一下自己的学习笔记,由于个人比较菜,希望表哥们,轻一点喷。逆向分析,离不开的肯定是IDA了,在这里先几个常用的IDA快捷键。分析程序,首先我们常规的查一下程序信息。得到是信息是一个没有壳的64位的可执行程序,然后我们运行天津垓.ex…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年1月19日20:56:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   原创干货 | 【恶意代码分析技巧】04-exe_VBhttps://cn-sec.com/archives/246173.html