使用WinDbg调试内核


知识点

WinDbg是微软提供的一个免费调试器,支持内核调试,也具有监控Windows系统交互的功能。

驱动与内核代码:Windows设备驱动简称为驱动,他让第三方开发商在Windows内核模式下运行代码。驱动程序常驻与内存,并且负责响应用户态程序的请求,而且应用程序不直接与驱动程序通信,而是直接访问设备对象,向具体的物理设备发送请求。设备对象由驱动程序创建和销毁,可以被用户态的程序直接访问,但他们并不一定是真实的物理设备。为了系统能正常工作,驱动程序必须加载到内核空间,这与DLL需要加载到进程空间道理相同,当驱动被首次加载时,DriverEntry函数将被调用。

与DLL通过导出函数表来提供其功能不同,驱动程序通过注册回调函数来提供功能。当用户态的应用程序请求一个服务时,这些回调函数将被调用。回调函数在DriverEntry程序中被注册。Window会为每个条创建一个驱动对象,并以参数形式将其传递给DriverEntry函数,DriverEntry函数用回调函数填充这个驱动对象。然后DriverEntry会创建一个可以被用户态应用程序访问的设备对象,应用程序与去当的交互请求都通过这个设备对象进行。

OllyDbg使用方法


知识点

加载恶意代码:OD可以直接加载可执行文件,也可以加载DLL文件,也可以将调试器附加在进程中,我们甚至可以用命令行运行恶意代码或者执行DLL中的某个函数。

加载可执行文件:在加载可执行文件的时候OD会使用它的加载器来加载这个程序,并可在此过程选择运行的命令行参数。如果OD能确定程序的main函数就在main处中断,否则在程序PE头提供的程序入口点中断。

附加调试器到一个程序:OD在附加到一个进程时会立即暂停这个程序以及它所有的线程。

OD窗口:OD有如下几个常用窗口:

  • 反汇编窗口:这个窗口显示了被调试程序的代码,下一条要执行的指令回在窗口中高亮显示,如果项修改指令或者数据,可以在此窗口中敲击空格键。
  • 寄存器窗口:这个窗口会显示程序寄存器的当前状态,代码在调试过程中,如果莫格寄存器的值发生了改变,则此寄存器就会从黑色变成红色。右键某个寄存器选择Modify就可以修改某个寄存器中的值。
  • 栈窗口:这个窗口会显示被调试宪曾在内存中的当前状态。这个窗口总会显示给定线程得到栈顶。OD会在一些栈单元上显示一些有用的注释,这些注释描述了调用一个API之前栈中存放的参数。
  • 内存转储窗口:这个窗口显示被调试进程的实时内存转储。

动态分析基础技术


知识点

与静态分析不同,动态分析是将恶意代码加载运行之后观察代码运行状态的一个过程,一般来说,对恶意代码进行分析时先进行静态分析来大致了解软件的功能再进行动态分析以了解恶意代码运行时的更多细节,静态分析与动态分析都有各自的有点以及局限性,本章重点介绍了动态分析的一些手法和技巧。

用沙箱来分析恶意代码:沙箱是一种在安全环境下运行不信任的程序的安全机制,沙箱一般包含一个虚拟的环境,并可以定制虚拟网络等“欺骗”恶意代码让恶意代码认为自己所在的沙箱是一个正常的物理机的各种虚拟功能,但是运行在沙箱中的恶意代码并不会对物理机产生任何威胁,因此沙箱是一个很好的用来动态分析恶意代码的工具。

前一段时间我使用过布谷鸟沙箱(Cuckoo),这一款沙箱的结构是首先开启一个安装有Ubuntu14.04的系统用于安装Cuckoo,然后再向这个虚拟机上安装所有Cuckoo依赖的插件,安装完成后再向Ubuntu中安装一个Vmware虚拟机来安装一个用于运行Windows等系统的虚拟机,整体相当于是一个虚拟机的嵌套结构,布谷鸟对这个在虚拟机中运行的虚拟机的运行状态的存储状态进行记录,并对比运行病毒前后的镜像区别来确定恶意代码对主机做了什么,并会生成一个十分详细的报告,总的来说这种杀向在我们对一个恶意代码进行静态分析遇到困难时还是很有帮助的,但是缺点是此系统十分难于安装,因为很多安装条件会产生冲突,而且此沙箱运行起来也是对电脑性能的极大挑战,除非你有一台安装了Ubuntu14.04的物理主机。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×