老鸟讲逆向分析-完整_第1页
老鸟讲逆向分析-完整_第2页
老鸟讲逆向分析-完整_第3页
老鸟讲逆向分析-完整_第4页
老鸟讲逆向分析-完整_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

黑客老鸟讲逆向分析什么是PE文件HTTP/NETSECURITY51CTOCOM/200802251418子明51CTOCOM我要评论0【51CTOCOM专家特稿】讲到逆向,更多的人都是考虑到既然是逆向那就应该反着来推或者相反,其实则不然,这里我们要讲的是为了更深入的研究WINDOWS编写机制,更好的研究他们的安全,谁让微软这么保守虽然曾经流出过WINDOWS的部分代码,但是还是有更多的秘密值得我们去深挖,每天都有新的发现,做为逆向分析的第一步,我们首先来学习下什么是PE文件针对PE的认识PE是PORTABLEEXECUTABLEFILEFORMAT(可移植的执行体)简写,它是目前WINDOWS平台上的主流可执行文件格式。PE的文件格式PE“PORTABLEEXECUTABLE“文件格式是针对MSWINDOWSNT,WINDOWS95ANDWIN32S的可执行二进制代码DLLSANDPROGRAMS。在WINDOWSNT内,驱动程序也是这个格式,也可以用于对象文件和库。这个格式是MICROSOFT设计的,并在1993经过TISTOOLINTERFACESTANDARD委员会MICROSOFT,INTEL,BORLAND,WATCOM,IBM等标准化。它基于在UNIX和VMS上运行的对象文件和可执行文件的COFF“COMMONOBJECTFILEFORMAT“格式。PE格式结构图以上就是逆向分析的第一课程,有关PE的认识。下面我们接着将软件的保护甲壳。【51CTOCOM独家特稿,转载请注明出处及作者】【相关文章】黑客老鸟讲逆向分析什么是壳及壳的加载过程HTTP/NETSECURITY51CTOCOM/200802251427子明51CTOCOM我要评论0【51CTOCOM专家特稿】上节课程我主要介绍了什么是PE,本次课程我们主要来讲一下壳,这也是破解软件的必修课程,也是逆向分析里面的必修功课。在一些计算机软件里有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,就把这样的程序称为“壳”了。壳分为私密壳和压缩壳。壳的示意图壳的加载过程1)获取壳所需要使用的API地址如果用PE编辑工具查看加壳后的文件,会发现未加壳的文件和加壳后的文件的输入表不一样,加壳后的输入表一般所引入的DLL和API函数很少,甚至只有KERNEL32DLL以及GETPROCADDRESS这个API函数。壳实际上还需要其他的API函数来完成它的工作,为了隐藏这些API,它一般只在壳的代码中用显式链接方式动态加载这些API函数。2)解密原程序的各个区块SECTION的数据壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个区块。在程序执行时外壳将会对这些区块数据解密,以让程序能正常运行。壳一般是按区块加密的,那么在解密时也按区块解密,并且把解密的区块数据按照区块的定义放在合适的内存位置。如果加壳时用到了压缩技术,那么在解密之前还有一道工序,就是解压缩。这也是一些壳的特色之一,比如说原来的程序文件未加壳时12M大小,加壳后反而只有几百K。3)重定位文件执行时将被映像到指定内存地址中,这个初始内存地址称为基地址(IMAGEBASE)。对于EXE的程序文件来说,WINDOWS系统会尽量满足。例如某EXE文件的基地址为0X400000,而运行时WINDOWS系统提供给程序的基地址也同样是0X400000。在这种情况下就不需要进行地址“重定位”了。由于不需要对EXE文件进行“重定位”,所以加壳软件把原程序文件中用于保存重定位信息的区块干脆也删除了,这样使得加壳后的文件更加小巧。有些工具提供“WIPERELOC”的功能,其实就是这个作用。不过对于DLL的动态链接库文件来说,WINDOWS系统没有办法保证每一次DLL运行时都提供相同的基地址。这样“重定位”就很重要了,此时壳中也需要提供进行“重定位”的代码,否则原程序中的代码是无法正常运行起来的。从这点来说,加壳的DLL比加壳的EXE更难修正。4)HOOKAPI程序文件中的输入表的作用是让WINDOWS系统在程序运行时提供API的实际地址给程序使用。在程序的第一行代码执行之前,WINDOWS系统就完成了这个工作。壳一般都修改了原程序文件的输入表,然后自己模仿WINDOWS系统的工作来填充输入表中相关的数据。在填充过程中,外壳就可填充HOOKAPI代码的地址,这样就可间接地获得程序的控制权。5)跳转到程序原入口点(OEP)从这个时候起壳就把控制权交还给原程序了,一般的壳在这里会有明显的一个“分界线”。但现在的猛壳己没这界限了,壳里有肉,肉里有壳。一般壳的加载过程如图所示加壳软件介绍加壳软件按照其加壳目的和作用,可分为两类一是压缩(PACKERS),二是保护(PROTECTORS)。压缩这类壳主要目的是减小程序体积,如ASPACK、UPX和PECOMPACT等。另一类是保护程序,用上了各种反跟踪技术保护程序不被调试、脱壳等,其加壳后的体积大小不是其考虑的主要因素,如ASPROTECT、ARMADILLO、EXECRYPTOR等。随着加壳技术的发展,这两类软件之间的界线越来越模糊,很多加壳软件除具有较强的压缩性能,同时也有了较强的保护性能。各类加壳软件,其压缩算法一般不是自己实现的,大多是调用其他的压缩引擎。目前压缩引擎种类比较多,不同的压缩引擎有不同特点,如一些对图像压缩效果好,一些对数据压缩效果好。而加壳软件选择压缩引擎有一个特点,在保证压缩比的条件下,压缩速度慢些关系不是太大,但解压速度一定要快,这样加了壳的EXE文件运行起来速度才不会受太大的影响。常用压缩壳介绍1ASPACK主页HTTP/WWWASPACKCOM/ASPACK是款WIN32可执行文件压缩软件,可压缩WINDOWS32位可执行文件(EXE)以及库文件(DLL、OCX),文件压缩比率高达4070。2UPX主页HTTP/UPXSOURCEFORGENET/UPX是一个以命令行方式操作的可执行文件经典免费压缩程序,压缩算法自己实现,速度极快。3PECOMPACT主页HTTP/WWWBITSUMCOM/PECOMPACT同样也是一款能压缩可执行文件的工具(支持EXE、DLL、SCR、OCX等文件)。相比同类软件,PECOMPACT提供了多种压缩项目的选择,用户可以根据需要确定哪些内部资源需要压缩处理。同时,该软件还提供了加解密的插件接口功能。【51CTOCOM独家特稿,转载请注明出处及作者】【相关文章】黑客老鸟讲逆向分析有关脱壳以及脱壳实例讲解HTTP/NETSECURITY51CTOCOM/200802251502子明51CTOCOM我要评论0【51CTOCOM专家特稿】上节课讲了许多有关壳的知识,下面我们就开始讲如何脱壳,以及脱壳时要用的的一些工具,首先是查壳,当前流行的查壳工具主要以PEID和FILEINFO这两个软件为代表。PEID的原理是利用查特征串搜索来完成识别工作的。各种开发语言都有固定的启动代码部分,利用这点就可识别出何种语言编译的。同样,不同的壳也有其特征码,利用这点就可以识别是被何种壳所加密。PEID提供了一个扩展接口文件USERDBTXT,用户可以自定义一些特征码,这样就可识别出新的文件类型。一般的压缩壳,如ASPACK等都有专用的脱壳机。而加密壳(如ASPROTECT,ARMADILLO)一般很少有脱壳机,必须手工脱壳。手工脱壳一般情况是分三步一是查找程序的真正入口点(OEP);二是抓取内存映像文件;三是输入表重建。(当然现在的加密壳复杂些,要考虑更多的东西)OEP是ORIGINALENTRYPOINT缩写,即程序加壳前的真正的入口点。如何寻找OEP外壳初始化的现场环境(各寄存器值)与原程序的现场环境是相同的。加壳程序初始化时保存各寄存器的值,外壳执行完毕,会恢复各寄存器内容。其代码形式一般如下PUSHFD将标志寄存器入栈保存PUSHADPUSHEAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI外壳代码部分POPADPOPEDI,ESI,EBP,ESP,EBX,EDX,ECX,EAXPOPFD恢复标志寄存器JMPOEPOEP解压后的程序原代码方法一利用UPX通用脱壳机自动脱壳脱壳后的程序,利用PEID进行分析,PEID给出如下的信息BORLANDDELPHI6070方法二跨段指令寻找OEP用OLLYDBG来调试脱壳,运行OLLYDBG,点击菜单“OPTIONS/DEBUGGINGOPTIONS”,选择EVENTS项,将第一次暂停设在WINMAIN函数上。OLLYDBG打开实例BANDOOKV135EXE相关代码006E044060PUSHAD/一开始OLLYDBG就会中断这行,这个就是外壳的入口点,注意这个PUSHAD指令如下图所示绝大多数加壳程序在被加密的程序中加上一个或多个段,所以依据跨段的转移指令(JMP)就可找到真正的入口点,此时就会有POPAD/POPFD指令出现。UPX用了一次跨段的转移指令(JMP),在跳到OEP处会看到虚拟地址的值有一个突变,此时就能确定OEP了。UPX壳比较简单,中断WINMAIN后,只需要在OLLYDBG里往下翻屏,就会发现这个跨段转移指令上图相关代码如下006E05A261POPAD/注意这里的POPAD指令,和开始的PUSHAD对应006E05A3E9444EE7FFJMP005553EC/这里跳到OEP,将光标移到这,按F4执行到这行这句006E05A3JMP005553EC就是跳到OEP的指令,执行到这,UPX外壳己将程序解压完毕,并模拟WINDOWS加载器将原始程序加载到内存,005553EC就是映射到内存目标程序的入口点,此时就可抓取内存映像文件了。相关代码005553EC55PUSHEBP005553ED8BECMOVEBP,ESP选择PLUGINSOLLYDUMPDUMPDEBUGGEDPROCESS项,DUMP保存成新的文件。方法三编译语言特点找OEP各类语言编译的文件入口点都有一些规律,可以这利用这点来寻找入口点。1)DELPHI程序执行程序,用LORDPE(或PRODUMP)选DUMPFULL脱壳,存为DUMPEXE。接着用HEXWORKSHOP打开DUMPEXE,搜索文本“RUNTIME”,搜到后,向前查找离“RUNTIME”最近的十六进制数字“558BEC”,数字所在的地址就是程序的OEP。2)VISUALC程序可以利用VISUALC启动部分几个函数GETCOMMANDLINEAW、GETVERSION、GETMODULEHANDLEAW、GETSTARTUPINFOAW等来定位程序的OEP。常见的各类编译语言的入口汇编代码都要熟悉,因为一些加密强壳会偷OEP处的代码到壳里,一般情况各编译语言入口代码都相同,到时只需要直接引用相关程序的入口代码,这给我们恢复代码带来方便。其它技术通过堆栈平衡寻找OEP,通过内存断点寻找OEP补充讲解一下WINDOWSAPI函数,这可是脱壳的时候离不开的,如果熟悉了它可以更快的找到程序的入口及程序领空WIN32API是基于C语言的接口,但是WIN32API中的函数可以由用不同语言编写的程序调用。WINDOWS的主要部分有三个主要子系统,分别是KERNEL/USER/GDI。KERNEL操作系统核心功能服务,包括进行与线程控制、内存管理、文件访问等;USER负责处理用户接口,包括键盘和鼠标输入、窗口和菜单管理等;GDI图形设备接口,允许程序在屏幕和打印机上显示文本和图形。常用WIN32API函数GETWINDOWTEXT函数,作用是取得一个窗体的标题文字,或文本控件的内容。GETDLGITEMTEXT函数,作用是获取对话框文本。GETMODULEFILENAME函数INTERNETOPEN函数INTERNETOPENURL函数SETWINDOWSHOOKEX函数ADJUSTTOKENPRIVILEGES函数LOOKUPPRIVILEGEVALUE函数OPENPROCESSTOKEN函数GETCURRENTPROCESSID函数GETCURRENTPROCESS函数GETWINDOWTHREADPROCESSID函数GETCOMPUTERNAME函数【51CTOCOM独家特稿,转载请注明出处及作者】【相关文章】黑客老鸟讲逆向分析逆向分析技术全揭秘2HTTP/NETSECURITY51CTOCOM/200802251523子明51CTOCOM我要评论0静态分析静态分析从反汇编出来的程序清单上分析程序流程,了解模块完成的功能。静态分析先分析程序的文件类型,如果程序使用加壳保护,则要先进行脱壳。通过静态分析工具加载程序进行分析。(例如IDAPRO工具)动态分析技术动态跟踪调试程序,分为用户模式和内核模式两种类型。用户模式调试器是指用来调试用户模式的应用程序,工作在RING3级。(例如VC编译器调试器)内容模式调试器是指能调试系统内核的调试器,工作在RING0级。(例如SOFTICE、OLLDBG)OD动态分析调试中常用的快捷键F2设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点。F8单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到CALL等子程序不进入其代码。F7单步步入。功能同单步步过F8类似,区别是遇到CALL等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。F4运行到选定位置。作用就是直接运行到光标所在位置处暂停。F9运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。CTRF9执行到返回。此命令在执行到一个RET返回指令指令时暂停,常用于从系统领空返回到我们调试的程序领空。ALTF9执行到用户代码。可用于从系统领空快速返回到我们调试的程序领空。黑客老鸟讲逆向分析逆向分析技术全揭秘3HTTP/NETSECURITY51CTOCOM/200802251523子明51CTOCOM我要评论0结构化异常处理结构化异常处理(STRUCTUREDEXCEPTIONHANDLING,简称SEH)是WINDOWS操作系统处理程序错误或异常的技术。两种类型的异常处理句柄一种是FINAL型的,这是在异常未能得到线程相关处理例程处理操作系统在即将关闭程序之前会回调的例程,这个例程是进程相关而不是线程相关的,因此无论是哪个线程发生异常未能被处理都会调用这个例程另一种是PER_THREADEXCEPTIONHANDLER线程相关的异常处理,通常每个线程初始化准备好运行时FS指向一个TIB结构THREADINFOR

温馨提示

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

评论

0/150

提交评论