avatar
文章
91
标签
0
分类
0
首页
时光档案
标签
分类
友链
关于
半枫
首页
时光档案
标签
分类
友链
关于

半枫

pe文件结构学习
发表于2026-02-11
PE(Portable Executable)是Windows平台下可执行文件(EXE)、动态链接库(DLL)、驱动(SYS)等的标准格式,核心由DOS头、NT头、节表、节区数据四大部分构成,是Windows加载、执行程序的底层依据。 总体结构图1234567891011121314151617181920+---------------------+| DOS MZ Header | (64字节,固定)+---------------------+| DOS Stub | (可变长度,16位DOS兼容代码)+---------------------+| NT Headers | (PE核心头部,含签名、文件头、可选头)| - PE Signature || - File Header || - Optional Header |+---------------------+| Section Headers | (节表,每个节头40字节,数量由文件头指定)+-----------------...
TitanHide学习总结
发表于2026-02-11
驱动代码基本结构模块名 功能定位_global————全局工具库:封装内核内存分配、随机化、安全拷贝等通用操作,是其他模块的基础依赖。hider————隐藏规则管理:维护进程隐藏条目列表,处理 “隐藏 / 取消隐藏” 指令,联动反调试标记修改。hooklib————挂钩工具库:实现内联Hook(指令替换)的基础逻辑,支持32/64位系统的API挂钩 / 解钩。hooks————核心挂钩实现:挂钩内核调试相关API(如NtQueryInformationProcess),篡改返回结果实现反调试。log————日志模块:将驱动运行信息同时输出到调试器(WinDbg)和磁盘日志文件,用于调试和问题定位。misc————辅助工具:提供 “通过句柄获取PID” 等内核对象操作的辅助函数,依赖未公开内核结构。ntdll————NTDLL解析:加载ntdll.dll到内核内存,提取其导出函数对应的SSDT索引,为挂钩提供基础。pe————PE文件解析:处理PE文件的RVA / 文件偏移转换、导出函数查找,支持内核中解析NTDLL等模...
TitanHide与ScyllaHide的Hook区别
发表于2026-02-04
TitanHide和ScyllaHide的核心Hook区别在于Hook层级、实现原理和作用范围,前者是内核层(R0)的SSDT表修改,后者是用户层(R3)的指令流替换。 ScyllaHide宏定义这些宏是ScyllaHide中批量、标准化实现函数挂钩(Hook) 的核心代码,目的是简化重复的Hook/解钩代码编写,统一错误处理和资源管理逻辑。 STR(x) 1#define STR(x) #x 这是一个字符串化宏,它会把输入的参数x直接转换成C风格的字符串常量。例如:STR(NtOpenProcess)会被预处理器替换为"NtOpenProcess"在后面的钩子宏里,用来把函数名转为字符串,传递给Detours函数。 HOOK(name) 1234#define HOOK(name) { \ hdd->d##name = (t_##name)DetourCreateRemote(hProcess, "" STR(name) "", (void*)_##name, Hooked##name, tr...
VS2017+WDK7.1驱动开发TitanHide
发表于2026-02-02
开发适用于Windows xp和Windows 7的TitanHide驱动。 环境准备因为要适配Windows xp和Windows 7,所以选择WDK7.1。下载地址:https://learn.microsoft.com/zh-cn/windows-hardware/drivers/legacy-wdk-downloads找到下载好的.ISO文件,解压,到解压好的文件夹中,找到安装文件KitSetup.exe,根据指引安装好(路径检验选择默认路径,后续配置安装默认路径)。安装好就可以在C盘的根目录看到WinDDK文件夹, 项目配置将从Github上获取的TitanHide源码中TitanHide目录下的.cpp、.h文件复制好一份,重新配一个工程。 根据以下要求配置项目属性: 1234567891011121314151617181920212223242526272829303132333435363738//编译出win xp 32位驱动VS2017里新建一个空项目,新建一个配置名:TitanHide_xp //自行定义名字VS++目录-》可执行文件目录:C:\WinD...
vmp反调试与反虚拟机学习
发表于2026-01-28
小白对这几天VMP的反调试与反虚拟机学习结合vmpprotect-3.5.1的源码总结一下。 反调试定位VMP反调试源码当VMP检测到被调试时,会弹窗报错信息通过这条报错信息,我们可以找到然后通过VMP的消息传递逻辑,我们可以发现mtDebuggerFound和函数LoaderMessage(),mtDebuggerFound是VMP反调试检测的唯一语义化标识,LoaderMessage()是VMP所有报错的统一处理入口,LoaderMessage(mtDebuggerFound)是VMP所有反调试检测逻辑的统一报错触发语句。所以我们可以通过查找LoaderMessage(mtDebuggerFound)的引用去定位到VMP的各处反调试相关源码。 os_build_number的获取一共有两种获取方式: PEB直接读取(最快、最底层):绕过所有系统API,直接从进程环境块(PEB)读取OSBuildNumber; ntdll资源解析(兜底、最可靠):直接解析系统核心模块ntdll.dll的PE资源,也是为了方便取syscall所使用的系统调用号。从PEB->OS...
环境变量处理API-GetEnvironmentVariable
发表于2026-01-17
基本概念GetEnvironmentVariable属于Windows.h头文件,专门用于读取指定名称的环境变量值,可以替代ExpandEnvironmentStrings中 “被动解析环境变量” 的方式,主动获取单个环境变量的具体值,灵活性更高。 基本语法1234567891011DWORD GetEnvironmentVariableW( [in, optional] LPCWSTR lpName,// 要读取的环境变量名 [out, optional] LPWSTR lpBuffer,// 接收变量值的目标缓冲区 [in] DWORD nSize // 目标缓冲区的大小(字节数));DWORD GetEnvironmentVariableA( [in, optional] LPCSTR lpName, [out, optional] LPSTR lpBuffer, [in] DWORD nSize); 返回值成功:返回复制到缓冲区的字符数(ANSI是字节数,Unicode是wchar_t字符数),不包含...
目录处理函数-GetWindowsDirectory、PathCanonicalize与PathIsRelative
发表于2026-01-17
GetWindowsDirectory基本概述GetWindowsDirectory是Windows提供的系统目录获取函数,属于Windows.h头文件,主要用于定位Windows系统安装目录(存放系统核心文件的目录)。随着系统升级,微软也提供了更通用的GetSystemDirectory(获取 System32 目录)和SHGetFolderPath(获取各类系统 / 用户目录),但GetWindowsDirectory仍被广泛兼容使用。 基本语法1234567891011// Unicode(宽字符)版本UINT GetWindowsDirectoryW( [out] LPWSTR lpBuffer,// 接收路径的目标缓冲区 [in] UINT uSize // 目标缓冲区的大小(字符数));// ANSI 版本UINT GetWindowsDirectoryA( [out] LPSTR lpBuffer, [in] UINT uSize// 目标缓冲区的大小(字节数)); 返回值成功:返回复制到缓冲区的字符数(ANSI是字节数,Unicode是wc...
字符串处理API-StringCchCopy、ExpandEnvironmentStrings与StringCchPrintf
发表于2026-01-16
StringCchCopy基本概述StringCchCopy是Windows提供的字符串安全拷贝函数,属于StrSafe.h头文件下的StrSafe库,目的是替代传统的strcpy等字符串拷贝函数(避免缓冲区溢出),它会严格检查目标缓冲区的大小,确保拷贝操作不会越界,提升代码安全性。 基本语法12345STRSAFEAPI StringCchCopyA( [out] STRSAFE_LPSTR pszDest,// 目标字符串缓冲区 [in] size_t cchDest,// 目标缓冲区的大小(以字符数为单位,包含终止符 '\0') [in] STRSAFE_LPCSTR pszSrc // 源字符串); 返回值HRESULT类型,常见返回值:S_OK:拷贝成功,且目标字符串以\0终止。STRSAFE_E_INSUFFICIENT_BUFFER:目标缓冲区空间不足,拷贝失败(此时目标缓冲区会被置为空字符串)。 数据类型STRSAFE_LPSTR: 1typedef _Null_terminated_ char* STRSAFE_L...
目录(Catalog)验证API-CryptCATAdminCalcHashFromFileHandle、CryptCATAdminEnumCatalogFromHash、CryptCATCatalogInfoFromContext、CryptCATAdminAcquireContext
发表于2026-01-15
CryptCATAdminAcquireContext基本概念CryptCATAdminAcquireContext是Windows 目录(Catalog)验证体系的 “入口函数” —— 所有目录相关操作(计算文件哈希、查找目录条目、提取.cat 文件路径)都必须先通过这个函数获取目录管理上下文句柄(HCATADMIN),它的作用类似于打开一个 “目录操作的会话”。 基本语法12345BOOL CryptCATAdminAcquireContext( [out] HCATADMIN *phCatAdmin,//上下文句柄(调用前设为NULL) [in] const GUID *pgSubsystem,//子系统GUID(几乎所有场景传NULL) [in] DWORD dwFlags //标志位(固定传0)); 返回值TRUE-成功FALSE-失败 ERROR_OUTOFMEMORY:内存不足 ERROR_INVALID_PARAMETER:参数未初始化(如phCatAdmin没设NULL) ERROR_ACCESS_DENIED:权限不足(需...
信任验证API-WinVerifyTrust
发表于2026-01-15
基本概念WinVerifyTrust是Windows系统中用于验证数字签名、证书链和信任状态的核心API。它可以验证文件、目录(catalog)、证书、驱动程序等对象是否可信。WinVerifyTrust是Windows提供的信任验证接口,位于wintrust.dll。它的作用是: 验证文件是否有有效的数字签名 验证签名证书是否由受信任的CA颁发 检查证书是否被吊销 验证目录文件(.cat)中的文件哈希是否可信 验证驱动程序、安装包等是否符合Windows信任策略 基本语法12345LONG WinVerifyTrust( [in] HWND hwnd, //调用方窗口的可选句柄 [in] GUID *pgActionID,//指定验证策略 [in] LPVOID pWVTData //包含待验证对象的信息); 返回值返回值是LONG类型。常见返回值:ERROR_SUCCESS (0):验证成功TRUST_E_NOSIGNATURE:文件没有签名TRUST_E_EXPLICIT_DISTRUST:被显式标记为不信任TRUST_E_SU...
12…10
avatar
半枫
Welcome to my blog
文章
91
标签
0
分类
0
Follow Me
公告
This is my Blog
最新文章
pe文件结构学习2026-02-11
TitanHide学习总结2026-02-11
TitanHide与ScyllaHide的Hook区别2026-02-04
VS2017+WDK7.1驱动开发TitanHide2026-02-02
vmp反调试与反虚拟机学习2026-01-28
归档
  • 二月 2026 4
  • 一月 2026 9
  • 十二月 2025 3
  • 十一月 2025 10
  • 十月 2025 10
  • 九月 2025 4
  • 八月 2025 36
  • 七月 2025 15
网站信息
文章数目 :
91
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 - 2026 By 半枫框架 Hexo 7.3.0|主题 Butterfly 5.4.3