c语言断链隐藏dll,利用C++ R3层断链实现模块隐藏功能

本文详细介绍了C语言和C++如何在R3层断链隐藏DLL模块,通过解析TEB和PEB结构体,理解模块加载信息表,最终利用C++代码实现模块隐藏功能。
摘要由CSDN通过智能技术生成

一、模块隐藏的实现原理

普通API查找模块实现思路:其通过查询在R3中的PEB(Process Environment Block 进程环境块)与TEB(Thread Environment Block 进程环境块)来找到一个双向链表,通过遍历双向链表中某一成员(字符串)来查找全部模块。

a3d68b2f1fd07a3817b44eb301659c09.png

模块隐藏实现思路:在R3层的模块隐藏,我们需要做的就是将其该链表断链,将某一模块从这个双向链表中摘除,这样再调用传统的API时就会搜索不到。

二、结构体成员详细介绍

<1> TEB结构体 -- 内存地址为 fs:[0] 处。

使用Windbg的 "dt _TEB"命令来查看TEB结构体

kd> dt _TEB

ntdll!_TEB

+0x000 NtTib : _NT_TIB

+0x01c EnvironmentPointer : Ptr32 Void

+0x020 ClientId : _CLIENT_ID

+0x028 ActiveRpcHandle : Ptr32 Void

+0x02c ThreadLocalStoragePointer : Ptr32 Void

+0x030 ProcessEnvironmentBlock : Ptr32 _PEB

+0x034 LastErrorValue : Uint4B

1. 属性介绍

1.1)_NT_TIB:重点两个属性,栈顶与栈大小。

1.2) _CLIENT_ID: 存储该进程ID与当前主线程ID。

1.3) _PEB:进程环境块 ,记住其在 TEB 偏移 0x30处即可。

2. 通过olldbg查看该结构体

2.1) 打开任意进程,在寄存器窗口找到 fs:[0],查看其内存地址。

5c4c29cfcd6fe3bdfdb3e28de1ed2941.png

2.2) 在内存窗口使用命令 "db 5E7000" 跳转到该内存,使用地址格式(长型-地址)显示。

a3d5d097c58e89de08665949b90a2034.png

<2> PEB结构体 -- fs:[0x30]

使用 Windbg 指令 dt _PEB 查看 PEB结构体,重点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值