// PE.cpp : 定义控制台应用程序的入口点。
//DOS版PE工具制作 #include "stdafx.h"
#include <windows.h>
#include <winnt.h> int filelength(FILE *fp);
int _tmain(int argc, _TCHAR* argv[])
{
FILE *Fp;
int FpSize = 0;
short e_lfanew = 0;
fopen_s(&Fp, "C:\\Users\\Administrator\\Desktop\\MSG.exe", "rb");
FpSize = filelength(Fp);//获取文件大小
char * TempBuffer = (char *)malloc(FpSize);//申请存放文件的内存空间
if (TempBuffer == NULL)
{
fclose(Fp);
free(TempBuffer);
return 0;
}
fread_s(TempBuffer, FpSize + 1, 1, FpSize, Fp);//将文件读入内存中
TempBuffer = (char *)(TempBuffer + *(int *)(TempBuffer + 0x3c));//获取PE标志地址
PIMAGE_FILE_HEADER MyFileHeader;
printf("----------------------------------------------\n");
printf("PE标记:%08x\n", *(int *)TempBuffer);
printf("----------------------------------------------\n");
TempBuffer = TempBuffer + 0x4;//指针指向标准PE头首地址
MyFileHeader = (PIMAGE_FILE_HEADER)TempBuffer;
printf("IMAGE_FILE_HEADER结构:\n");
printf("----------------------------------------------\n");
printf("Machine : %04X\n", MyFileHeader->Machine);//运行平台
printf("NumberOfSections : %04X\n", MyFileHeader->NumberOfSections);//区块数目
printf("TimeDateStamp : %08X\n", MyFileHeader->TimeDateStamp);//文件日期时间戳
printf("PointerToSymbolTable : %08X\n", MyFileHeader->PointerToSymbolTable);//指向符号表
printf("NumberOfSymbols : %08X\n", MyFileHeader->NumberOfSymbols);//符号表中的符号数量
printf("SizeOfOptionalHeader : %04X\n", MyFileHeader->SizeOfOptionalHeader);//映像可选头结构的大小
printf("Characteristics : %04X\n", MyFileHeader->Characteristics);//文件特征值
printf("----------------------------------------------\n");
TempBuffer = TempBuffer + 0x14;//指针指向可选PE头首地址
PIMAGE_OPTIONAL_HEADER MyOptionalHeader;
MyOptionalHeader = (PIMAGE_OPTIONAL_HEADER)TempBuffer;
printf("IMAGE_OPTIONAL_HEADER结构:\n");
printf("----------------------------------------------\n");
printf("Magic : %04X\n", MyOptionalHeader->Magic);//幻数,32位pe文件总为010bh
printf("MajorLinkerVersion : %02X\n", MyOptionalHeader->MajorLinkerVersion);//连接器主版本号
printf("MinorLinkerVersion : %02X\n", MyOptionalHeader->MinorLinkerVersion);//连接器副版本号
printf("SizeOfCode : %08X\n", MyOptionalHeader->SizeOfCode);//代码段总大小
printf("SizeOfInitializedData : %08X\n", MyOptionalHeader->SizeOfInitializedData);//已初始化数据段总大小
printf("SizeOfUninitializedData : %08X\n", MyOptionalHeader->SizeOfUninitializedData);//未初始化数据段总大小
printf("AddressOfEntryPoint : %08X\n", MyOptionalHeader->AddressOfEntryPoint);//程序执行入口地址(RVA)
printf("BaseOfCode : %08X\n", MyOptionalHeader->BaseOfCode);//代码段起始地址(RVA)
printf("BaseOfData : %08X\n", MyOptionalHeader->BaseOfData);//数据段起始地址(RVA)
printf("ImageBase : %08X\n", MyOptionalHeader->ImageBase);//程序默认的装入起始地址
printf("SectionAlignment : %08X\n", MyOptionalHeader->SectionAlignment);//内存中区块的对齐单位
printf("FileAlignment : %08X\n", MyOptionalHeader->FileAlignment);//文件中区块的对齐单位
printf("MajorOperatingSystemVersion : %04X\n", MyOptionalHeader->MajorOperatingSystemVersion);//所需操作系统主版本号
printf("MinorOperatingSystemVersion : %04X\n", MyOptionalHeader->MinorOperatingSystemVersion);//所需操作系统副版本号
printf("MajorImageVersion : %04X\n", MyOptionalHeader->MajorImageVersion);//自定义主版本号
printf("MinorImageVersion : %04X\n", MyOptionalHeader->MinorImageVersion);//自定义副版本号
printf("MajorSubsystemVersion : %04X\n", MyOptionalHeader->MajorSubsystemVersion);//所需子系统主版本号
printf("MinorSubsystemVersion : %04X\n", MyOptionalHeader->MinorSubsystemVersion);//所需子系统副版本号
printf("Win32VersionValue : %08X\n", MyOptionalHeader->Win32VersionValue);//总是0
printf("SizeOfImage : %08X\n", MyOptionalHeader->SizeOfImage);//pe文件在内存中的映像总大小
printf("SizeOfHeaders : %08X\n", MyOptionalHeader->SizeOfHeaders);//从pe文件开始到节表(包含节表)的总大小
printf("CheckSum : %08X\n", MyOptionalHeader->CheckSum);//pe文件CRC校验和
printf("Subsystem : %04X\n", MyOptionalHeader->Subsystem);//用户界面使用的子系统类型
printf("DllCharacteristics : %04X\n", MyOptionalHeader->DllCharacteristics);//为0
printf("SizeOfStackReserve : %08X\n", MyOptionalHeader->SizeOfStackReserve);//为线程的栈初始保留的虚拟内存的默认值
printf("SizeOfStackCommit : %08X\n", MyOptionalHeader->SizeOfStackCommit);//为线程的栈初始提交的虚拟内存的大小
printf("SizeOfHeapReserve : %08X\n", MyOptionalHeader->SizeOfHeapReserve);//为进程的堆保留的虚拟内存的大小
printf("SizeOfHeapCommit : %08X\n", MyOptionalHeader->SizeOfHeapCommit);//为进程的堆初始提交的虚拟内存的大小
printf("LoaderFlags : %08X\n", MyOptionalHeader->LoaderFlags);//为0
printf("NumberOfRvaAndSizes : %08X\n", MyOptionalHeader->NumberOfRvaAndSizes);//数据目录结构数组的项数,总为 00000010h
TempBuffer = TempBuffer + MyFileHeader->SizeOfOptionalHeader;//指针指向区块首地址
printf("----------------------------------------------\n");
printf("节表信息:\n");
printf("----------------------------------------------\n");
PIMAGE_SECTION_HEADER MySectionHeader;
MySectionHeader = (PIMAGE_SECTION_HEADER)TempBuffer;
for (int i = 0; i < MyFileHeader->NumberOfSections; i++)
{
printf("Name : %s\n", MySectionHeader->Name);//区块名字
printf("Misc : %08X\n", MySectionHeader->Misc);//在没有对齐前的真实大小
printf("VirtualAddress : %08X\n", MySectionHeader->VirtualAddress);//节区在内存中的偏移地址
printf("SizeOfRawData : %08X\n", MySectionHeader->SizeOfRawData);//节在文件中对齐后的大小
printf("PointerToRawData : %08X\n", MySectionHeader->PointerToRawData);//节区在文件中的偏移
printf("PointerToRelocations : %08X\n", MySectionHeader->PointerToRelocations);//在OBJ文件中使用 无意义
printf("PointerToLinenumbers : %08X\n", MySectionHeader->PointerToLinenumbers);//行号表的位置 调试的时候用
printf("NumberOfRelocations : %04X\n", MySectionHeader->NumberOfRelocations);//在OBJ文件中使用 对EXE无意义
printf("NumberOfLinenumbers : %04X\n", MySectionHeader->NumberOfLinenumbers);//行号表中行号的数量 调试的时候用
printf("Characteristics : %08X\n", MySectionHeader->Characteristics);//节的属性
printf("----------------------------------------------\n");
MySectionHeader++;
} fclose(Fp);
getchar();
free(TempBuffer);
return 0;
}
//获取文件大小 int filelength(FILE *fp)
{
int num;
fseek(fp, 0, SEEK_END);
num = ftell(fp);
fseek(fp, 0, SEEK_SET);
return num; }

