pe文件

PE病毒初探——向exe注入代码

自作多情 提交于 2020-04-03 17:59:24
PE文件其实就是Windows可执行文件,关于它的一些简要介绍摘自百度: PE文件被称为可移植的执行体是Portable Execute的全称,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。 http://baike.baidu.com/view/1087038.htm 有一种病毒是针对PE文件进行的操作,他们会感染一些exe,将自己的代码添加到exe中并在某处悄悄地窃取执行权限执行自己的代码进行破坏或者是其他不为人知的勾当。 才写了个头就跑去跟个程旭媛讨论技术问题去了,不禁让我想起之前的一张图片。。程序员苦逼不解释。 下面就进入正题。 1、PE文件格式 PE文件格式游如下图给出 2、代码注入 由PE格式可以知道,PE文件的数据和代码都存储在PE头之后的一些session中,其中有些session的属性是可执行的,里面的数据就能被当成计算机指令在cpu中执行。 注入代码的目标就是这些可执行的session(其实还有一种注入方法是增加额外的session,但是这样做会增加exe文件的大小,不过这样可以放更多的代码,由于这次要插入的代码数量较小所以选择已经存在的session下手)。 由于文件在磁盘中存储是按块存储的,每块的大小是固定的,因此这样会在某些数据中存在额外多余的部分

Windows Embedded CE 6.0 Internals (3) Memory Continued

﹥>﹥吖頭↗ 提交于 2020-03-29 03:43:04
对我来说写一篇博客真的不容易,我是个十足的完美主义者,但是水平很一般,所以我会花上很多时间去修补文章。也许文章并不能让你满意,如果你有任何的建议,任何的,我都非常期待你能告诉我。这篇文章仍然是继续 Windows Embedded CE Internals (2) 内存部分。 从硬件视角看内存 从硬件上看,可作为内存的大体分为RAM、ROM、Nand/Nor Flash(兼具RAM和ROM特性的混合体)。 RAM 內存 可以进一步分为静态随机存取存储器( SRAM )和动态随机存取存储器( DRAM )两大类。 SRAM 具有快速访问的优点,但生产成本较为昂贵,一个典型的应用是 高速缓存 。而 DRAM 由于具有较低的单位容量价格,所以被大量的采用作为系统的 主存储器 。 以下简单列举一些RAM: DRAM SRAM VRAM(Video RAM) DDR SDRAM(Double Data Rate SDRAM) DDRII(Double Data Rate Synchronous DRAM) 那么RAM、ROM、Flash有哪些区别?我在这里简单的总结一下: 1.RAM需要供电才能保存数据,而ROM、Flash都不需要。 2.内存中的代码能够直接被执行的前提是CPU能够随机读取这个内存里面的数据,RAM满足这个条件的,还满足这个条件的是ROM和Nor Flash(也就是XIP)

PE文件中打“内嵌补丁”练习

我的梦境 提交于 2020-02-07 07:34:37
1.先运行程序,查壳发现该程序是用MASM写的,查看区段信息 2.接下来简单分析一下,该程序是否存在恶意代码:第一步查看API函数,发现没有提权API和对系统产生破坏的API,第二步查看程序运行会不会导致 溢出,发现没有。 2.OD载入,搜索字符串,发现字符串都处于加密状态,f7单步,进入解密部分 3.解密完之后,f7单步,进入 unpackme.00401039,该函数计算了校验值,运行到401046时发现,ebx中的值跟解密时ebx的值相等。 4.单步进入OEP,看出DlgProc为4010f5,进入到4010f5中,看到要修改的字符串。 5.随后用二进制编辑器打开,在680处添加字符串“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”,OD加载后680对应401280。 6.上门只是演示,接下来写内嵌补丁,覆盖字符串的字符串。 按Ctrl+a,出现字符串 修改jmp后面的地址 练习下载链接:https://pan.baidu.com/s/1TM_ZHP79pKBHf-OrD330iw(若失效,请留言) 提取码:x0lo 参考资料 《逆向工程核心原理》 来源: CSDN 作者: buzhifou01 链接: https://blog.csdn.net/qq_33526144/article/details

自己手动复现一个熊猫烧香病毒

