Good in study, attitude and health

  • 隐写技巧——在PE文件的数字证书中隐藏Payload

    0x00 前言 为了验证PE文件的来源和完整性,常常会为PE文件添加数字证书。Windows系统下默认会对一些重要文件添加微软的数字签名,如ntdll.dll。恶意文件分析系统在对PE文件的静态分析过程中,如果PE文件有数字签名,则对签名进行验证。若数字签名验证通过,则不再对其进行后续分析。这样做主要考虑的是降低误报,以及减少服务器资源消耗。如果能在保证数字签名有效的前提下,在PE文件中隐藏Payload,那么这种隐写方式将会非常隐蔽。 0x01 简介 来自Deep Instinct Research Team的Tom Nipravsky在BlackHat2016的议题《Certificate Bypass: Hiding and Executing Malware from a Digitally Signed Executable》介绍了这个方法,并且实现了一个Reflective PE Loader,用来加载隐藏在PE文件数字证书中的Payload,值得学习。 议题PDF下载地址: https://www.blackhat.com/docs/us-16/materials/us-16-Nipravsky-Certificate-Bypass-Hiding-And-Executing-Malware-From-A-Digitally-Signed-Executable-wp.pdf 本文将会更加详细的介绍如何实现在保证数字签名有效的前提下,向PE文件中隐藏Payload。 0x02 PE文件格式和数字签名格式 图1引用自Windows Authenticode Portable Executable Signature Format https://msdn.microsoft.com/en-us/windows/hardware/gg463180.aspx 签名过程: 计算PE文件hash 根据hash生成数字证书 数字签名添加在文件末尾,这部分称作Certificate Table 计算文件hash的步骤: Load the image header into memory. Initialize a hash algorithm...

  • 隐写技巧——PNG文件中的LSB隐写

    0x00 前言 上篇对PNG的文件格式进行了分析,介绍了如何在不影响PNG文件的正常浏览下将payload以辅助数据块tEXt的格式插入到PNG文件中。这次将要介绍一个在图像数据块IDAT下隐藏payload的技巧——LSB隐写 图片引用自http://datagenetics.com/blog/march12012/index.html 0x01 简介 IDAT数据块 储存图像像数数据 在数据流中可包含多个连续顺序的图像数据块 采用LZ77算法的派生算法进行压缩 可以用zlib解压缩 zlib解压缩的python实现代码如下: #! /usr/bin/env python import zlib import binascii IDAT = "789C5D91011280400802BF04FFFF5C75294B5537738A21A27D1E49CFD17DB3937A92E7E603880A6D485100901FB0410153350DE83112EA2D51C54CE2E585B15A2FC78E8872F51C6FC1881882F93D372DEF78E665B0C36C529622A0A45588138833A170A2071DDCD18219DB8C0D465D8B6989719645ED9C11C36AE3ABDAEFCFC0ACF023E77C17C7897667".decode('hex') result = binascii.hexlify(zlib.decompress(IDAT)) print result 引用自http://drops.wooyun.org/tips/4862 LSB隐写 LSB全称least significant bit,最低有效位 PNG文件中的图像像数一般是由RGB三原色(红绿蓝)组成,每一种颜色占用8位,取值范围为0x00~0xFF,即有256种颜色,一共包含了256的3次方的颜色,即16777216 种颜色 人类的眼睛可以区分约1000万种不同的颜色 这意味着人类的眼睛无法区分余下的颜色大约有6777216种 LSB隐写就是修改RGB颜色分量的最低二进制位(LSB),而人类的眼睛不会注意到这前后的变化 每个像数可以携带3比特的信息 0x02 Python实现 关于LSB隐写在github上值得学习的项目: https://github.com/RobinDavid/LSB-Steganography https://github.com/cyberinc/cloacked-pixel 下面对cloacked-pixel进行测试 测试图片: 源文件下载地址: http://www.easyicon.net/language.en/1119182-Enderman_Png_icon.html 1、 加密 运行:...

  • 隐写技巧——利用PNG文件格式隐藏Payload

    0x00 前言 隐写术(Steganography)由来已久,其中有很多好玩儿的细节,所以打算系统的研究一下,这次先从PNG的文件格式开始。 图片来自于http://null-byte.wonderhowto.com/how-to/guide-steganography-part-1-hide-secret-messages-images-0130797/ 0x01 简介 隐写术可以理解为信息隐藏,在渗透测试中最主要的应用是对Payload的隐藏。本文会对PNG的文件格式进行分析,编写c程序实现自动解析文件格式,并按照其文件格式添加自定义的payload,不仅不会影响图片的正常浏览,同时可将图片上传到网络,使用时将图片下载再以特定格式解密,最终执行payload。 注: 所有程序源码已上传github,地址为: https://github.com/3gstudent/PNG-Steganography 0x02 PNG文件格式 1、PNG文件署名域 前8字节 固定格式,16进制为: 89 50 4e 47 0d 0a 1a 0a 2、数据块 Chunk Type Code(数据块类型码): 4字节,数据块类型码 Chunk Data(数据块数据): 可变长度,存储数据 CRC(循环冗余检测): 4字节,存储用来检测是否有错误的循环冗余码 数据块类型: 1. 关键数据块(critical chunk) (1) 文件头数据块IHDR(header chunk) 包含PNG文件的基本信息 一个PNG数据流中只能有一个IHDR 必须在PNG文件最前面 (2) 调色板数据块PLTE(palette chunk) 包含有与索引彩色图像(indexed-color image)相关的彩色变换数据 必须在IDAT之前 (3)...