逆向工程实验报告_第1页
逆向工程实验报告_第2页
逆向工程实验报告_第3页
逆向工程实验报告_第4页
逆向工程实验报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精选word逆向工程实验报告..精选word.电子科技大学信息与软件工程学院逆向工程实验报逆向工程实验报告全文共16页,当前为第1页。逆向工程实验报告全文共16页,当前为第1页。精选word..精选word. 姓名:XXX 学号:201852090710 指导教师:何兴高一、题目基于MBR的Bootkit的逆向分析二、题目梗概利用逆向工程技术,从可运行的程序系统出发,运用解密、反汇编、系统分析、程序理解等多种计算机技术,对软件的结构、流程、算法、代码等进行逆向拆解和分析,推导出软件产品的源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。随着用户需求的复杂度越来越高,软件开发难度不断上升,快速高效地软件开发已成为项目成败的关键之一。逆向工程实验报告全文共16页,当前为第2页。Bootkit是一种比较旧的技术,这个概念最早是在2005年由eEyeDigital安全公司在他们的“BootRoot"项目中提及的。Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。Rootkit通过加载特殊的驱动,修改系统内核,进而达到隐藏信息的目的。rootkit并不一定是用作获得系统root访问权限的工具。实际上,rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。通常,攻击者通过远程攻击获得root访问权限,或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。进入系统后,如果他还没有获得root权限,再通过某些安全漏洞获得系统的root权限。接着,攻击者会在侵入的主机中安装rootkit,然后他将经常通过rootkit的后门检查系统是否有其他的用户登录,如果只有自己,攻击者就开始着手清理日志中的有关信息。通过rootkit的嗅探器获得其它系统的用户和密码之后,攻击者就会利用这逆向工程实验报告全文共16页,当前为第3页。逆向工程实验报告全文共16页,当前为第2页。逆向工程实验报告全文共16页,当前为第3页。精选word..精选word.所有在开机时比Windows内核更早加载,实现内核劫持的技术,都可以称之为Bootkit。Bootkit主要是利用其内核准入和开机过程的隐身技术,在功能上无异于Rootkit。传统的Rootkit利用系统启动时提升权限,而Bootkit主要被安置在外设的主引导扇区(也有放于Ntldr文件、BIOS中的Bootkit)并驻留在整个系统的启动过程。Bootkit属于Rootkit的一种,但它却是更加高级的Rootkit,因为其存放于主引导扇区、启动文件之类地方,在操作系统启动之前驻留内存并内核运行之前劫持内核。MBR即主引导扇区(MasterBootRecord)是装有Linux系统的硬盘的第一个扇区,即C/H/S地址的0柱面0磁头1扇区。这个扇区是系统开启时必须访问的扇区,记录本磁盘相关信息以及硬盘各个分区的大小和信息。本实验旨在对基于MBR的BootKit的启动模块代码,也就是感染MBR后第1、第61、62扇区的模块进行逆向分析。三、涉及知识点在本项目中,逆向涉及到的知识点有以下几个,分别是:保护模式下的汇编语言实模式下的汇编语言BIOS中断服务多级HOOK技术计算机系统内核原理逆向工程实验报告全文共16页,当前为第4页。NTLDR(系统加载程序,用于装载Windowsxp2003等版本逆向工程实验报告全文共16页,当前为第4页。精选word..精选word.四、涉及工具在本项目中,涉及到的工具有以下几个,分别是:IDA(主要静态分析Bootkit)、WindbgBochs(主要是用于动态调试这个Bootkit)Winhex工具五、源程序见附件六、过程及分析首先介绍一下这个样本黑盒后的症状:感染MBR(感染的具体形式为:真正的MBR被挪到了第63个扇区,Bootkit启动模块的代码在第1、61、62个扇区。)直接在硬盘上写入了一个驱动(这种写入不是普通的在磁盘上释放一个文件,在系统的文件系统里面是看不见这个驱动的,在实验的虚拟机上是写入了未分区的空间中,通过Winhex工具可以查看到);生成一个DLL并运行然后10分钟后自动关机。第1、61、62个扇区的代码中,第1个扇区的代码是实模式下的汇编语言,第61、62个扇区是保护模式下的汇编语言,所以在用IDA分析的时候要进行选择,至于这三个扇区的代码直接用Winhex截取出来然后进行逆向分析。逆向工程实验报告全文共16页,当前为第5页。这个Bootkit的启动代码主要用了三级HOOK,分别为HOOKINT13h、HOOKN逆向工程实验报告全文共16页,当前为第5页。精选word..精选word.1、第一级HOOK(HOOKINT13h)seg000:7C35 @HOOK_INT13H:seg000:7C35xorbx,bxseg000:7C37moveax,[bx+4Ch]seg000:7C3Bmoves:73h,eaxseg000:7C40movwordptr[bx+4Ch],66h;'f'seg000:7C45movwordptr[bx+4Eh],esseg000:7C48pushesseg000:7C49push4Dh;'M'seg000:7C4Cretf上面的代码实现了HOOKINT13h,即HOOK了BIOS的磁盘中断服务。下面为HOOKINT13h后的主要代码,其中主要是搜索了NTLDR文件的特征码,特征码为:SignatureCodeis:8BF0movesi,eax85F6testesi,esi7421jz$+23h80..............这段代码运行后内核和BootDriver已经加载到内存中,当找到这段代码以后就对这段特征码进行HOOK,HOOK的过程用到了CALLNEAR[offset32],即相对的寻址方式。这个HOOK利用了eEyeBootRoot里面的技术。上面的主要代码是在第一个扇区中的代码实现的,是实模式下执行的代码。逆向工程实验报告全文共16页,当前为第6页。逆向工程实验报告全文共16页,当前为第6页。精选word..精选word. 这里主要为HOOK了NLTDR以后代码执行的过程,第二个HOOK的代码主要是在第61个扇区中实现的。首先第二个HOOK会去搜索NTLDR中的特征码,搜索这个特征码是为了定位到BlLoaderBlock这个变量,这个变量中包括了很多有用的信息,如内核和BootDriver等等。搜索过程为下图:图1当搜索到以后就可以定位到BlLoaderBlock,然后[[BlLoaderBlock]+0]就正好为模块链表的指针。这个指针所指向的结构的一些主要成员为:+00hLIST_ENTRYmodulelistlinks+08h[10h]不太了解+18hPTRimagebaseaddress+1ChPTRmoduleentrypoint+20hDWORDsizeofloadedmoduleinmemory逆向工程实验报告全文共16页,当前为第7页。逆向工程实验报告全文共16页,当前为第7页。精选word..精选word.+2ChUNICODE_STRINGmodulefilename下图的代码就是利用上面介绍BlLoaderBlock的结构定位到了内核的基址。图2当定位到内核以后,Bootkit将搜索内核的特征代码,然后对内核进行HOOK。搜索的内核代码为:push4Bh6Ah4Bhpush19h6Ah19hcallInbvSetProgressBarSubset(x,x)E8E8DDE6FFpush[ebp+var_470]FFB590FBFFFFcallIoInitSystem(x)E853E6FFFF逆向工程实验报告全文共16页,当前为第8页。 当搜索到了上面的内核特征码后,就对内核的callIoInitSystem(x)逆向工程实验报告全文共16页,当前为第8页。精选word..精选word.图3当搜索到特征码后接下就会对Kernel的特征码进行HOOK,HOOK的特征码为:callIoInitSystem(x)E853E6FFFF修改的地方为后面四个字节的偏移量。通过这个HOOKBootkit就能在内核运行的时候再次获得执行的机会。 下面的代码便是对内核进行HOOK的操作:逆向工程实验报告全文共16页,当前为第9页。逆向工程实验报告全文共16页,当前为第9页。精选word..精选word.图4从上图的代码看出,在这个过程中Bootkit会将HOOK内核的代码挪到内存中内核映像文件的末尾位置,大小正好为200个字节。上面便是Bootkit的第二个HOOK所完成的工作。3、第三级HOOK(HOOKKernel的特征码) 当HOOKKernel后的代码运行时,主要的代码是在第62个扇区中。其中的代码有些复杂,这里只介绍主要的执行流程。这个HOOK代码主要的功能实现了加载并运行一个驱动程序。 第三级HOOK中首先是通过内核的输出表定位到ExAllocatePool函数,搜索这个内核的函数是通过Hash的比较。当找到这个函数的地址以后就调用这个函数分配一片内存池,然后把下面的代码拷贝到这份内存中并在内存池中执行Bootkit后面的代码。上面这个过程具体实现如下入所示:图5逆向工程实验报告全文共16页,当前为第10页。接下来Bootkit会把调用之前被HOOK的IoInitSystem(x)函数,即去Call这个函数,让IO去初始化系统。当执行完这步操作以后,则会在内核中搜索和多函数,逆向工程实验报告全文共逆向工程实验报告全文共16页,当前为第10页。逆向工程实验报告全文共16页,当前为第11页。精选word..精选word.NtReadFile、NtOpenFile、NtClose等函数,调用这些函数主要是为了能够把驱动直接从磁盘上读出来,然后运行。具体过程为如下。首先调用NtOpenFile打开磁盘,并定位那个驱动的位置。过程为:图6逆向工程实验报告全文共16页,当前为第12页。接下来调用NtReadFile逆向工程实验报告全文共16页,当前为第12页。精选word..精选word.图7当把驱动读入到内存以后Bootkit还有一个将驱动进行内存对齐的操作。具体过程为下图所示:图8逆向工程实验报告全文共16页,当前为第13页。逆向工程实验报告全文共16页,当前为第13页。精选word..精选word.图9当驱动执行完毕后,则把控制权交还给Bootkit的启动代码,Bootkit最后做的善后处理为:把正在运行的内存池里面的代码清零,然后把控制权交给操作系统的内核,让内核继续进行计算机的启动过程。 以上便是这个Bootkit样本的启动模块代码执行流程。最后附上一个图,下图为HOOKKernel处留下的痕迹。图10CallIoInitSystem(x)被替换成了Call806cee00,而806cee00地址处的代码是Bootkit第三个HOOK的代码。七、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论