Presentation is loading. Please wait.

Presentation is loading. Please wait.

PE解析器 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:

Similar presentations


Presentation on theme: "PE解析器 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:"— Presentation transcript:

1 PE解析器 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:www.bcdaren.com
联系QQ: QQ交流群 : 联系电话:

2 这个项目的意义: 这个项目所涉及到的知识: 1 掌握Win32 Dialog开发程序的一般步骤;
2 把PE学的理论知识转换为实践,加深对PE的理解; 3 了解大文件分割的原理; 4 了解文件加密的原理; 这个项目所涉及到的知识: 1 《编程达人·基础课程——WIN32基础》中的对话框编程的基本知识; 2 《编程达人·基础课程——PE》相关的理论知识; 3 《编程达人·基础课程——WIN32基础》中的常用控件的操作; 4 《编程达人·基础课程——C语言》中的文件相关的知识;

3 昆山爱达人信息技术有限公司 QQ: 演示效果预览

4 昆山爱达人信息技术有限公司 QQ: PE简介 PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件。 PE ELF COFF之间有何“恩怨”? PE是Windows操作系统下的可执行文件格式;ELF(Executable Linkable Format) 是Linux下的可执行文件格式;COFF(Common Object File Format)它最早在Unix上使用; 学习PE的意义:可执行文件的格式涵盖了程序的编译、链接、装载和执行的各个方面。了解它的结构并深入剖析它对于认识系统、了解背后的机制大有好处

5 昆山爱达人信息技术有限公司 QQ: PE结构

6 PE结构 与解析相关的数据结构 IMAGE_DOS_HEADER IMAGE_NT_HEADERS IMAGE_FILE_HEADER
昆山爱达人信息技术有限公司 QQ: PE结构 与解析相关的数据结构 IMAGE_DOS_HEADER IMAGE_NT_HEADERS IMAGE_FILE_HEADER IMAGE_OPTIONAL_HEADER IMAGE_SECTION_HEADER IMAGE_IMPORT_DESCRIPTOR IMAGE_EXPORT_DIRECTORY

7 RVA与FOA的恩怨 在PE解析以及以后相关的操作中RVA与FOA的相互转换是必须面对的一个问题。 昆山爱达人信息技术有限公司
QQ: RVA与FOA的恩怨 在PE解析以及以后相关的操作中RVA与FOA的相互转换是必须面对的一个问题。 //功能:RVA与RAW的相互转换 //参数:pPEPath:PE文件路径, // bRVATORAW: TRUE, RVA to RAW // FALSE,RAW to RVA //返回值:转换后的值,为0则转换失败 DWORD RVATORAW(IN const char *pPEPath,IN DWORD dwOffset,IN BOOL bRVATORAW) { void *pFileBuf = ReadPE(pPEPath,NULL); if(pFileBuf == NULL) return FALSE; IMAGE_DOS_HEADER *pIDH = (IMAGE_DOS_HEADER *)pFileBuf; IMAGE_NT_HEADERS *pINGS = (IMAGE_NT_HEADERS *)((DWORD)pFileBuf+pIDH->e_lfanew); IMAGE_FILE_HEADER IFH = pINGS->FileHeader; DWORD dwNumberOfSecs = IFH.NumberOfSections; IMAGE_OPTIONAL_HEADER IOH = pINGS->OptionalHeader; IMAGE_SECTION_HEADER *pISH = (IMAGE_SECTION_HEADER *)((DWORD)pFileBuf + pIDH->e_lfanew + sizeof(IMAGE_NT_HEADERS)); //计算需要分配的FileBuf大小; IMAGE_SECTION_HEADER *pISHTmp = pISH; //若dwOffset,则说明在PE头中,RVA==RAW if(dwOffset < IOH.SizeOfHeaders) return dwOffset; //进行RVA---->RAW if(bRVATORAW) for(DWORD i=0;i<dwNumberOfSecs;i++) {//这个比较公式很重要 好好理解为何是SizeOfRawData,哈哈这才是精髓 if(pISHTmp->VirtualAddress <= dwOffset && dwOffset<= pISHTmp->VirtualAddress + pISHTmp->SizeOfRawData) return dwOffset-pISHTmp->VirtualAddress+pISHTmp->PointerToRawData; } pISHTmp++; //进行RAW---->RVA else {//这个比较公式很重要 好好理解为何是取pISHTmp->SizeOfRawData pISHTmp->Misc.VirtualSize中大的,哈哈这才是精髓 if(pISHTmp->PointerToRawData <= dwOffset && dwOffset<= pISHTmp->VirtualAddress + (pISHTmp->SizeOfRawData>pISHTmp->Misc.VirtualSize?pISHTmp->SizeOfRawData:pISHTmp->Misc.VirtualSize)) return dwOffset-pISHTmp->PointerToRawData+pISHTmp->VirtualAddress; UnReadPE(pFileBuf); return NULL;

8 文件加密 概念:简单讲就是对一串011010101…..数据按照某种规则进行处理, 这种处理的过程就称为加密
昆山爱达人信息技术有限公司 QQ: 文件加密 概念:简单讲就是对一串 …..数据按照某种规则进行处理, 这种处理的过程就称为加密 加密方式很多,我们这边的方式仅仅提供参考以加深对加密原理的理解,比如:字符加密,字符串加密,异或加密 当然,现在有很多文件加密的库比如Crypto++。大家在工程中需要加密的话尽量使用加密库

9 文件加密算法 字符加密: for(i = 0; i< ImageFile.dwFileLen; i++) {
昆山爱达人信息技术有限公司 QQ: 文件加密算法 字符加密: for(i = 0; i< ImageFile.dwFileLen; i++) { *ptemp = *ptemp + 'j'; ptemp++; } 字符串加密:(真的就这么完美吗?) for(i = 0; i < ImageFile.dwFileLen / codeLen; i++) for(char j = 0; j < codeLen; j++) *ptemp = *ptemp + codeBuf[j]; 异或加密:留给你自己思考啦!

10 文件分割 文件分割原理就如同把把一块大的蛋糕切割开,只是文件分割要求能复原 为何需要文件分割? 有哪些分割算法? 昆山爱达人信息技术有限公司
QQ: 文件分割 文件分割原理就如同把把一块大的蛋糕切割开,只是文件分割要求能复原 为何需要文件分割? 有哪些分割算法?

11 文件合并 显然,文件的合并是文件分割的逆过程。不是说文件大了才要分割吗?大文件又该如何合并呢?
昆山爱达人信息技术有限公司 QQ: 文件合并 显然,文件的合并是文件分割的逆过程。不是说文件大了才要分割吗?大文件又该如何合并呢? 如何验证我的合并算法是否正确呢?对于非常大的文件我又不能用什么其他工具来验证,怎么解决呢?

12 整个程序分析内容 Step1 会先给大家详细讲解下RVA与FOA相关转换的算法; Step2 会给大家讲解一下导入表的编程实现代码;
昆山爱达人信息技术有限公司 QQ: 整个程序分析内容 Step1 会先给大家详细讲解下RVA与FOA相关转换的算法; Step2 会给大家讲解一下导入表的编程实现代码; Step3 给大家详细讲解文件分割合并的具体实现; Step4 给大家详细讲解文件加密与解密的具体实现


Download ppt "PE解析器 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:"

Similar presentations


Ads by Google