U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 土豆PE使用教程 >

pe导入表修改(pe导入表结构)

来源:http://www.tudoupe.com时间:2024-03-08

win7PE注册表如何修改!!

我用regedit打开注册表新建一个项名字随便起,然后导入config下的文件,修改、导出、删除新建项。
win7PE注册表如何修改!!

如何修改PE文件

一、        Windows加载器 加载器读取一个PE文件的过程如下: 1. 先读入PE文件的DOS头,PE头和Section头。 2. 然后根据PE头里的ImageBase所定义的加载地址是否可用,如果已被其他模块占用,则重新分配一块空间。 3. 根据Section头部的信息,把文件的各个Section映射到分配的空间,并根据各个Section定义的数据来修改所映射的页的属性。 4. 如果文件被加载的地址不是ImageBase定义的地址,则重新修正ImageBase。 5. 根据PE文件的输入表加载所需要的DLL到进程空间。 6. 然后替换IAT表内的数据为实际调用函数的地址。 7. 根据PE头内的数据生成初始化的堆和栈。 8. 创建初始化线程,开始运行进程。 这里要提的是加载PE文件所需DLL的过程是建立在六个底层的API上。 LdrpCheckForLoadedDll:检查要加载的模块是否已经存在。 LdrpMapDll:映射模块和所需信息到内存。 LdrpWalkImportDescriptor:遍历模块的输入表来加载其所需的其他模块。 LdrpUpdateLoadCount:计数模块的使用次数。 LdrpRunInitializeRoutines:初始化模块。 LdrpClearLoadInProgress:清楚某些标志,表明加载已经完成。 二、        插入代码到PE文件 有三种方式可以插入代码到PE文件: 1. 把代码加入到一个存在的Section的未用空间里。 2. 扩大一个存在的Section,然后把代码加入。 3. 新增一个Section。 方法一、增加代码到一个存在的Section。 首先我们需要找到一个被映射到一个块有执行权限的Section。最简单的方式就是直接利用CODE Section。 然后我们需要查找这块Section内的多余空间(也就是填满了00h)。我们知道一个Section有两个数据来表示其大小。VirtualSize和SizeOfRawData。这个VirtualSize代表Section里代码实际所占用的磁盘空间。SizeOfRawData代表根据磁盘对齐后所占的空间。通常SizeofRawData都会比VirtualSize要大。如下图。 图中的SizeOfRawData是0002A000,而VirtualSize是00029E88。当PE文件被加载到内存的时候,他们之间的多余空间的数据是不会被加载到内存去。那么如果要把加入到这个间隙中间的代码也被加载到内存去,就需要修改VirtualSize的值,这里把VirtualSize的值可以改为00029FFF。这样,我们就有了一小段空间加入自己的代码。下面需要做的就是先找到PE文件的入口点OriginalEntryPoint,比如这个OriginalEntryPoint是0002ADB4,ImageBase是400000,那么入口点的实际虚拟地址是0042ADB4。然后计算出自己代码的起始RVA,更换掉PE头内的OriginalEntryPoint,在自己的代码最后加上: MOV EAX,00042ADB4 JMP EAX 这样就可以在PE文件被加载的时候,先运行自己的代码,然后再运行PE文件本身的代码。成功的把代码加入到了PE文件内。 方法二、扩大一个存在的Section来加入代码。 如果在一个Section末尾没有足够的空间存放自己的代码,那么另外一种方法就是扩大一个存在的Section。一般我们只扩大PE文件最尾部的Section,因为这样可以避免很多问题,比如对其他Section的影响。 首先我们的找到最后一个Section使之可读可执行。这可以通过修改其对应Section头部的Characteristics来获得。然后根据PE头内文件对齐的大小,修改其SizeOfRawData。比如文件对齐的大小是200h,原先SizeOfRawData=00008000h, 那么我们增加的空间大小应该是200h的整数倍,修改完的SizeOfRawData至少是00008200h。增加完空间后,需要修改PE头内的两个字段的数值,SizeOfCode和SizeOfInitialishedData。分别为它们增加200h的大小。这样我们就成功的扩大了一个Section,然后根据方法一内的方式把代码加入到增加的空间。 方法三、新增一个Section来加入代码。 如果要加入的代码很多,那么就需要新增一个Section来存放自己的代码。 l         首先,我们需要在PE头内找到NumberOfSections,使之加1。 l         然后,在文件末尾增加一个新的空间,假设为200h,记住起始行到PE文件首部的偏移。假如这个值是00034500h。同时将PE头内的SizeOfImage的值加200h。 l         然后,找到PE头内的Section头部。通常在Section头部结束到Section数据部分开始间会有一些空间,找到Section头部的最后然后加入一个新的头部。假设最后一个Section头部的数据是: 1. Virtual offset : 34000h 2. Virtual size : 8E00h 3. Raw offset: 2F400h 4. Raw size : 8E00h 而文件对齐和Section对齐的数据分别是: 5. Section Alignment : 1000h 6. File Alignment : 200h l         那么新增加的Section必须与最后一个Section的边界对齐。它的数据分别: 1. Virtual offset : 3D000h (因为最后一个Section的最后边界是34000h + 8E00h = 3CE00h,加上Section对齐,则Virtual offset的值为3D000h)。 2. Virtual size : 200h。 3. Raw offset: 00034500h。 4. Raw size: 200h. 5. Characteristics : E0000060 (可读、可写、可执行)。 l         最后,只需要修改一下PE头内的SizeOfCode和SizeOfInitialishedData两个字段,分别加上200h。 l         剩下的就是按照方法一的方式把代码放入即可。 三、        增加执行文件的输入表项目。 在一些特殊用途上,我们需要为执行文件或DLL增加其不包含的API。那么可以通过增加这些API在输入表中的注册来达到。 1. 每一个输入的DLL都有一个IMAGE_IMPORT_DESCRIPTOR (IID)与之对应。PE头中的最后一个IID是以全0来表示整个IID数组的结束。 2. 每一个IID至少需要两个字段Name1和FirstThunk。其他字段都可以设置为0。 3. 每一个FirstThunk的数据必须是一个指向IMAGE_THUNK_DATA数组的RVA。每一个IMAGE_THUNK_DATA又包含了指向一个API名称的RVA。 4. 如果IID数组发生改变,那么只需要修改数据目录数组中对应输入表的数据结构IMAGE_DATA_DIRECTORY的iSize。 增加一个新的IID到输入表的末尾,就是把输入表末尾的全是0的IID修改成增加的新的IID,然后在增加一个全0的IID作为输入表新的末尾。但是如果在输入表末尾没有空间的话,那就需要拷贝整个输入表到一个新的足够的空间,同时修改数据目录数组对应输入表的数据结构IMAGE_DATA_DIRECTORY的RVA和iSize。 步骤一、增加一个新的IID。 把整个IID数组移到一个有足够空间来增加一个新的IID的地方。这个地方可以是.idata段的末尾或是新增一个Section来存放。修改数据目录数组对应输入表的数据结构IMAGE_DATA_DIRECTORY的RVA和iSize。如果必要,将存放新IID数组的Section大小按照Section Alignment向上取整(比如,原来大小是1500h, 而section Alignment为1000h,则调整为2000h)以便于整个段可以被映射到内存。运行移动过IID数组的执行文件,如果正常的话,则进行第二步骤。如果不工作的话,需要检查新增的IID是否已经被映射到内存及IID数组新的偏移位置是否正确。步骤二、增加一个新的DLL及其需要的函数。在.idata节内增加两个以null结尾的字符串,一个用来存放新增的DLL的名字。 一个用来存放需要导入的API的名称。这个字符串前需要增加一个为null的WORD字段来构成一个 Image_Import_By_Name数据结构。计算这个新增的DLL名称字符串的RVA.把这个RVA赋予新增的IID的Name1字段。再找到一个DWORD的空间,来存放Image_Import_by_name的RVA。这个RVA就是新增DLL的IAT表。计算上面DWORD空间的RVA,将其赋予新增IID的FirstThunk字段。运行修改完的程序。
请参照百度经验网页链接
如何修改PE文件

