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补丁技术的更多相关文章

  1. Windows Pe 第三章 PE头文件(中)

    这一章的上半部分大体介绍了下PE文件头,下半部分是详细介绍里面的内容,这一章一定要多读几遍,好好记记基础概念和知识,方便之后的学习. 简单回忆一下: 3.4  PE文件头部解析 3.4.1 DOS M ...

  2. Windows Pe 第三章 PE头文件(上)

    第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过P ...

  3. Windows Pe 第三章 PE头文件(下)

    3.5  数据结构字段详解 3.5.1  PE头IMAGE_NT_HEADER的字段 1.IMAGE_NT_HEADER.Signature +0000h,双字.PE文件标识,被定义为00004550 ...

  4. Windows Pe 第三章 PE头文件-EX-相关编程-1(PE头内容获取)

    获取pE头相关的内容,就是类似如下内容 原理:比较简单,直接读取PE到内存,然后直接强转就行了. #include <windows.h> #include <stdio.h> ...

  5. Windows Pe 第三章 PE头文件-EX-相关编程-2(RVA_FOA转换)

    RVA-FOA之间转换 1.首先PE头加载到内存之后是和文件头内容一样的,就算是偏移不同,一个是磁盘扇区大小(400H)另一个是内存页大小(1000H),但是因为两个都是开头位置,所以相同. 2.看下 ...

  6. 【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)

    0 前言 此篇文章想写如何通过工具手查导出表.PE文件代码编程过程中的原理.文笔不是很好,内容也是查阅了很多的资料后整合出来的.希望借此加深对PE文件格式的理解,也希望可以对看雪论坛有所贡献.因为了解 ...

  7. Windows PE 第十二章 PE变形技术

    PE变形技术 这章东西太多,太细了.这里我只记录了一些重点概念.为后面学习做铺垫. PE变形:改变PE结构之后,PE加载器依然可以成功加载运行我们的程序. 一 变形常用技术: 结构重叠技术.空间调整技 ...

  8. Reverse Core 第二部分 - 13章 - PE文件格式

    @date: 2016/11/24 @author: dlive ​ PE (portable executable) ,它是微软在Unix平台的COFF(Common Object File For ...

  9. Windows下反(反)调试技术汇总

    反调试技术,恶意代码用它识别是否被调试,或者让调试器失效.恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作,因此他们使用反调试技术尽可能地延长恶意代码的分析时间.为了阻止调试器的分析,当 ...

随机推荐

  1. ciscn_2019_final_5

    目录 ciscn_2019_final_5 总结 题目分析 checksec 函数分析 main menu new_note del_note edit_note 漏洞点 利用思路 EXP 调试过程 ...

  2. FreeBSD 12.2 已经发布 从现有版本更新到12

    #freebsd-update -r 12.2-RELEASE upgrade 如果提示更新第三方软件后,再执行freebsd-update install , 请输入 #pkg update &am ...

  3. (数据科学学习手札111)geopandas 0.9.0重要新特性一览

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在几天前,geopandas释放了其最新正式版 ...

  4. tomcat启动错误Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ofuns]];

    起初遇到这个问题的时候是在实训(开发环境选择的是IDEA)的时候,检查了半天未果,上网搜索之后,说的也是各式各样,最后发现问题出在web.xml上面 在配置 filter 的 url-pattern ...

  5. SpringMVC源码分析和启动流程

    https://yq.aliyun.com/articles/707995 在Spring的web容器启动时会去读取web.xml文件,相关启动顺序为:<context-param> -- ...

  6. WERTYU_键盘错位(JAVA语言)

    package 第三章; import java.util.Scanner; /*  *  把手放在键盘上时,稍不注意就会往右错一位.这样,输入Q会变成输入W,输入J会变成输入K等.        输 ...

  7. Airtest简单上手讲解

    Airtest是网易开发的手机UI界面自动化测试工具,它原本的目的是通过所见即所得,截图点击等等功能,简化手机App图形界面测试代码编写工作. 安装和使用 由于本文的目的是介绍如何使用Airtest来 ...

  8. C语言之动态内存管理

    C语言之动态内存管理 大纲: 储存器原理 为什么存在动态内存的开辟 malloc() free() calloc() realloc() 常见错误 例题 柔性数组 零(上).存储器原理 之前我们提到了 ...

  9. Genymotion下载模拟器慢

    •问题来源 Genymotion 是个很不错的 Android 模拟器,系统更新快,启动速度快: 但是服务器在国外,Android 镜像下载起来那个速度就不敢恭维了: 当然如果你可以[科学,上网]就另 ...

  10. 新动能 · 新机遇:SaaS软件提供商 Zoho 25 周年战略再升级

    25年,在历史的长河中不过转眼一瞬:但是对于创造者来说,25年足以颠覆一个时代...... 作为世界级云应用服务商,Zoho已经走过了25年的砥砺岁月.从ManageEngine到Zoho云服务,从工 ...