DOS版PE工具制作的更多相关文章

  1. Ubuntu Builder —— 一个制作自己的发行版的工具

    Ubuntu Builder 是一个使用起来很简单的用来构建基于 Ubunut 的自己的发行版的工具. 你可以下载最新的 Ubuntu Builder 的 DEB 安装包.下载和安装请前往:http: ...

  2. PE工具

    PE编辑工具 Stud_PE v. 2.4.0.1 PE工具,用来学习PE格式十分方便. http://www.cgsoftlabs.ro/ 汉化版:http://bbs.pediy.com/show ...

  3. 怎样用通用pe工具箱制作U盘启动盘

    U盘启动盘制作过程,随着网络的普及,电脑已经成为我们日常生活中的重要一环,最近自己重装了下电脑系统,无意中发现一个傻瓜式的U盘装系统方法,就把怎么制作通用pe工具箱u盘启动盘的经验拿出来跟大家分享下. ...

  4. 如何让你的手机U盘集PE工具、系统安装、无线破解等众多功能于一身

    不久前,手里的U盘坏了,于是乎,又在网上淘了一个Type-C U盘,刚好手机电脑都可以用. 那么现在U有了,我们要做什么呢? 第一:让U盘插在手机上时,可以供手机读写,实现手机存储扩容,随插随用,简单 ...

  5. PE工具列表(看雪学院)

    PE编辑工具 Stud_PE v. 2.6.0.5 Stud_PE v.2.6.1.0 (2.61汉化版)   PE工具,用来学习PE格式十分方便. LordPE DLX增强版(2008.5.31) ...

  6. 使用MBROSTool 工具制作本地硬盘F3救急模式的方法总结

    前面写了一篇使用MBROSTool 工具制作本地硬盘多启动盘的方法总结.里面就是可以把一些系统安装到硬盘上面方便使用,比如安装PE到硬盘,不过启动的时候会先进入多UDm菜单,然后选择[启动本地系统]后 ...

  7. 使用MBROSTool 工具制作U盘多启动盘的方法总结

    前段时间写了一个自用五合一多启动盘分享--分别用来维护娱乐,wifi密码破解,win&mac登陆密码绕过/清除,反馈的同学还是挺多,觉得大家都有这方面的需求,于是再把自己的使用经验总结一下. ...

  8. 使用MBROSTool 工具制作本地硬盘多启动盘的方法总结

    前段时间写了一个自用五合一多启动盘分享--分别用来维护娱乐,wifi密码破解,win&mac登陆密码绕过/清除,反馈的同学还是挺多,觉得大家都有这方面的需求,于是再把自己的使用经验总结一下. ...

  9. Windows PE 工具

    通过大白菜.老毛桃等装机软件,然后制作 U 盘启动工具, 1. 什么是 windows pe 工具 PE(Preinstall Environment),Win pe 全称 Windows Prein ...