如何给一个PE文件增加一个给定的DLL依赖

插入DLL的方法很多,远程线程、全局钩子、注册表APP_DLL、镜像劫持、APC、修改PE导入表、马甲、HOOK LoadLibary、PsSetCreateProcessNotifyRoutineEx等。 但个人觉得这个想法是不可能实现的,矛与盾的故事。有方法把DLL载入目标进程的空间,就需要监控这个方法。在监控的驱动实现中加入逻辑,应用层传入进程ID,到监控的HOOK函数中,是这个ID进则放过。 还是使用PsSetCreateProcessNotifyRoutineEx内核回调函数,修改进程EXE的导入表加载DLL。PsSetCreateProcessNotifyRoutineEx是NtCreateProcess会调用的,所以进程创建时都会调用我们驱动中的回调函数。不过不要注册太多的内核回调函数,系统只支持20多个。
如何给一个PE文件增加一个给定的DLL依赖

WinPE系统设定如何修改(可通过修改PE注册表或配置文件来实现)

我们都知道电脑系统有各种各样的系统设定,WinPE也不例外,下面就介绍介绍这方面的知识。 其实这一步主要是指修改PE的注册表,可以直接修改PE注册表,也可以修改配置文件。 1、修改内部注册表的方法: 用前面修改PECMD.INI的方法将内部注册表的文件提取出来: /WXPE/SYSTEM32/CONFIG/*.* /WXPE/SYSTEM32/SETUPREG.HI_( 这是CAB压缩包,将它解开成SETUPREG.HIV) REGEDIT/sREG文件名 运行注册表编辑器REGEDIT.EXE,鼠标点击HKEY_LOCAL_MACHINE,然后点“文件”-“加载配置单元”,打到提取出来的注册表文件(需要改哪个就加载哪个),打开,提示挂载名时随便输入取一个名字如“WinPE”,展开HKEY_LOCAL_MACHINE后里面就有一项WinPE,然后就跟普通的注册表操作一样了,改好后用鼠标点一下“WinPE”项目,然后“文件”-“卸载配置单元”,这个文件就改好了。 用改过的注册表文件替换原来的。 2、修改配置文件的方法: 对于普通的不依赖于外置程序目录结构的注册表项目,可以用常规方法将修改项写成REG文件(可以直接从XP系统中导出,然后在其基础上修)。在外置程序目录下有个RegDoc.cmd,这个文件是毛桃用来注册外置程序文档关联的(就是改注册表),可以用记事本打开它,加入一行: 则PE加载外部配置时它会自动导入。 这是最简单的改注册表的方法。但是如果要修的项依赖于外置程序的目录结构(比如要在右键菜单中添加用UltraEdit32打开),就不能用上面的方法了,因为外置程序的绝对路径是不确定的(不同的机器中盘符不能确定)。 这种情况就需要用原始的REG命令来做了(就跟毛桃在REGDOC.CMD中的做法一样),这个命令的语法比较艰涩,且注册表键值的表示方法跟REG文件不同。在命令提示符下通过/?参数可以获得它的用法(中文的哦),提醒一下/?参数是个以多层使用的,如REG/?得到的是基本参数的说明,如用REGADD/?则可得到ADD这个参数的用法…… 有了这个命令的基础后,我们来看看是怎么解决不定路径问题的。 在REGDOC.CMD中有一个环境变量%TP%,代表的是REGDOC.CMD这个文件所在的路径。我们可以通过%TP%/../表示它的上层目录,%TP%/../../表示它的上两层目录。用此方法可以索引到外置程序目录内的所有路径,而不用考虑外置程序目录本身的绝对路径。 (还有个方法就是在WinPE.INI中用PECMD的REGI命令一行行添加,这个比系统的REG命令好理解些,同样可以用%CurDir%环境变量来索引外置程序目录内的所有路径) 直接修改的好处是启动PE就是所需要设置,不依赖外部配置文件,PE的加载速度也比较快,但麻烦。修改配置文件则比较简单,但要依赖配置文件加载过程(直到加载到那些语句时才会生效),启动时需要额外的时间加载,相当于给系统打补丁去修改默认设置。 一般情况下不推荐直接修改PE注册表,麻烦,重新打包也比较花时间。但有些跟系统紧密的键必须直接修改才有效,比如屏幕分辨率,虽然在外面也可以修改有,但在登录时加载到它之前是无效的,那么在登录的过程中屏幕就会因切换分辨率而闪烁。 自己修改注册表的前提是自己要知道所希望的改变要修注册表中的哪些键值。可以上网搜索,现在网上的这些资源多得是,实在找不到的话可以还可以用RegMon之类的注册表监视软件来定位。 比如修改记事本的自动换行,又不知道相应的键值在哪。可以先开启RegMon,然后在记事本中改变换行的选项,看RegMon的监视结果,来定位是哪个键值。因为系统本身也在不断的更改注册表,RegMon中的显示会很多,但是通过不断的改变记事本中的设置,最终是可以找到的,这个过程需要的是耐心和细心。
WinPE系统设定如何修改(可通过修改PE注册表或配置文件来实现)

怎么利用WinPE恢复系统注册表

pe系统环境下修改注册表,是可行的,但较复杂,要较了解注册表,因此修改失败,可能会出现奇怪的问题 大至方法为:pe系统环境下运行注册表工具载入硬盘系统中的注册表,导入备份的注册表具体请百度 常用的注册表工具为:Registry Workshop
注册表的恢复只有提前备份,才能使用备份还原。使用u盘PE系统,没有备份是不能恢复注册表的。 比是否有备份的系统镜像?如有,也可以还原的!使用工具提取注册表。 ①制作镜像备份文件步骤:local→Partition→To Tmage②还原镜像备份文件步骤:local→Partition→From Image③打开镜像浏览器→找到备份的镜像。④找到需要提取的文件→右键提取。⑤然后再在系统盘相应的路径下粘贴。参考资料:《 如何从系统镜像中提取文件?》http://jingyan.baidu.com/article/f3e34a12a6a9d4f5eb65353c.html
怎么利用WinPE恢复系统注册表

相关新闻

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息