限于喜欢 提交于 2020-02-06 05:27:54
自己手动复现一个熊猫烧香病毒 起因 最近逛了一下 bilibili ,偶然的一次机会,我在 bilibili 上看到了某个 up 主分享了一个他自己仿照熊猫病毒的原型制作的一个病毒的演示视频,虽然这个病毒的出现距离现在已经十多年之久了,但是它的威胁性仍然不亚于永恒之蓝,出现了很多变种病毒。我觉得蛮有意思的,有必要深究一下,所以我花上几天的时间研究了一下熊猫烧香病毒的源码,仿照熊猫烧香病毒原型,也制作了一个类似的软件,实现的源码我会在文章的末尾给出 GitHub 项目链接,喜欢的朋友不要忘记给我一个 star and follow 呀! 熊猫烧香的介绍 熊猫烧香是一个感染性的蠕虫病毒,它能感染系统中的 exe , com , pif , src , html , asp 等文件,它还能中止大量的反病毒软件进程并且会删除扩展名为 gho 的文件,该文件是一系统备份工具 GHOST 的备份文件,使用户的系统备份文件丢失。被感染的用户系统中所有的.exe可执行文件图标全部被改成熊猫烧香的图标,如下图所示: 如果有同学对熊猫烧香的来源感兴趣的话,可以看看中科大写的关于熊猫烧香的案件分析: 由“熊猫烧香”谈起 病毒结构分析 从上述的流程图中我们可以看到,含有病毒体的文件被运行后,病毒将自身拷贝至系统目录,同时修改注册表,将自身设置为开机启动项,并遍历各个驱动器,将自身写入磁盘根目录,增加一个

PE文件结构体-IMAGE_DATA_DIRECTORY

懵懂的女人 提交于 2020-02-02 13:31:58
IMAGE_OPTIONAL_HEADER结构体最后一个成员是数组结构,大小为16,每个元素都是一个IMAGE_DATA_DIRECTORY结构体 typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; /**指向某个数据的相对虚拟地址 RAV 偏移0x00**/ DWORD Size; /**某个数据块的大小 偏移0x04**/ } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; 在这个数据目录结构体中只有两个成员 VirtualAddress 和 Size ,这两个成员的含义比较简单,VirtualAddress指定了数据块的相对虚拟地址(RVA)。Size则指定了该数据块的大小,有时并不是该类型数据的总大小,可能只是该类型数据一个数据项的大小。这两个成员(主要是VirtualAddress)成为了定位各种表的关键,所以一定要知道每个数组元素所指向的数据块类型,以下表格就是它的对应关系: 来源: https://www.cnblogs.com/a-s-m/p/12251728.html

PE文件结构-导入表详解

吃可爱长大的小学妹 提交于 2020-01-25 07:37:43
当PE文件运行时,PE文件将被系统加载进入内存中,此时Windows加载器会定位所有的导入的函数或者将定位到的内容填写到可执行文件的某个位置供使用,这个定位是需要借助于可执行文件的导入表来实现的。导入表中存放了所使用的DLL模块名称及导入函数的名称或者函数序列。 在PE文件中定位到PE头部的可选头的位置,可选头IMAGE_OPTIONAL_HEADER中最后一个成员: IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; IMAGE_DATA_DIRECTORY的结构如下: typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; //该目录的虚拟地址 DWORD Size; //该目录的大小 } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; 最后一个成员为数组,数组中不同的索引值对应不同的数据目录 所以定位到数据目录中的第二个目录,该目录包含导入表的相对虚拟地址,根据相对于基地址的偏移量找到导入表的首地址,导入表是一个 IMAGE_IMPORT_DESCRIPTOR类型的数组,被导入的每一个DLL都对应数组中的一个IMAGE_IMPORT_DESCRIPTOR结构体

Windows Ring3层注入——修改PE输入表(导入表)注入(一)

谁说我不能喝 提交于 2020-01-17 03:59:29
Windows Ring3层注入——修改PE输入表(导入表)注入(一) PE文件简单介绍 PE文件相关名词解释 PE文件磁盘与内存映像结构图 输入表介绍 输入表结构 输入表注入原理 PE输入表注入的两种方法 静态修改PE文件法: 进程创建期修改PE输入表法: 输入表注入核心代码示例 PE文件简单介绍 PE(Portable Execute)文件 是Windows下可执行文件的总称,常见的有 DLL,EXE,OCX,SYS 等,事实上,一个文件是否是PE文件与其扩展名无关, PE文件可以是任何扩展名 。 PE文件的结构一般来说如下图所示:从起始位置开始依次是 DOS头,PE文件头,块表(节表)以及具体的块(节) 。 PE文件相关名词解释 虚拟空间 :PE文件被系统加载器映射到 内存中 ,每个程序都有自己的虚拟空间。 虚拟地址(VA) :虚拟空间的 内存地址 。 相对虚拟地址(RVA) :内存中相对于PE文件载入地址的偏移相对地址(也称 偏移量 )。 模块(Module) :PE文件映射到内存中的版本被称为 模块(Module) 。(GetModuleHandle) 模块句柄 :映射文件的 起始地址 。 基地址(ImageBase) :初始内存起始地址,跟模块句柄一样(Windows CE不成立)。 区块间隙 :PE文件头中,FileAlignment定义了 磁盘区块 的 对齐值

