主要学习了,PE的简单知识,代码进行了实现 // PEOperate.cpp: implementation of the PEOperate class. // ////////////////////////////////////////////////////////////////////// #include "PEOperate.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////...

阅读全文>>

测试代码的效果, 只适用于 win自带的 程序   void TestPrintBindImportDirectory(LPSTR lpszFile) { LPVOID pFileBuffer = NULL; pFileBuffer= ReadPEFile(lpszFile); if(!pFileBuffer) { printf("文件读取失败\n"); return; } PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNTHeader ...

阅读全文>>

导入表有些复杂,文件与内存中的格式不太一样 理解导入表的结构是关键 void TestPrintImportDirectory(LPSTR lpszFile) { LPVOID pFileBuffer = NULL; pFileBuffer= ReadPEFile(lpszFile); if(!pFileBuffer) { printf("文件读取失败\n"); return; } PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNTHeader = NULL; PIMAGE_FIL...

阅读全文>>

直接更改文件的ImageBase,进行的测试   void testUseReloc(LPSTR lpszFile) { LPVOID pFileBuffer = NULL; pFileBuffer= ReadPEFile(lpszFile); if(!pFileBuffer) { printf("文件读取失败\n"); return; } PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNTHeader = NULL; PIMAGE_FILE_HE...

阅读全文>>

很笨的方法 (写过才能知道,哪些地方,需要注意,开始想的很简单,就三部,写了 一个多小时!!) void TestMoveRelocDirectory(LPSTR lpszFile) { /* 1 新增一个节 2 把重定位的表 移动到那个节中 3 更改标志位 */ LPVOID pFileBuffer = NULL; pFileBuffer= ReadPEFile(lpszFile); if(!pFileBuffer) { printf("文件读取失败\n"); return; } PIMAGE_DOS_HE...

阅读全文>>

具体创建如何创建def类型的导出表可以直接自己测试 这里只贴 使用的代码 // 20171111_01.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <Windows.h> #pragma comment(lib,"TestDef.lib") /* extern "C" __declspec(dllimport) __stdcall Plus(int x,int y); extern "...

阅读全文>>

1 在DLL中新增一个节, 并返回新增的FOA 2 复制AddressOfFunctions  长度:4*NumberOfFunctions 3 复制AddressOfNameOrdinals  长度:NumberOfNames*2 4 复制AddressOfNames  长度:NumberOfNames*4 5 复制所有的函数名 长度不确定,复制时直接修复AddressOfNames 6 复制IMAGE_EXPORT_DIRECTORY结构 7 修复IMAGE_EXPORT_DIRECTORY结构中的 AddressOfFunctions Ad...

阅读全文>>

了解表结构,输出信息,一个函数的实现 void printDirectoryRelocTable(LPSTR lpszFile) { LPVOID pFileBuffer = NULL; pFileBuffer= ReadPEFile(lpszFile); if(!pFileBuffer) { printf("文件读取失败\n"); return; } PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNTHeader = NULL; PIMAGE_FILE_HEADER pP...

阅读全文>>

网址:http://blog.csdn.net/reversalc/article/details/8022977 1 基本概念 下表描述了贯穿于本文中的一些概念: 名称 描述 地址 是“虚拟地址”而不是“物理地址”。为什么不是“物理地址”呢?因为数据在内存的位置经常在变,这样可以节省内存开支、避开错误的内存位置等的优势。同时用户并不需要知道具体的“真实地址”,因...

阅读全文>>

测试打印PE输出表信息 主要是RVA 和 FOA 之间的转换要注意, 单独写了一个函数进行转换 转换函数 DWORD RVAToFileOffset(LPVOID pFileBuffer,DWORD dwRva) { PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNTHeader = NULL; PIMAGE_FILE_HEADER pPEHeader = NULL; PIMAGE_OPTIONAL_HEADER32 pOptionHead...

阅读全文>>

开始以为很简单(直接可以进行文件更改) 一开始的思路 主要是是对节表进行合并 1: 更改节表(变为一个,更改内存大小, 更改文件大小) 2:更改属性 3: 更改节的数目 直接使用文件修改的方法(手动修改方法) 全部无法运行, 蛋疼的厉害 然后,直接先转换为 ImageBuffer,  再次修改, 几个属性,才搞定 我也不知道为什么. 贴一下修改的代码 // PEOperate.cpp: implementation...

阅读全文>>

添加一个节 需要修改的数据 1 添加一个新的节 (copy一份) 2 在新增节的后安眠, 填充40个00 3 修改pe头中节的 数量 4 修改SizeOfImage的大小 5 在原有的数据的最后,新增一个节的数据,(内存对齐的整数倍) 6 修正增加的节的属性 手动新增一个节表和节  保证修改后的程序能正常运行 编程实现,新增一个节, 病添加代码 编程实现,扩大最后一个节,并添加代码 测试代码,写的很垃圾, 可用, 不过,不推荐大家使用 void TestAddSecToFile(LP...

阅读全文>>

主要使用就是PE的知识 用到了前面两天的函数代码,这里直接贴主应用代码 void TestAddCodeInCodeSec(LPSTR lpszFile) { LPVOID pFileBuffer = NULL; pFileBuffer= ReadPEFile(lpszFile); if(!pFileBuffer) { printf("文件读取失败\n"); return; } PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNTHeader ...

阅读全文>>