学习笔记-第八章 恶意代码分析实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yes_butter/article/details/88571045

第八章 动态调试

1.源代码级与汇编级的调试器

	多数软件开发者熟悉源码级的调试器。这类调试器一般内置于集成开发环境中。为了检查程序内部变
	量的状态一次一行的运行程序,源码级别的调试器允许设置断点,让程序中断在源代码某行。
	汇编级调试器,也称为底层调试器,它的操作对象不是源代码而是汇编代码。同源代码级调试器一
	样,你也可以使用汇编级调试器按照一次一条指令的方式运行程序。在某行汇编代码上设置断点,
	来中断程序的运行并检查内存的内容。

2.内核模式与用户模式调试

	内核模式代码的调试更具挑战性,内核模式调试一般需要俩个不同的系统。在用户模式中,调试器与
	调试代码运行在统一系统中。
	
	进行内核调试时,一个系统运行被调试的代码,另一个运行调试器。除此之外,你必须配置操作系统
	使其开启内核调试功能,并将俩个系统连通。windbg是唯一支持内核调试的流行调试器。ollydbg是恶
	意代码分析人员使用最多的调试器,但不支持内核调试。windbg支持用户模式调试,IDA Pro也有一个
	内置的调试器,但它并不具有与OllyDbg相同的功能,且不如OllDbg使用方便。

3.使用调试器

	有俩种调试程序的方法,第一种是利用调试器启动程序。当程序启动后,它被加载到内存,程序在其
	入口点运行之前立即停止运行。此刻你已经完全控制了程序。
	
	也可以附加调试器到一个已经运行的程序上。当程序的所有线程暂停时,你就可以调试它了,当你调
	试一个已经运行的程序或者一个已经被恶意代码感染的进程中,这是一个很好的办法。
	
	单步调试
	
	单步跳过,单步跳入
	
	用断点暂停执行 断点用来暂停程序的运行并让你查看程序的状态。程序在断点处暂停运行被成为“中断”,
	程序运行过程中,因为寄存器的值和内存的地址不断变化的,所以不能访问寄存器的值和内存地址,
	因此设置断点对调试程序十分必要。
	
	软件执行断点,在特定指令执行后它会停止程序的运行。调试器通过INT 3,操作系统产出异常,控制
	权转到调试器。
	
	硬件执行断点。利用专门的硬件寄存器,x86结构可以支持硬件执行断点。处理器每次执行一个指令时,
	硬件都会检测指令的指针是否与断点地址相等。
	
	条件断点 软件断点的一种,在某些条件满足时才会被触发。

4.异常。

	异常是调试器取得运行程序控制权的基本方式。本质上,除了断点产生异常外,与调试器无关的事件,
	非法内存访问,除0操作
	
	异常并不是恶意代码,恶意代码分析或者调试所特有的。异常经常是由bug引起,在没有使用调试器
	的正常程序中,异常也可以用来控制正常程序的执行。这个功能可以确保调试器和被调试的程序都
	可以使用异常。

5.使用调试器修改可执行文件

	调试器可以用来改变程序的执行方式。可以通过修改控制标志,指令指针或者代码本身等方式来改
	变程序执行的方式。
	
	也可以使用调试器改变指令指针。

猜你喜欢

转载自blog.csdn.net/Yes_butter/article/details/88571045
今日推荐