PE文件结构

こ雲淡風輕ζ 提交于 2019-12-26 11:22:36
PE,即移植的执行体。在Windows平台下,所有的可执行文件(包括EXE文件、DLL文件、SYS文件、COM文件)均使用PE文件结构。使用PE文件结构的可执行文件也成为PE文件。Windows系统下的可执行文件中包含着各种数据,包括代码、数据、资源等。虽然windows系统下的可执行文件包含如此众多的类型数据,但其存放都是有序的、结构化的、完全依赖于PE文件结构对各种数据的管理。 1.MZ头部是真正的DOS头部,其开始的两个字节为"MZ",该部分用于程序在DOS系统下的加载,它的结构被定义为IMAGE_DOS_HEADER,DOS头是为了该可执行程序可以兼容DOS系统。通常情况下,Win32的PE程序不能在DOS下运行,因此保留了这样一个简单的DOS程序用于提醒:不能运行于DOS程序下。 (1)struct IMAGE_DOS_HEADER{ WORD e_magic //这两个字节保存"MZ" ........... ........... //中间的成员不常用省略 LONG e_lfanew //这是最后一个成员 保存PE头部的位置 2.PE头保存着Windows系统加载可执行文件的重要信息。PE头部有IMAGE_NT_HEADERS(包含PE标识符,文件头IMAGE_FILE_HEADER、可选头IMAGE_OPTIONAL_HEADER。)定义

PE文件的修改和感染

别等时光非礼了梦想. 提交于 2019-12-07 15:08:05
【转】PE文件的修改和感染 2008-04-29 08:20 既然已经能够搜索磁盘及 网络 共享文件中的所有文件,要实现寄生,那么自然下一步就是对搜索到的PE文件进行感染了。感染PE的很重要的一个考虑就是将病毒代码写入到PE 文件的哪个位置。读写文件一般利用Win32 API CreateFile、CreateFileMapping、MapViewOfFile等API以内存映射文件的方式进行,这样可以避免自己管理缓冲的麻烦,因而为较多病毒所采用。为了能够读写具有只读属性的文 件,病毒在操作前首先利用GetFileAttributes 获取其属性并保存,然后用SetFileAttributes将文件的属性修改为可写,在 感染完毕后再恢复其属性值。      一般说来,有如下几种感染PE文件的方案供选择:   a)添加一个新的节。将病毒代码写入到新的节中,相应修改节表,文件头中文件大小等属性值。由于在PE尾部增加了一个节,因此较容易被用户察觉。在某些情况下,由于原PE头部没有足够的空间存放新增节的节表信息,因此还要对其它 数据 进行搬移等操作。鉴于上述问 题,PE 病毒使用该方法的并不多。   b)附加在最后一个节上。修改最后一个节节表的大小和属性以及文件头中文件大小等属性值。由于越来越多的杀毒软件采用了一种尾部扫描的方式,因此很多病毒还要在病毒代码之后附加随机 数据 以逃避该种扫描

编程实现感染PE文件加载DLL

不打扰是莪最后的温柔 提交于 2019-12-07 01:00:46
PE文件是Windows系统可执行文件采用的普遍格式,像我们平时接触的EXE、DLL、OCX,甚至SYS文件都是属于PE文件的范畴。很多Win32病毒都是基于感染PE文件来进行传播的。今天我们就来尝试一下通过感染PE文件使其加载指定的DLL。       PE文件功能   众所周知,在Windows程序中需要调用各种各样的系统API,这些API被微软封装在不同的DLL文件中,这些DLL会在进程启动时(或者需要时)加载进进程的地址空间。我们调用一个API都是基于如下的汇编代码: 00411A3E mov esi,esp 00411A40 push 100h 00411A45 lea eax,[strDllDir] 00411A4B push eax 00411A4C call dword ptr [__imp__GetWindowsDirectoryA @8 (42B180h)] 这些汇编代码是针对如下代码的反汇编结果: char strDllDir[256]; GetWindowsDirectory(strDllDir,256);      可见,调用一个系统API是在参数压栈后调用call命令执行系统调用GetWindowsDirectory()的。上文说过,系统调用是通过DLL引入进程的,但是不同进程引入的DLL地址并不相同,程序是如何知道这个Call应该调用什么地址呢