【Exploit-ID】脱壳实战_译者小樱.doc.docVIP

  • 7
  • 0
  • 约4.77千字
  • 约 11页
  • 2017-03-05 发布于天津
  • 举报
【Exploit-ID】脱壳实战_译者小樱.doc

【翻译】脱壳实战 作者:Arunpreet Singh 译者:Sakura(小樱) 声明:原文于2011-12-14刊登在国外著名安全网站Exploit-ID,转载请注明出处。 /link/63.pdf 使用工具 1)OllyDbg 2)Process Explorer 3)PUPE 4)PE Tools 5)Hex WorkShop什么是如果你在方面有研究,那你一定听过或者使用过它。目的是保护可执行文件,这给分析或者增加了难度。在多数,的主要作用是使它们完全不被检测到。 事实上,一般的表现形式是可执行文件,我的意思是它们的来源是无法识别的,公开的可以被杀毒软件检测到。的用处是使它们无法被检测。 “加壳”原理 加壳包括了两个部分1)目标文件 2)Stub,就是一段字节型数据,是汇编代码的数据形式,在插入目标进程后可以被执行。两者是如何一起工作的呢? 。将使用加密算法(例如常用的RC4,AEC)加密。 通过加密,就可以杀毒软件的静态检测。在静态检测当中,杀毒软件尝试去找出可执行文件的模式(patterns)并匹配签名。但是因为文件已被编译,所以杀毒软件现在找不出文件的模式。 在可执行代码前添加 当你运行可执行文件时,将同时运行stub,这时stub将对加密文件进行解密。 注意:解密后的文件仍在内存中。 内存中执行解密文件。 这其实是的核心部分,也被叫做“”。有很多PE的方法。但在大多数情况下,采用了一种方法从内存中执行文件,这是我们下面要讲的重点内容。 让我来解释一下这个方法。这个方法的原始链接地址是:.sg/code/loadexe.html 我只是重复了一下这些步骤。我建议你你参考原文,理解可以更深刻些。 在原文中列出的步骤如下: 使用带有CREATE_SUSPENDED参数的CreateProcess API创建一个挂起进程,任意一个EXE文件都可以,把这个叫做第一个EXE。 调用GetThreadContext API获取挂起进程的寄存器值(线程内容)。挂起进程的EBX寄存器指向进程的PEB。EAX寄存器中包含了(第一个EXE)进程的入口点。 从挂起进程的PEB中获取基地址,例如[EXB+8]处。 在内存中加载第二个EXE(使用ReadFile),并手动执行必要的(alignment)。如果文件和内存不同,则是必要的。 如果第二个EXE文件的基地址跟挂起进程相同,并且映像大小=挂起进程的映像大小,那就使用WriteProcessMemory函数去把第二个EXE的映像进内存空间的挂起进程中,从基地址开始。 否则,使用ZwUnmapViewOfSection去第一个EXE文件的映像(由ntdll.dll导出),并用VirtualAllocEx在挂起进程的内存中为第二个EXE文件分配足够的内存空间。一定要提供第二个EXE文件的基地址给VirtualAllocEx API,确保Windows在特定的区域给我们提供内存。下一步,复制第二个EXE的映像到挂起进程的内存空间中从分配地址开始(使用WriteProcessMemory) 修补第二个EXE的基地址到挂起进程的PEB[EBX+8]处。 设定线程thread的EAX到第二个EXE的入口点处。 使用SetThreadContext API修改挂起进程的线程内容Thread context。 使用ResumeThread API去重新执行挂起进程。 一般的,当你在Ollydbg中加载一个打包的执行文件时,通常会出现警告“the code section is compressed”(代码区域已被压缩)或者“the entrypoint is outside the code section”(入口点不在代码区域内),不管怎样,Olly是在给你暗示说执行文件是打包的。不过被加密过的执行文件(使用上面所列的步骤加密的)在Olly中加载时不会出现任何的警告。 解压缩包(Unpacking) 使用PEID扫描 看上去很无辜 :P 让我们加载到Olly..看有没有警告 一切看上去都很正常,看起来很像是个正常的VB执行文件,Olly中没有出现任何的警告。 我们的目标是在上述所用方法中,。接下来,给CreateProcessA和CreateProcessW(两者ascii和unicode版本)如果它中断,它是否在挂起模式SUSPENDED MODE(同时你也可以把断点放在ReadProcessMemory和WriteProcessMemory APIs去更准确地检查下) 我把断点放在 CreateProcessW和CreateProcessA,并在Olly上运行。正如你所看到的,它在CreateProcessW处中断..同时你也看到堆stack中的参数

文档评论(0)

1亿VIP精品文档

相关文档