如何在IAR中植入PE代码
- 格式:pdf
- 大小:945.12 KB
- 文档页数:7
SkyIAR使用说明简介 (1)1、系统恢复后精确导入IAR驱动范例 (1)2、系统封装后成套导入IAR驱动范例 (2)3、更换硬件而不更换系统范例 (3)4、更改当前磁盘控制器工作模式而不重装系统范例 (4)简介SkyIAR是由IT天空()Skyfree研发的一款用于解决磁盘控制器驱动问题的应用程序。
SkyIAR主要用于解决系统部署(系统安装)过程中,由于磁盘控制器IDE、AHCI、RAID 工作模式所带来的系统部署困难问题。
同时,SkyIAR还可以有效解决“换硬件不换系统”、“IDE改AHCI”等与磁盘控制器工作模式息息相关的问题。
SkyIAR具备“自动检测”、“自动筛选”、“一键完成”等特性,将原本复杂的磁盘控制器驱动问题简化为“一键操作”,极大的提高了技术人员的工作效率,最大程度的减少了因磁盘控制器驱动造成的系统部署蓝屏、宕机问题。
1、系统恢复后精确导入IAR驱动范例使用时机:目标计算机--> 开机--> 进入BIOS --> 调整磁盘控制器模式(如AHCI)--> 重启--> 进PE --> 恢复系统到系统盘(如C:\)--> 使用SkyIAR --> 重启--> 系统部署开始使用前提:所恢复系统映像中未包含其他磁盘控制器驱动使用方法:(1)选中“精确匹配”模式(默认模式)(2)SkyIAR会自动检测磁盘控制器硬件ID和系统类型(3)SkyIAR会自动根据磁盘控制器硬件ID和系统类型单选匹配驱动(4)如果所恢复映像是不包含其他IAR驱动的(推荐状态),无需点选两个清理项目(5)如果所恢复映像是包含其他IAR驱动的(不被推荐状态,易造成驱动冲突),可尝试点选“清理目标系统磁盘控制器驱动”(6)单击“开始”按钮,自动导入开始2、系统封装后成套导入IAR驱动范例使用时机:系统封装完成--> 重启计算机--> 进入PE环境--> 使用SkyIAR --> 备份系统为系统映像使用前提:系统是执行过封装操作的系统(不推荐任何非封装的直接克隆)使用方法:2012-8-30 15:44 上传下载附件 (77.49 KB)(1)选中“通用方案”模式(2)SkyIAR会自动检测系统类型(3)SkyIAR会根据系统类型提供适合的驱动(4)点选通用方案,SkyIAR会自动选中该方案中的驱动项目(5)封装时已删除即插即用驱动且非二次封装(推荐状态),无需点选两个清理项目(6)封装时未删除即插即用驱动或是二次封装(不推荐状态),需点选相应的清理项目(7)单击“开始”按钮,自动导入开始3、更换硬件而不更换系统范例使用时机:更换硬件后的计算机启动--> 进入BIOS --> 调整磁盘控制器模式(如AHCI)--> 重启--> 进PE --> 使用SkyIAR --> 重启进系统使用条件:更换前后的硬件平台差异不算太大,硬盘读写机制无太大差别使用方法:(1)选中“精确匹配”模式(默认模式)(2)SkyIAR会自动检测磁盘控制器硬件ID和系统类型(3)SkyIAR会自动根据磁盘控制器硬件ID和系统类型单选匹配驱动(4)点选两个清理项目(7)单击“开始”按钮,自动导入开始4、更改当前磁盘控制器工作模式而不重装系统范例使用时机:计算机启动--> 进入BIOS --> 调整磁盘控制器模式(如AHCI)--> 重启--> 进PE --> 使用SkyIAR --> 重启进系统使用条件:一般用于IDE模式改为AHCI模式使用方法:2012-8-30 15:47 上传下载附件 (76.25 KB)(1)选中“精确匹配”模式(默认模式)(2)SkyIAR会自动检测磁盘控制器硬件ID和系统类型(3)SkyIAR会自动根据磁盘控制器硬件ID和系统类型单选匹配驱动(4)由于只是是更换磁盘控制器模式,一般无需清理当前的磁盘控制器驱动(5)如果不清理当前的磁盘控制器驱动无法正常进入系统,可尝试选中清理(6)单击“开始”按钮,自动导入开始。
最近在学习罗云彬老师写的《Windows环境下32位汇编语言程序设计》书中的PE文件,着重分析了下如何在PE文件中添加可执行代码的问题。
因为书上对这个程序没有做过多分析,这里我把自己的分析过程及一些问题进行讲解,希望能给初学者一点帮助。
众所周知,PE文件是Windows下的文件格式,包括exe、dll等,那么如何向PE文件中添加可执行代码呢?我们应该有以下这些问题:1、可执行代码应该添加到PE文件的什么位置?2、如何让添加的代码最先执行?3、执行完添加的代码后如何回到原PE文件的起始地址?4、添加的代码如何获取需要用到的API地址?带着这些问题,我们的主题就开始了。
准备知识:1、首先你得知道PE文件结构,不然很多问题你不会很明白,附件中有一张我作的PE文件结构的思维导图,希望能对你有帮助。
2、新加的代码功能很简单,就是在运行这个PE文件之前弹出一个选择对话框,询问是否继续。
代码放在后面附件中,请读者先下载看看,后面的讲解中会涉及到。
3、了解Windows环境下的程序设计,不然你会不知道我在说什么,呵呵。
好了,废话不多说,我们进入正题。
1、使用通用控件GetOpenFileName函数打开一个查找文件的对话框,选择想要添加代码的文件。
获得文件句柄后,通过内存映射函数CreateFileMapping和MapViewOfFile获取PE 文件的起始地址。
然后通过对文件的MZ格式文件头和PE头分析该文件是不是有效的PE文件,如果不是直接退出,如果是则进入下一步。
这部分的代码比较简单,就直接写在下面了。
[code]local @stOF:OPENFILENAMElocal @hFile,@dwFileSize,@hMapFile,@lpMemoryinvoke RtlZeroMemory,addr @stOF,sizeof @stOF;初始化OPENFILENAME结构,以便使用mov @stOF.lStructSize,sizeof @stOFpush h WinMainpop @stOF.hwndOwnermov @stOF.lpstrFilter,offsetszExtPemov @stOF.lpstrFile,offsetszFileNamemov @stOF.nMaxFile,MAX_PATHmov @stOF.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEXISTinvoke GetOpenFileName,addr @stOF.if ! eaxjmp @F.endif; 打开文件获得文件句柄invoke CreateFile,addrszFileName,GENERIC_READ,FILE_SHARE_READ or \FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL .if eax != INVALID_HANDLE_VALUEmov @hFile,eaxinvoke GetFileSize,eax,NULLmov @dwFileSize,eax.if eax;用获得的文件句柄建立文件mappinginvoke CreateFileMapping,@hFile,NULL,PAGE_READONLY,0,0,NULL.if eaxmov @hMapFile,eaxinvoke MapViewOfFile,eax,FILE_MAP_READ,0,0,0.if eaxmov @lpMemory,eax; 检测PE 文件是否有效mov esi,@lpMemoryassume esi:ptr IMAGE_DOS_HEADER;检查MZ格式文件头.if [esi].e_magic != IMAGE_DOS_SIGNATUREjmp _ErrFormat.endifadd esi,[esi].e_lfanewassume esi:ptr IMAGE_NT_HEADERS;检查PE文件头.if [esi].Signature != IMAGE_NT_SIGNATUREjmp _ErrFormat.endifinvoke _ProcessPeFile,@lpMemory,esi,@dwFileSize[code]判断完是有效的PE文件后,我们进入ProcessPeFile函数的编写,在这个函数中,我们要完成可执行代码的添加功能,下面的具体操作:1、将要添加代码的文件复制一份,并重命名为xxx_new.exe,然后用CreateFile函数打开文件,获取文件句柄,下面在代码中进行讲解。
教你怎么手动增加WinPE驱动教你怎么手动添加WinPE驱动关于PE驱动的问题,无忧很早以前,有一篇"PE研究院"中已经提出来了,现在我再把自己总结的经验给大家分享一下!PE最关键的就是内核驱动和外置驱动,内核驱动主要就是南桥驱动.针对RAID.SATA.以及AHCI,这是PE最关键的部份.主要是让PE 能够识别系统的硬盘和RAID磁盘阵列,集成在WINPE.IS_/SYSTEM32/DRIVERS/中..相关驱动的配置在txtsetup.sif中...这里就介绍txtsetup.sif的配置...关于安装配置文件txtsetup.sif的简单说明[WinntDirectories]这个字段是用代码表示文件拷贝的目标文件夹,其根目录为% WinDir%即安装指定的Windows文件夹。
[SourceDiskFiles] 根据前面设定的代码表示文件拷贝的具体细节,下面三段为集成SATA SCSI等驱动时所用[HardwareIdsDatebase]—硬件标识[SCSI.load]——SCSI驱动加载[SCSI]??——SCSI设备说明添加srs驱动实例:在WinPE中添加sata,raid驱动的方法(这里以Intel MatrixStorage Manager driver为例,以便于说明,以下描述的驱动文件名只基于本实例,实际操作中的具体的文件名称以需要添加的具体驱动为准)1、准备材料:a、原版驱动文件b、从WinPE中提取的txtsetup.sif文件2、从WinPE中提取txtsetup.sif文件:先将WinPE中的winpe.is_重命名为winpe.cab,然后用RAR解压出winpe.iso,用UltraISO打开它,将txtsetup.sif提取出来,并用记事本打开备用。
3、修改txtsetup.sif文件a、打开驱动包,里面有一个扩展名为“.inf”或“.oem”的小文件,如“oemsetup.inf”或者“txtsetup.oem”等(本例中为“txtsetup.oem”),用记事本打开备用;b、在txtsetup.sif中查找[SourceDisksFiles]字段,在其下添加iaStor.sys=1,,,,,,4_,4,1,,,1,4c、查找[SCSI.Load]字段,在其下添加iaStor=iaStor.sys,4d、切换到刚才打开的txtsetup.oem,查找HardwareIds关键字,将该字段下的代码全部拷贝到txtsetup.sif文件的[HardwareIdsDatabase]字段末尾,但需要更改一下代码的格式,比如将id = "PCI\VEN_8086&DEV_27C3&CC_0104","iaStor"改为PCI\VEN_8086&DEV_27C3&CC_0104=iaStore、查找[SCSI]字段,在其下添加iaStor="Intel(R) 82801FBM SATA AHCI Controller (Mobile ICH6M)"至此,修改txtsetup.sif文件部分完成,将修改后的sif文件替换原来的文件。
5.1.1基本选项配置在工作区(Workspace)中选定一个项目,单击Project下拉菜单中的Options…选项,弹出选项配置对话框,从左边Category列表框内选择General Options进入基本选项配置。
图5.1 基本选项配置中的Target选项卡图5.1所示为基本选项配置中的Target选项卡,Processor variant(处理器类型)选项区域中的Core复选框用于设置ARM核,默认为ARM7TDMI,也可以从其左边的下拉列表框中选择其它ARM核,例如ARM9、ARM11或Xscal等。
建议使用时尽可能根据当前所用ARM芯片,选中Device复选框,点击其右边的按钮,从弹出的文本框内选择所用器件,这样IAR EWARM会根据所选芯片自动设置器件描述文件,以便于调试。
如果所选ARM芯片含有浮点数协处理器,可在FPU下拉列表框内选取合适的浮点处理单元。
Endian mode选项区域用于选择大小端模式,默认为Little。
图5.2所示为基本选项配置中的Output选项卡。
Output file选项区域用于设置编译后生成的输出文件类型,可选择Executable(生成执行代码)或Library(生成库文件)。
Output directories选项区域用于设置输出文件目录,默认执行代码文件目录为Debug\Exe,目标文件目录为Debug\Obj,列表文件目录为Debug\List,也可设置其它目录。
图5.2基本选项配置中的Output选项卡图5.3基本选项配置中的Library Configuration选项卡图5.3所示为基本选项配置中的Library Configuration选项卡。
IAR C/C++编译器提供了DLIB库,支持ISO/ANSI C和C++以及IEEE754标准的浮点数。
通过Library下拉列表框选择希望采用的运行库。
选择None表示应用程序不链接运行库;选择Normal表示链接普通运行库,其中没有locale接口和C locale,不支持文件描述符,printf and scanf不支持多字节操作,strtod不支持十六进制浮点数操作。
► IAR EW430总体介绍瑞典IAR System公司推出的IAR EW软件是一种非常有效的嵌入式系统开发工具,它使用户能够充分有效地开发并管理嵌入式应用项目,其界面类似于MS Visual C++,可以在Windows平台上运行,功能十分完善。
包含有源程序文件编辑器,项目管理器,源程序调试器等,并且为C/C++编译器,汇编器,连接定位器等提供了单一而灵活的开发环境。
源级浏览器功能可以快速浏览源文件;还提供了对第三方工具软件的接口,允许启动用户指定的应用程序。
IAR EW适用于开发基于8位,16位以及32位的处理器的嵌入式系统,其具有同一界面,用户可以针对多种不同的目标处理器,在相同的集成开发环境中进行基于不同CPU嵌入式系统应用程序的开发。
另外IAR 的链接定位器(XLINK)可以输出多种格式的目标文件,使用户可以采用第三方软件进行仿真调试。
针对TI MSP430,IAR也有相应的IAR EW430软件。
其具有上面所说的所有IAR软件共有功能,另外还有所有MSP430也包括MSP430X设备的配置文档,C-SPY调试器支持FET (TI's Flash Emulation Tool )驱动,并支持实时操作系统相关信息的调试,还提供MSP430的项目例子以及相关的代码模板等。
►现给以演示来具体说明其特性和使用:♦ 1 在安装好的文件夹下面开打IAR_KickStartCard应用工程,右击鼠标选择OPTIONS会弹出如图1所示,在CATEGORY中选择GENERAL OPTION在右边点击Target,从下面的Device右边的浏览器中可以看见IAR EW430所支持的所有常见的具体设备,在选择好具体的设备后IAR软件会自动的在后台调用相应的I/O头文件,以及设备描述文件(C-SPY为了能对不同的器件的中断系统进行正确仿真,必须了解当前使用器件关于中断的详细信息,这类信息由设备描述文件.ddf文件提供)。
PE格式文件的代码注入PE格式文件的代码注入本文演示了在不需要重新编译源代码的情况下,怎样向Windows PE(Portable Executable)格式的文件(包括EXE、DLL、OCX)中注入自己的代码。
程序如图:前言或许,你想了解一个病毒程序是怎样把自身注入到一个正常的PE文件中的,又或者是,你为了保护某种数据而加密自己的PE文件,从而想实现一个打包或保护程序;而本文的目的,就是为了向大家展示,通常的EXE工具或某种恶意程序,是怎样实现上述目的的。
可以基于本文中的代码创建一个你自己的EXE修改器,如果运用得当,它可以是一个EXE保护程序,相反的话,也可能发展成某种病毒。
不管怎样,本文写作的意图是前者,对于任何不适当的用法,本文作者概不负责。
首要条件对于阅读本文,不存在任何特定强制性的先决条件——即基础知识,如果你对调试器或者PE文件格式非常熟悉,可以跳过下面的两节,而这两节是为不具备调试器或PE文件格式知识的读者准备的。
PE文件格式PE文件格式被定义用于在Windows操作系统上执行代码或存储运行程序所需的基本数据,例如:常量、变量、引入库的链接、资源数据等等,其由MS-DOS文件头信息、Windows NT文件信息、节头部及节映像等组成,见表1。
MS-DOS头部数据MS-DOS头部数据让人回想起最初在Windows操作系统上部署程序的那些日子,那些在如Windows NT 3.51这类系统上部署程序的日子——这里是说,Win3.1、Win95、Win98不是开发所需的理想操作系统。
这些MS-DOS数据的功能就是在你运行一个可执行文件时,调用一个函数显示出“This program can not be run in MS-DOS mode”或者“This program can be run only in Windows mode”,或者当你想在MS-DOS 6.0中运行一个Windows的EXE文件时,显示出一些类似的信息,所以这些数据是被保留在代码中以作提示之用,但其中最让人感兴趣的还是数据中的“MZ”,不管你相不相信,它是微软的一个程序员“Mark Zbikowski”的首字母缩写。
软件介绍AVR® IAR Embedded Workbench® IDE用户手册的这部分包括以下章节:产品介绍已安装文件1.1产品介绍嵌入式IAR Embedded Workbench®是一个非常有效的集成开发环境(IDE),它使用户充分有效地开发并管理嵌入式应用工程。
作为一个开发平台,它具备任何在用户每天的工作地方所想要的特性。
本章介绍了嵌入式IAR Embedded Workbench IDE,旨在使用户获得对本产品的所有集成工具的总体了解。
1.1.1嵌入式IAR Embedded Workbench IDE嵌入式IAR Embedded Workbench IDE提供一个框架,任何可用的工具都可以完整地嵌入其中,这些工具包括:高度优化的IAR A VR C/C++编译器;A VR IAR汇编器;通用IAR XLINK Linker;IAR XAR库创建器和IAR XLIB Librarian;一个强大的编辑器;一个工程管理器;IAR C-SPY TM调试器,一个具有世界先进水平的高级语言调试器。
嵌入式IAR Embedded Workbench适用于大量8位、16位以及32位的微处理器和微控制器,使用户在开发新的项目时也能在所熟悉的开发环境中进行。
它为用户提供一个易学和具有最大量代码继承能力的开发环境,以及对大多数和特殊目标的支持。
嵌入式IAR Embedded Workbench有效提高用户的工作效率,通过IAR工具,用户可以大大节省工作时间。
我们称这个理念为:“不同架构,同一解决方案”。
如果用户想获得关于所支持的目标处理器的更详细的信息,请与用户的软件提供商或者与用户的IAR代理联系,或者登陆IAR网站 以查询最新的产品信息。
一个可扩展的模块化的环境尽管嵌入式IAR Embedded Workbench IDE可以提供完成一个成功工程所需的所有工具,但我们也认识到集成其他工具的必要性。
IAR配置IAR编译环境的配置是相当重要的,没配置正确或者不符合自己的习惯的话,使用起来就会很麻烦。
下面我根据网上的经验和资料,以及自己摸索和大家共同探讨下IAR的配置。
我第一次打开IAR环境的时候,发现工作区有明显分层现象。
如图一所示图一这是我郁闷了好久,网上也不知道该如何搜索相关,只有自己慢慢找,最后还是找到了。
点击tools---options就会弹出一个对话框来,如图二所示图二点editor选项卡,可以看到右边有很多选项,这些选项关系到使用的习惯和便捷性。
首先要谈到的是tab size,这个表示tab的字符宽度,默认值为8,indent size表示缩进的字符宽度,默认为2。
有人喜欢缩进为4,有人喜欢缩进为2,根据个人喜好,和程序的复杂度来选择,我一般选择2。
然后紧跟着,下面有个tab key funtion,说得是按下tab键所起到的作用,第一个表示插入制表符,第二个表示插入空格,一般选择插入空着(insert with space)这个选项。
为了解决图一的问题,就在show right margin(显示右边空白),处理方法很多,可以不选中,也可以选择Printing edge(显示到边缘),也可以把Columns(分栏)占的比例修改为100都可以。
另外,根据个人习惯,有人喜欢列出行号,有人不喜欢,这个可以在configure的下面show line numbers的选项,选中即可列出行号。
其他可以根据自己习惯设定,设定好了之后,如图三的效果,就看起来舒服多了。
图三下面一个重点就是进行项目设定了,这个步骤非常重要,如果没有设置好,有可能编译不通过或者出错。
其实我们当初选择empty project模版的时候,配置都是属于默认的,但是有些关键配置还是需要自己手动配置的,虽然配置项目很多,根据网上经验和资料,以及个人理解,列举了几个关键选项来配置即可。
1、IAR EWARM 允许为工作区中的任何一级目录和文件单独设置选项,但是用户必须首先为整个项目设置通用的选项General Option。
IAR 使用指南周立功单片机有限公司目录第1章 EWARM 集成开发环境 (1)简介 (1)1.1 IAREWARMLINK调试器介绍 (1)1.2 LMEWARM的安装 (1)1.3 IAR第2章安装流明诺瑞驱动库 (6)2.1 下载最新库文件 (6)2.2 拷贝连接器命令文件 (6)2.3 拷贝驱动库头文件 (7)2.4 拷贝底层驱动函数库 (8)第3章在EWARM中新建一个新项目 (10)3.1 建立一个项目文件目录 (10)3.2 新建工作区 (10)3.3 生成新项目 (11)3.4 添加/新建文件 (13)3.5 项目选项设置 (15)3.6 通用选项设置 (16)3.7 C/C++编译器选项设置 (16)第4章编译和运行应用程序 (23)4.1 编译连接处理 (23)4.2 查看MAP文件 (23)4.3 加载应用程序 (23)第5章生成hex文件和bin文件 (25)5.1 生成hex文件 (25)5.2 生成bin文件 (26)第1章 EWARM 集成开发环境1.1IAR EWARM 简介IAR Embedded Workbench for ARM(下面简称IAR EWARM)是一个针对ARM 处理器的集成开发环境,它包含项目管理器、编辑器、C/C++编译器和ARM 汇编器、连接器XLINK 和支持RTOS 的调试工具C-SPY。
在EWARM 环境下可以使用C/C++和汇编语言方便地开发嵌入式应用程序。
比较其他的ARM开发环境,IAR EWARM 具有入门容易、使用方便和代码紧凑等特点。
目前IAR EWARM支持ARM Cortex-M3内核的最新版本是 4.42a,该版本支持Luminary 全系列的MCU。
为了方便用户学习评估,IAR 提供一个限制32K代码的免费试用版本。
用户可以到IAR 公司的网站/ewarm下载。
1.2LM LINK调试器介绍LM LINK是由广州致远电子有限公司开发的低成本高性能USB JTAG调试器,它专门用于对Luminary系列单片机程序的调试与下载。
IAR Embedded Workbench用户指南IAR Embedded Workbench for ARM是IAR Systems公司为ARM微处理器开发的一个集成开发环境(下面简称IAR EWARM)。
比较其他的ARM开发环境,IAR EWARM具有入门容易、使用方便和代码紧凑等特点。
故在这里介绍给打算学习使用或正在使用ARM 芯片的朋友们共同探讨。
IAR Systems公司目前推出的最新版本是IAR Embedded Workbench for ARM version 4.30,并提供一个32k代码限制、但没有时间限制的免费评估版。
有兴趣的朋友可以到IAR 公司的网站/ewarm或南京万利电子的网站(本地网站)去寻找和下载。
IAR EWARM中包含一个全软件的模拟程序(simulator)。
用户不需要任何硬件支持就可以模拟各种ARM内核、外部设备甚至中断的软件运行环境。
从中可以了解和评估IAR EWARM的功能和使用方法。
我们编译整理的这本快速用户指南采用评估版软件安装目录C:\Program files\IAR System\Embedded workbench 4.0\ARM\tutor下的教程为例,一步一步介绍 IAR EWARM 的使用方法。
该教程采用了两个C语言程序,tutor.c 和utilities.c。
它们不和任何特定的硬件关联,所以介绍中的全部操作都是用模拟程序完成的。
如果用户已经购买了IAR的JTAG 仿真器J-Link,则可以在真实的目标板上运行。
IAR EWARM的主要特点如下:z高度优化的IAR ARM C/C++ Compilerz IAR ARM Assemblerz一个通用的IAR XLINK Linkerz IAR XAR和XLIB建库程序和IAR DLIB C/C++运行库z功能强大的编辑器z项目管理器z命令行实用程序z IAR C-SPY调试器(先进的高级语言调试器)下面我们分步介绍如何使用IAR EWARM一.生成一个新项目EWARM是按项目进行管理的,它提供了应用程序和库程序的项目模板。
向PE中注入代码Inject your code to aPortable Executable file向PE中注入代码By AshkbizDanehkar 原文:/system/inject2exe.asp译者:arhat时间:2006年4月16日关键词:PE 调试器反汇编器OEP SEH 导入表This article demonstrates five steps to inject your code in a portable executable(EXE, DLL, OCX,...) file without recompiling source code.5个步骤把你的代码注入PE格式的文件(EXE, DLL, OCX,...)。
DownloadsPE ViewerPE Maker - Step 1 - Add new Section.PE Maker - Step 2 - Travel towards OEP.PE Maker - Step 3 - Support Import Table.PE Maker - Step 4 - Support DLLand OCX.PE Maker - Step 5 - Final work. CALC.EXE - test fileContents0. Preface1. Prerequisite2. Portable Executable file format2.1 The MS-DOS data2.2 The Windows NT data2.3 The Section Headers and Sections3. Debugger, Disassembler and some Useful Tools3.1 Debuggers3.1.1 SoftICE3.1.2 OllyDbg3.1.3 Which parts are important in a debugger interface?3.2 Disassembler3.2.1 Proview disassembler3.2.2 W32Dasm3.2.3 IDA Pro3.3 Some Useful Tools3.3.1 LordPE3.3.2 PEiD3.3.3 Resource Hacker3.3.4 WinHex3.3.5 CFF Explorer4. Add new section and Change OEP4.1 Retrieve and Rebuild PE file4.2 Create Data for new Section4.3 Some notes regarding creating a new PE file4.4 Some notes regarding linking thisVC Project5. Store Important Data and Reach OriginalOEP5.1 Restore the first Registers Context5.2 Restore the Original Stack5.3 Approach OEP by Structured Exception Handling5.3.1 Implement Exception Handler5.3.2 Attain OEP by adjusting the Thread Context6. Build an Import Table and Reconstruct the Original Import Table6.1 Construct the Client Import Table6.2 Using other API functions in run-time6.3 Fix up the Original Import Table7. Support DLL and OCX7.1 Twice OEP approach7.2 Implement Relocation Table7.3 Build a Special Import table8. Preserve the Thread Local Storage9. Inject your code10. Conclusion0 Preface0 序言It might be, you demand to comprehend the ways a virus programinjects its procedure in to the interior of a portable executable file andcorrupts it, or you are interested in implementing a packer or a protectorfor your specific intention to encrypt the data of your portable executable(PE) file. This article is committed to represent a brief intuition to realizethe performance which is accomplished by EXE tools or some kind of mal-wares.或许,你想知道病毒怎样把病毒体注入PE内来感染它;或许,你为了加密PE中的数据,想了解packer或protector 的实现。
PE格式文件的代码注入PE格式文件的代码注入本文演示了在不需要重新编译源代码的情况下,怎样向Windows PE(Portable Executable)格式的文件(包括EXE、DLL、OCX)中注入自己的代码。
程序如图:前言或许,你想了解一个病毒程序是怎样把自身注入到一个正常的PE文件中的,又或者是,你为了保护某种数据而加密自己的PE文件,从而想实现一个打包或保护程序;而本文的目的,就是为了向大家展示,通常的EXE工具或某种恶意程序,是怎样实现上述目的的。
可以基于本文中的代码创建一个你自己的EXE修改器,如果运用得当,它可以是一个EXE保护程序,相反的话,也可能发展成某种病毒。
不管怎样,本文写作的意图是前者,对于任何不适当的用法,本文作者概不负责。
首要条件对于阅读本文,不存在任何特定强制性的先决条件——即基础知识,如果你对调试器或者PE文件格式非常熟悉,可以跳过下面的两节,而这两节是为不具备调试器或PE文件格式知识的读者准备的。
PE文件格式PE文件格式被定义用于在Windows操作系统上执行代码或存储运行程序所需的基本数据,例如:常量、变量、引入库的链接、资源数据等等,其由MS-DOS文件头信息、Windows NT文件信息、节头部及节映像等组成,见表1。
MS-DOS头部数据MS-DOS头部数据让人回想起最初在Windows操作系统上部署程序的那些日子,那些在如Windows NT 3.51这类系统上部署程序的日子——这里是说,Win3.1、Win95、Win98不是开发所需的理想操作系统。
这些MS-DOS数据的功能就是在你运行一个可执行文件时,调用一个函数显示出“This program can not be run in MS-DOS mode”或者“This program can be run only in Windows mode”,或者当你想在MS-DOS 6.0中运行一个Windows的EXE文件时,显示出一些类似的信息,所以这些数据是被保留在代码中以作提示之用,但其中最让人感兴趣的还是数据中的“MZ”,不管你相不相信,它是微软的一个程序员“Mark Zbikowski”的首字母缩写。
IAR For Eclipse平台搭建教程现在我来讲一下如何在Eclipse平台上搭建IAR插件进行ARM开发。
IAR For Eclipse是IAR公司最新开发的一个Eclipse插件。
在你的Eclipse中安装了这个插件以后,你就可以通过Eclipse开发IAR所支持的芯片的程序,包括下载仿真等。
首先我们要下载一个Eclipse软件,Eclipse软件可以到Eclipse 官方网站进行下载,如果你是新下载的,建议直接下载“Eclipse IDE for C/C++ Developers”这个版本的,因为这样你可以不用安装“CDT 插件”。
“CDT插件”是用于支持C/C++开发所需要的插件,安装方法在此略过,不懂可百度搜索。
首先是Eclipse的安装,我是学JA V A的,我的Eclipse是早下载好的,是版本为3.6.1 。
这是软件包。
将压缩文件解压,得到文件件,打开此文件夹,文件列表如下:双击运行eclipse.exe文件,我们的eclipse就运行起来了,界面如下:会弹出一个如下的对话框:设置你的工作区目录,选择你的文件夹后点“OK”。
加载完成后将出现一个欢迎界面,如下图:把欢迎界面关掉,就可以看到我们的工作窗口,如下图:注:不同版本略有不同,我用的是开发Java的Eclipse点击“Help”菜单,选择“Install New Software..”,如下图:在弹出的“Install”对话框中的“Work With”输入/helios/arm-6.21后按回车,等Eclipse解析完后全选找到的控件包后点击“Next”。
如下图:点击“Next”后Eclipse开始下载相应的安装包,这里需要等待一会儿。
等下载完成后点击“Next”,此时会出现安装软件协议,这里不管,点击同意后继续“Next”。
安装完成后Eclipse会提示重新启动,重新启动后出现如下欢迎界面:看到欢迎界面上那个IAR的图标,你是不是开始激动了?别急,我们的环境还要配置一下才可以正常使用。
PE⽂件导⼊表的代码注⼊PE⽂件导⼊表的代码注⼊试想⼀下,如果通过修改导⼊表,能把PE格式⽂件中的函数⼊⼝点,重定向到⾃⼰的程序中来,是不是很酷!这样,在⾃⼰在程序中,可以过滤掉对某些函数的调⽤,或者,设置⾃⼰的处理程序,Professional Portable Executable (PE) Protector也就是这样做的。
另外,某些rootkit也使⽤了此⽅法把恶意代码嵌⼊到正常程序中。
在逆向⼯程的概念⾥,均称为API重定向技术,让我们⼀起进⼊这个神奇的世界吧。
1、导⼊表简介PE⽂件由MS-DOS头、NT头、节头、节映像组成,如图1所⽰。
MS-DOS头在从DOS⾄现今Windows的所有微软可执⾏⽂件中都存在;NT头的概念抽象⾃Unix系统的可执⾏与链接⽂件格式(ELF)。
实际上,PE格式可以说是Linux可执⾏与链接格式(ELF)的兄弟,PE格式头由PE签名、通⽤对象⽂件格式(COFF)头、PE最优化头、节头组成。
图1:PE⽂件格式结构NT头的定义可在Visual C++的<winnt.h>头⽂件中找到,也可使⽤DbgHelp.dll中的ImageNtHeader()函数得到相关信息,另外,还可以使⽤DOS头来获取NT头,因为DOS头的最后位置e_lfanew,代表了NT头的偏移量。
typedef struct _IMAGE_NT_HEADERS {DWORD Signature;IMAGE_FILE_HEADER FileHeader;IMAGE_OPTIONAL_HEADER OptionalHeader;} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;在PE最优化头中,有⼀些数据⽬录指明了当前进程虚拟内存中,主信息表的相对位置及⼤⼩,这些表可保存资源、导⼊、导出、重定位、调试、线程本地存储及COM运⾏时的有关信息。
没有导⼊表的PE可执⾏⽂件是不可能存在的,这张表包含了DLL名及函数名,这些都是程序通过虚拟地址调⽤它们时所必不可少的;控制台可执⾏⽂件中没有资源表,然⽽,对图形⽤户界⾯的Windows可执⾏⽂件来说,资源表却是⾄关重要的部分;当某个动态链接库导出了它的函数,此时就需要导出表了,在OLE Active-X容器中也同样;⽽.NET虚拟机缺少了COM+运⾏时头则不能被执⾏。
IAR开发环境是一款常用的嵌入式软件开发工具,广泛应用于各类嵌入式系统的开发中。
在CC2340无线芯片的开发过程中,也可以使用IAR开发环境进行开发。
本文将针对CC2340的IAR开发例程进行介绍,包括环境搭建、工程创建、代码编写、调试等相关内容。
一、环境搭建在进行CC2340的IAR开发之前,首先需要搭建好相应的开发环境。
具体步骤如下:1. 下载并安装IAR开发环境:从全球信息站下载最新的IAR开发环境,并按照冠方指导进行安装。
2. 安装CC2340软件开发包:将CC2340的软件开发包安装到指定的目录下,确保IAR开发环境可以找到相关的头文件和库文件。
二、工程创建在搭建好开发环境后,接下来需要创建一个新的工程来进行CC2340的开发。
1. 打开IAR开发环境:双击打开安装好的IAR开发环境。
2. 创建新工程:选择“File”->“New”->“Project”,然后选择CC2340的芯片型号,并设置好工程的名称和存储路径。
三、代码编写创建好工程后,就可以开始进行代码编写了。
在CC2340的IAR开发例程中,通常会涉及到无线通信协议的实现、传感器数据的采集与处理、外设的控制等内容。
在编写代码时,需要充分理解CC2340的硬件特性和相关的技术文档,以确保代码的正确性和稳定性。
四、调试完成代码编写后,需要进行调试和验证工作。
IAR开发环境提供了丰富的调试功能,可以帮助开发者快速定位和解决问题。
在进行调试时,可以使用单步执行、断点调试、变量监视等功能,帮助开发者深入了解代码的执行流程和运行状态。
五、总结本文针对CC2340的IAR开发例程进行了介绍,包括环境搭建、工程创建、代码编写、调试等相关内容。
通过本文的介绍,相信读者对CC2340的IAR开发将会有更深入的了解,为日后的开发工作提供帮助。
希望本文能够对CC2340的开发者们有所帮助,谢谢阅读!以上就是本篇文章的全部内容,希望对您有所帮助,如有疑问可随时与我通联。
如何在IAR中植入PE代码?
视频功能:
在本视频中,飞思卡尔工程师通过实例讲解并演示了如何在IAR工程中植入Processor Expert产生的代码。
软件准备:
需要安装如下软件:
✓Processor Expert Microcontroller Driver Suite v 10.0
✓IAR Embedded Workbench v 6.40.3
操作步骤:
1 ,新建一个Processor Expert工程,具体操作过程,请查看Processor Expert相关文档。
2,在Processor Expert工程中,当所有的组件都定义好,点击“Generate Processor Expert Code”按钮,生成代码。
如图1所示,图中的1和2两种方法均可以实现代码的生成。
图 1 生成PE代码
3,打开IAR软件,新建一个工程:Project->Create New Project如图2。
新建一个空的工程,如图3。
保存工程,如图4,原则上是可以保存在任何地方,但是为了方便调用PE的代码,通常选择保存在所建PE工程的文件夹路径下,图4中IAR 文件夹即之前PE建立工程时的文件夹。
图 2 新建IAR工程图 3 新建空的工程
图 4 设置保存路径及文件名
4,设置IAR工程的芯片类型,点击workspace中刚新建的工程,右击选择options,如图5所示。
在options界面中,分类栏选择General Options->Target->Device->选
择具体的芯片型号,如图6所示。
图 5 进入options
图 6 选择芯片型号
5,要在IAR中成功导入PE代码,下面需要做三件事情,第一,在IAR中添加文件(PE中生成的代码文件);第二,添加文件路径;第三,添加正确的链接命令文件。
如下分别讲解。
6,为IAR工程添加两个新的文件夹,分别为:GeneratedCode和Sources。
GeneratedCode中是PE生成的各个模块的代码,Source中用于放PE中的ProcessorExpert等,即main程序。
添加文件夹的方法为:以添加GeneratedCode文件夹为例,点击workspace中刚新建的工程,右击选择Add=>AddGroup=》命名文件夹名,如图7。
同样的方法添加Sources文件夹。
图 7 添加文件夹
7,为IAR工程新添加的文件夹GeneratedCode和Sources分别添加文件。
GeneratedCode文件夹需要添加PE生成的Generated_Code文件中的所有文件;Sources文件夹即添加PE生成的Sources文件夹中的所有文件。
以GeneratedCode
文件夹添加文件为例,选择IAR中新建的GeneratedCode,右击选择Add=>AddFiles,在弹出的界面中,选择到PE文件夹下Generated_Code文件夹,打开选择所有文件,点击OK,具体操作如图8。
同样的方法为IAR中Sources文件添加PE中Sources文
件夹中的所有文件。
图 8为新建文件夹添加对应的PE文件
8,为IAR工程添加文件路径,路径通常有,第一,Generated_Code文件夹的路径;第二,Sources文件夹的路径;第三,Processor Expert 头文件的路径。
这些路径并
不是固定的,由用户自己工程所在路径以及PE安装路径决定。
“Generated_Code
文件夹”的路径和“Sources文件夹”的路径即所建PE工程对应文件夹的目录。
对
于Processor Expert头文件的路径,如果用户选择的PE安装为默认安装,则在路径如下:
否则,根据自定义路径选择到相应的inc以及iofiles。
具体的添加方法为,在workspace中点击刚新建的工程,右击选择
Options=>C/C++ Complier=>Preprocessor=》设置additional include directories,如图9所示。
图 9添加路径
在本视频中,这部分路径添加是直接拷贝进去的。
若不知道路径,其实还可以在PE的ProjectInfo.xml文件中查看,如图10所示。
图 10 ProjectInfo.xml中路径情况
由于视频中并没有演示单条添加路径的操作,所以,这里做一个添加路径的补充,以添加头文件路径为例,如图11所示,其他类同。
图 11 单条添加路径操作步骤
9,为IAR工程添加链接命令文件路径
Processor Expert提供了一个链接命令文件,位置是所建的PE工程文件夹的:Project_Settings\Linker_Files\ProcessorExpert.icf
需要在IAR的link中添加这个链接命令文件,具体操作为Options=》Linker=》Config=》Override default,然后选择PE工程文件夹下的:
Project_Settings\Linker_Files\ProcessorExpert.icf
如图12所示。
设置好后,最后点击Options右下角的OK。
图 12 添加链接命令文件路径
10,编译整个工程
工程右击,点击Make,如图13所示。
图 13 编译工程
11,IAR工程下Debug需要的设置(视频补充内容)
选择Options=>Debugger=>Download=>Use flash loader(s),选择芯片对应的flash 文件。
如图14所示。
图 14 Debugger所需选择对应flash文件的步骤
参考资料:
(1),/bbs/article_1280_546419.html链接下的3.2节如何在IAR和Keil中如何结合PE生成代码。
(2),/ProcessorExpert。