【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用
0x1 PE文件与免杀思路
基于PE文件结构知识的免杀技术主要用于对抗启发式扫描。
通过修改PE文件中的一些关键点来达到欺骗反病毒软件的目的。
- 修改区段名
1.1 移动PE文件头位置免杀
工具:PeClean
SizeOfOptionalHeader字段来描述扩展头的大小,恒定值为0xE0。
某些程序直接使用0xE0对PE文件进行处理,对于修改过的程序会被识别为非PE文件。
1.2 导入表移动免杀
通过修改程序里导入表ThunkValue值实现。
- 1)通过ThunkValue的偏移地址,找到API函数名
- 2)将原地址的API函数名移动到其他空白处
- 3)00填充掉原地址的API函数名
- 4)修改ThunkValue值为新移动的地址
1.3 导出表移动免杀
通过修改导入表中API函数名的相对偏移地址实现。
- 获取API函数名的RAV(相对虚拟地址)
- 将API函数名移动到新位置
- 将API函数名相对偏移地址填写回原先记录的地方
0x2 PE文件与反启发式扫描
其它非与PE文件相关的启发式扫描请参考第16章“免杀技术前沿”内容。
2.1 最后一个区段为代码段
启发特征:最后一个区段为代码段。这会引发“异常的入口点”。如果入口点被定位在了非正常的代码段上,则会被启发式扫描引擎查杀。
2.2 可疑的区段头部属性
蠕虫在感染一个文件时有三种方案,这些方案都要求会修改代码段具有可写属性。
- 1 增加一个新的可执行区段
- 2 现有的代码段中插入恶意代码
- 3 将恶意代码分别穿插到不同的区段中,并修改相应区段的属性
启发特征:一个正常的可执行程序如果出现多个具有可执行属性的区段,就会制造出这些特征。
2.3 可疑的PE选项头的有效尺寸值
启发特征:这一项启发特征是基于 “移动PE文件头免杀”建立起来的。用于试图修改选项头大小而隐藏更多敏感数据的恶意程序。
2.4 可疑的代码节名称
启发特征:如果产生了编译器厂商之外的区段名,则启发特征判定为恶意程序。
2.5 多个PE头部
启发特征:可执行文件中含有需要释放的DLL或者SYS。
注:一般情况下将其中包含的可执行文件加密即可避免出现这个特征。
2.6 导入表项存在可疑导入
启发特征:
- 无效导入表
- 偏移形式调用API
- 特定恶意行为的API序列
注:黑客一般会使用自己实现的GetProcAddresss函数,以便用散列值寻找并调用相关敏感API
0x3 隐藏导入表
隐藏导入表思路
- 简单异或加密
- 导入表单项移除
- 重构导入表
- 利用HOOK方式打乱其调用
3.1 操作原理与先决条件
原理:
- 1)手工将指定导入项的IAT(Import Address Table)删除掉
- 2)在启动初期用正确的值填充IAT
条件限制:
- OriginalFirstThunk字段是一个以0x00000000结尾的32位数组,将INT填充为0x00000000删掉后,
会导致在此IAT项后面所有由此DLL导入的函数失效。
3.2 修改PE文件
简单的例子
3.3 构造我们的反汇编代码
没看懂RegisterClassExW的起始地址是怎么得到的。
0x4 小结
PE免杀入门技巧
对PE免杀入门技巧的启发式扫描规则
反启发式扫描PE免杀技巧
0x5 参考文章
《黑客免杀攻防》第八章 PE文件知识在免杀中的应用
http://blog.csdn.net/dalerkd/article/details/41144251
【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用的更多相关文章
- 【黑客免杀攻防】读书笔记5 - PE格式讲解
0x01 MS-DOS头 MS-DOS头部的字段重点关注e_magic与最后一个e_lfanew是需要关注的. 第一个e_magic字段的值为4D5A,作用是可以作为判断这个文件是否是PE文件. 最后 ...
- 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)
<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...
- Python读取PE文件(exe/dll)中的时间戳
代码原文地址: https://www.snip2code.com/Snippet/144008/Read-the-PE-Timestamp-from-a-Windows-Exe https://gi ...
- 《UNIX-Shell编程24学时教程》读书笔记Chap3,4 文件,目录操作
Chap3 文件操作 P28 在这章中,要着重记住一些常用的选项,要有使用正则表达式的思维,能更快达到目的.----@im天行 3.1 列文件名 .profile sh的初始化脚本: .kshr ...
- 【读书笔记】iOS-头文件导入-@class注意事项
一,导入头文件有两种不同的方法:使用引号或者使用尖括号,例如,#import <Cocoa/Cocoa.h>和#import "Tire.h".带尖括号的语句是用来导入 ...
- 读书笔记 effective c++ Item 15 在资源管理类中提供对原生(raw)资源的访问
1.为什么需要访问资源管理类中的原生资源 资源管理类是很奇妙的.它们是防止资源泄漏的堡垒,没有资源泄漏发生是设计良好的系统的一个基本特征.在一个完美的世界中,你需要依赖这样的类来同资源进行交互,绝不 ...
- 【读书笔记】【深入理解ES6】#9-JavaScript中的类
大多数面向对象的编程语言都支持类和类继承的特性,而JavaScript却不支持这些特性,只能通过其他方法定义并关联多个相似的对象.这个状态一直从ECMAScript 1持续到ECMAScript 5. ...
- PE笔记之PE文件总览图
- 《Java并发编程实战》读书笔记-第一部分 基础知识小结
并发技巧清单 可变状态是至关重要的 所有的并发问题都可以归结为如何协调对并发状态的访问.可变状态越少,就越容易确保线程安全性. 尽量将域声明为final类型,除非需要它们是可变的. 不可变对象一定是线 ...
随机推荐
- Leetcode 461.汉明距离 By Python
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意: 0 ≤ x, y < 231. 示例: 输入: x = 1, y ...
- 学习Spring Boot:(二十五)使用 Redis 实现数据缓存
前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...
- luogu1712 区间 (尺取法+线段树)
先把区间按照长度从小到大排序,然后用尺取法来做 大概就是先一点一点把区间算上 直到某个点被覆盖了m次,然后一点一点把最前面的区间扔掉,直到没有点被覆盖m次,这样反复做(相当于是它选择的区间左右端点在那 ...
- 运行vb写的程序,有些电脑上会弹出一个与office相关的窗口
到网上搜索了一下,找了几个解决方案,不过我的电脑上没出现过,所以先收藏一下,或许以后能用上. 来自:http://bbs.csdn.net/topics/380204412 今天将注册表的项一个个删除 ...
- 初见mobX
先看如下的代码 const {observable}= mobox; const {observer}=mobxReact; const {Component}=React; const appSta ...
- 网络流 KM dinic
study from: https://blog.csdn.net/A_Comme_Amour/article/details/79356220 1. Edmonds-Karp 无优化 最坏时间复杂度 ...
- 盘点 php 里面那些冷门又实用的小技巧
1.实用某个字段索引二维数组 取出一个数组的一个字段的值的数组,我们可以使用 array_column, 这个方法还有另外一个用法,如 array_column($array, null, 'key' ...
- java 中自定义类的概述
作业: 描述商品类 Goods 4个属性 商品名字 大小 价格 库存 把商品类放进集合中 小米品牌 大小 价格 库存的数量 都存集合 华为..... 魅族 public class Goods{ St ...
- Scala进阶之路-Scala中的高级类型
Scala进阶之路-Scala中的高级类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类型(Type)与类(Class)的区别 在Java里,一直到jdk1.5之前,我们说 ...
- webpack配置说明
webpack是一个现代JavaScript应用程序的静态模块打包器. 它有几个核心概念: 一.entry(入口) 指示webpack应该使用哪个模块,来作为构建其内部依赖图的开始, 可以在webpa ...