网站大量收购闲置独家精品文档,联系QQ:2885784924

PE查看工具编写-解密系列【工具篇】课案.ppt

PE查看工具编写-解密系列【工具篇】课案.ppt

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PE查看工具编写-解密系列【工具篇】课案

工具篇 -- PEInfo 实践是检验学习成果的唯一标准!通过本章节的学习,大家可以学会自己编写一个PE结构的分析工具,这对于理解PE格式和相关原理非常有帮助的^~^ 程序预览:PEInfo.exe 编程思路:文件格式检查 - FileHeader读取 - FileOptionalHeader读取 - 数据目录表读取 - 区块表读取 - 输出表读取 - 输入表读取 工具篇 -- PEInfo PE格式分析工具的编写并不难,主要就是对PE格式的各个结构进行定位。 我们在头文件里边定义了一个MAP_FILE_STRUCT 结构来存放有关信息。 typedef struct _MAP_FILE_STRUCT { HANDLE hFile; // 文件句柄 HANDLE hMapping; // 映射文件句柄 LPVOID ImageBase; // 映像基址 } MAP_FILE_STRUCT, *PMAP_FILE_STRUCT; 文件格式检查 DOS stub - PE IMAGE_DOS_HEADER STRUCT { WORD e_magic // DOS可执行文件标记 。。。。。。 DWORD e_lfanew // 指向PE文件头(+3ch) } PIMAGE_DOS_HEADER ENDS PIMAGE_DOS_HEADER pDH = NULL; 判断pDH - e_magic == ‘MZ’; 并通过 pDH - e_lfanew 找到 IMAGE_NT_HEADERS 文件格式检查 IMAGE_NT_HEADERS STRUCT { DWORD Signature IMAGE_FILE_HEADER FileHeader IMAGE_OPTIONAL_HEADER32 OptionalHeader } PIMAGE_NT_HEADERS ENDS PIMAGE_NT_HEADERS pNTH = NULL; 检测pNTH - Signature == ‘PE’; 至此,我们确定他符合PE文件的特征。 具体C++(API编程即将推出)实现代码: FileHeader 读取 PIMAGE_NT_HEADERS GetNtHeaders(LPVOID ImageBase) { if( !IsPEFile(ImageBase) ) return NULL; PIMAGE_NT_HEADERS pNtH; PIMAGE_DOS_HEADER pDH; pDH = (PIMAGE_DOS_HEADER)ImageBase; pNtH = (PIMAGE_NT_HEADERS)((DWORD)pDH + pDH -e_lfanew); return pNtH; } FileHeader 读取 PIMAGE_FILE_HEADER GetFileHeader(LPVOID ImageBase) { PIMAGE_DOS_HEADER pDH = NULL; PIMAGE_NT_HEADERS pNtH = NULL; PIMAGE_FILE_HEADER pFH = NULL; if( !IsPEFile(ImageBase) ) return NULL; pDH = (PIMAGE_DOS_HEADER)ImageBase; pNtH = (PIMAGE_NT_HEADERS)((DWORD)pDH + pDH - e_lfanew); pFH = pNtH - FileHeader; return pFH; } FileOptionalHeader 读取 PIMAGE_OPTIONAL_HEADER GetOptionalHeader(LPVOID ImageBase) { PIMAGE_DOS_HEADER pDH = NULL; PIMAGE_NT_HEADERS pNtH = NULL; PIMAGE_OPTIONAL_HEADER pOH = NULL; if( !IsPEFile(ImageBase) ) return NULL; pDH = (PIMAGE_DOS_HEADER)Im

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档