通过遍历PEB在纯Shellcode中调用calc.exe

通过遍历PEB在纯Shellcode中调用calc.exe

💡 原文英文,约1700词,阅读约需6分钟。
📝

内容提要

PEB(进程环境块)是存储进程信息的数据结构,包含已加载模块的链表。获取PEB指针的方法包括调试器视图和内存布局分析。动态API解析通过PEB获取kernel32.dll的基地址,解析PE头,定位导出目录,最终获取函数地址,这对shellcode编写至关重要。

🎯

关键要点

  • PEB(进程环境块)是存储进程信息的数据结构,包含已加载模块的链表。
  • 获取PEB指针的方法包括调试器视图和内存布局分析。
  • PEB指针位于TEB(线程环境块)中,TEB指针在x86系统的fs:[0x18]和x64系统的gs:[0x30]。
  • 动态API解析通过PEB获取kernel32.dll的基地址,解析PE头,定位导出目录,最终获取函数地址。
  • PEB_LDR_DATA结构管理已加载模块,包含三个双向链表用于跟踪模块的加载顺序。
  • 分析PE头部结构,包括_IMAGE_DOS_HEADER和_IMAGE_NT_HEADERS,验证PE文件签名并定位导出目录。
  • 手动解析API地址的过程包括获取kernel32.dll基地址,解析PE结构,查找导出表中的函数名。
  • 使用GetProcAddress获取LoadLibraryA地址,重复步骤解析WinExec、ExitProcess等函数。

延伸问答

什么是PEB,它的作用是什么?

PEB(进程环境块)是存储进程信息的数据结构,包含已加载模块的链表,主要用于管理进程的状态和模块信息。

如何获取PEB指针?

PEB指针可以通过调试器视图查看fs/gs寄存器,或通过内存布局分析获取TEB中的PEB指针。

动态API解析的过程是怎样的?

动态API解析通过PEB获取kernel32.dll的基地址,解析PE头,定位导出目录,最终获取函数地址。

PEB_LDR_DATA结构的作用是什么?

PEB_LDR_DATA结构管理已加载模块,包含三个双向链表用于跟踪模块的加载顺序。

如何手动解析API地址?

手动解析API地址的过程包括获取kernel32.dll基地址,解析PE结构,查找导出表中的函数名。

PE头部结构包含哪些重要信息?

PE头部结构包括_IMAGE_DOS_HEADER和_IMAGE_NT_HEADERS,验证PE文件签名并定位导出目录。

➡️

继续阅读