Windows PE 第十三章 PE补丁技术
PE补丁技术
这章很多东西之前都见过,也单独总结过,比如动态补丁里说的远程代码注入,还有hijack什么的。之前整理过的这里就不细说了,大体说下思路。这里总结一些之前没总结过的东西。
资料中把补丁分为两类,静态补丁和动态补丁。然后有总结了下补丁的基本要素:进程通讯能力、良好的读写其他进程地址能力、正确识别要补丁目标进程、在其他进程地址空间执行代码的能力。
进程通信:
管道通信(有名管道和匿名管道)、邮件槽、剪切板、共享内存、消息机制、socket等等具体细节概念请自行百度。
(1)动态补丁
读写进程内存:
OpenProcess()、ReadProcessMemory()、WriteProcessMemory()
也就是常用的代码注入那一套:
OpenProcess()打开目标进程,获取进程操作句柄。
VirtualAllocEx()在目标进程分配内存。
WriteProcessMemory()函数将远程代码写入。
CreateProcessMemory()在目标进程中创建远程县城并执行。
[远程线程注入记得所有引用都要拷贝进去,注意重定位问题,尽量不要使用全局变量,最好是直接在里面实现LoadLibrary和GetProcAddress或者直接把dll load到目标进程里。]
其实还有很多,比如EIP注入,消息注入什么的。之前我系统的总结过,可以到我主页上看下。
(2)整体替换PE文件:
比如通常的软件升级,或者Hijack或者是输入法注入再或者LSP注入等,都是属于这一类。
软件升级:
这个不解释了,通常的软件升级逻辑。下载升级包对应替换文件。这里有个地方可以注意,可以只替换需要替换的东西,减少流量损失,这种也用于安装上。先装上基本模块,然后后续的陆续更新,或者惰性更新。这样用户体验会相对好很多。
Hijack或者输入法注入等:
这个很好理解,A想调用B.dll,我们分析下B.dll的导出函数,然后自己实现一个假的B.dll,直接替换本来的dll,如果是想要继续注入后在调用原来的功能,可以在假的B.dll里调用原来的dll来计算值。类似与hook 和inlinehook。很简单,不多说。
对了想起个事,做这类事情的时候注意一个问题,就是Windows默认的寻找dll的路径顺序,这个有的时候比较有用。
还有就是注意宿主进程加载dll的时候是静态还是动态。静态的话在运行过程中有可能无法替换相应dll。文件会被占用的。虽然有办法强行基础文件占用,之前我在驱动里弄过这个再或者直接调用微软的相关程序强行结束掉句柄,但是并不能达到我们的效果。动态加载的可以随时替换劫持dll.
(3)部分修改PE文件:
直接修改PE相关机器码,或者把自己的机器码找个地方拷贝进去,通过需改入口地址执行我们的代码,然后再跳转回去原来的机器码,这个姿势之后的章节会细说。再或者干脆就直接把自己代码拷贝覆盖到入口地址处,同时也还可以这样,在入口处直接jmp到我们的代码,干完活在jmp回来。
程序入口
IMAGE_OPTIONAL_HEADER32.AddressOfEntryPoint
OK接下来 来一波测试,编写一个程序。代码如下:
运行则显示:
看下入口地址:
注意上面的并不是main函数入口地址,是这个:
Main函数也是被别人调起来的。通过IDA看下就知道了。OK下载我想的是直接把入口地址换成main2,注意,之前也不是main,是main之前的一些函数。看下main2的地址:
相对RVA是0x1000,OK直接改FOA0x120的地方就行:
改完之后:
OK上面的这些就是测试着玩玩,也就是说可以通过改变PE入口函数来修改相关逻辑。之后这个思路会用到。
后面还有一个内嵌机器码到记事本的程序,明天会用单独整理。
Windows PE 第十三章 PE补丁技术的更多相关文章
- Windows Pe 第三章 PE头文件(中)
这一章的上半部分大体介绍了下PE文件头,下半部分是详细介绍里面的内容,这一章一定要多读几遍,好好记记基础概念和知识,方便之后的学习. 简单回忆一下: 3.4 PE文件头部解析 3.4.1 DOS M ...
- Windows Pe 第三章 PE头文件(上)
第三章 PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...
- Windows Pe 第三章 PE头文件(下)
3.5 数据结构字段详解 3.5.1 PE头IMAGE_NT_HEADER的字段 1.IMAGE_NT_HEADER.Signature +0000h,双字.PE文件标识,被定义为00004550 ...
- Windows Pe 第三章 PE头文件-EX-相关编程-1(PE头内容获取)
获取pE头相关的内容,就是类似如下内容 原理:比较简单,直接读取PE到内存,然后直接强转就行了. #include <windows.h> #include <stdio.h> ...
- Windows Pe 第三章 PE头文件-EX-相关编程-2(RVA_FOA转换)
RVA-FOA之间转换 1.首先PE头加载到内存之后是和文件头内容一样的,就算是偏移不同,一个是磁盘扇区大小(400H)另一个是内存页大小(1000H),但是因为两个都是开头位置,所以相同. 2.看下 ...
- 【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)
0 前言 此篇文章想写如何通过工具手查导出表.PE文件代码编程过程中的原理.文笔不是很好,内容也是查阅了很多的资料后整合出来的.希望借此加深对PE文件格式的理解,也希望可以对看雪论坛有所贡献.因为了解 ...
- Windows PE 第十二章 PE变形技术
PE变形技术 这章东西太多,太细了.这里我只记录了一些重点概念.为后面学习做铺垫. PE变形:改变PE结构之后,PE加载器依然可以成功加载运行我们的程序. 一 变形常用技术: 结构重叠技术.空间调整技 ...
- Reverse Core 第二部分 - 13章 - PE文件格式
@date: 2016/11/24 @author: dlive PE (portable executable) ,它是微软在Unix平台的COFF(Common Object File For ...
- Windows下反(反)调试技术汇总
反调试技术,恶意代码用它识别是否被调试,或者让调试器失效.恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间.为了阻止调试器的分析,当 ...
随机推荐
- Debezium实现多数据源迁移(一)
背景: 某公司有三个数据库,分别为MySql.Oracle和PostgreSql.原有业务的数据都是来自于这三个DB,此处委托将原有的三个数据库整合成一个Mysql. 要求: 1.不影响原有系统的继续 ...
- Airbnb JavaScript代码规范(完整)
类型Types 基本数据类型 string number boolean null undefined symbol const foo = 1; let bar = foo; bar = 9; co ...
- DataFocus小学堂|客户分析之复活客户分析
复活客户分析 什么是"复活客户"?如何进行"复活客户分析"呢?今天,我们借助DataFocus系统,来了解一种简单的复活客户分析. 1.何为复活客户 复活客户, ...
- FreeBSD 入门 哲学与玄学
『哲学与玄学』 FreeBSD 是一种 UNIX 哲学(如模块化,一切皆文件等,见< UNIX 编程艺术>❩的发展,也是学院派的代表作品.她是一套工具集,她存在目的是为了让人们更好的生活. ...
- Java 在PPT中添加文本水印的简易方法(单一/平铺水印)
[前言] 在PPT幻灯片中,可通过添加形状的方式,来实现类似水印的效果,可添加单一文本水印效果,即在幻灯片中心位置水印以单个文本字样显示,但通过一定方法也可以添加多行(平铺)文本水印效果,即在幻灯片中 ...
- SPOJ D-query 【主席树】
一 题目 D-query 二 分析 主席树的运用. 这题首先应该考虑的是,如何分出种类数?再就是考虑如何维护区间信息? 最开始想的是直接离散化后用权值线段树建主席树,发现不行,因为假如$ [l,r] ...
- java 各种类型转换
public class TypeConversion { public static void main(String[] args) throws ParseException { // 1.将字 ...
- linux 系统用户与用户组管理
关于/etc/passwd和/etc/shadow /etc/passwd 第1个字段为用户名(第一行中的root就是用户名)第2个字段存放的是该账号的口令.第3个字段为一个数字,这个数字代表的用户标 ...
- sqlmap在https下的一种错误 - ssl连接失败
在昨天与师傅的交流中师傅考了我一个问题,在用sqlmap跑的时候遇到ssl爆红该怎么办,因为在实战中并没有遇到过这种情况,所以今天补一下知识. 首先查询了ssl的概念,通俗来说,如果一个网站没有安装s ...
- JSP配置虚拟路径及虚拟主机
1.tomact解压后目录 bin:可执行文件(startup.bat shutdown.bat) conf:配置文件(server.xml) lib:tomcat以来的jar文件 log:日志文 ...