随机推荐

  1. CSS3实现带阴影的弹球

    实现div上下跳动时,底部阴影随着变化 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  2. Java文件 ---RandomAccessFile示例

    RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件 ...

  3. P1875 佳佳的魔法药水

    P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 ……怎么样才能 ...

  4. 绑定host域名 修改手机hosts域名

    windows: C:\Windows\System32\drivers\etc\hosts # 在这儿输入你需要绑定的 hosts 116.31.72.421129 bro-user.flyme.c ...

  5. 把实体bean对象转换成DBObject工具类

    import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util ...

  6. js和CSS3炫酷3D相册展示

    <!doctype html> <html> <head> <meta charset="UTF"> <title>js ...

  7. 《Cracking the Coding Interview》——第8章:面向对象设计——题目7

    2014-04-23 23:38 题目:你要如何设计一个聊天服务器,有什么技术难点? 解法:这是基于工作经验的面试题吗?否则,一个new grad碰上这种题目能打点草稿也就算不错了. 代码: // 8 ...

  8. python学习笔记七:浅拷贝深拷贝

    原理 浅拷贝 import copy b = copy.copy(a) demo: >>> a=[1,['a']] >>> b=a >>> c=c ...

  9. SpringMVC 集成 Freemarker 模板引擎

    本文通过 maven 项目中集成 1.引入 SpringMVC 与 Freemarker 需要的依赖 <!-- SpringMVC --> <dependency> <g ...

  10. 201621123034 《Java程序设计》第14周学习总结

    作业14-数据库 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截 ...