R3抹掉加载的DLL

原理类似于获取Kernel32.dll加载地址,知道这个东西也是在看获取Kernel32.dll地址的时候在网上搜索学习资料,无意中看到的这个东西。这个挺有用,结合着HiJack的话效果会不错。思路是这样:

FS--->TEB--->PEB---> PEB_LDR_DATA.InInitialzationOrderModuleList

(细节偏移,以及结构定义我之间整理过,在这 http://blog.csdn.net/u013761036/article/details/71006302  就不重复整理了。)

得到的这个链表里面存的都是加载的dll相关,获取Kernel32是直接把相关地址返回去,而隐藏相关dll就是把相关要隐藏的dll从链里面摘除就行了,R0里隐藏内核模块(.sys)以及R0隐藏进程(DKOM)都是这个思路,找到相关链表,摘除要隐藏模块就行了。

代码如下(为了省事,有些地方直接用汇编写了,不然还要定义一堆结构体,虽然逻辑看着清晰,但是代码太多,没必要):

#include "stdafx.h"
#include <windows.h>typedef struct _UNICODE_STRING { // UNICODE_STRING structure
USHORT Length;
USHORT MaximumLength;
PWSTR  Buffer;
} UNICODE_STRING;
typedef UNICODE_STRING *PUNICODE_STRING;//每个模块信息的LDR_MODULE部分
typedef struct _LDR_MODULE {
LIST_ENTRY              InLoadOrderModuleList;
LIST_ENTRY              InMemoryOrderModuleList;
LIST_ENTRY              InInitializationOrderModuleList;
PVOID                   BaseAddress;
PVOID                   EntryPoint;
ULONG                   SizeOfImage;
UNICODE_STRING          FullDllName;
UNICODE_STRING          BaseDllName;
ULONG                   Flags;
SHORT                   LoadCount;
SHORT                   TlsIndex;
LIST_ENTRY              HashTableEntry;
ULONG                   TimeDateStamp;
} LDR_MODULE, *PLDR_MODULE;PLDR_MODULE Get_ldr_InLoadOrderModuleList_Flink() {
PLDR_MODULE FirstModule = 0;
__asm {
mov ebx, fs:[0x30]         //得到peb结构体的地址
mov ebx, [ebx + 0xc]       //得到Ldr结构体的地址
mov ebx, [ebx + 0xc]       //得到ldr.InLoadOrderModuleList.Flink 第一个模块,当前进程
mov FirstModule, ebx
}
return FirstModule;
}VOID HideModule(HMODULE hLibrary)
{
PLDR_MODULE FirstModule = Get_ldr_InLoadOrderModuleList_Flink();
PLDR_MODULE GurrentModule = NULL;
GurrentModule = FirstModule;while (!(GurrentModule->BaseAddress == hLibrary))
{
GurrentModule = (PLDR_MODULE)(GurrentModule->InLoadOrderModuleList.Blink);
if (GurrentModule == FirstModule)
break;
}
if (GurrentModule->BaseAddress != hLibrary) {
return;
}//Dll解除链接
((PLDR_MODULE)(GurrentModule->InLoadOrderModuleList.Flink))->InLoadOrderModuleList.Blink = GurrentModule->InLoadOrderModuleList.Blink;
((PLDR_MODULE)(GurrentModule->InLoadOrderModuleList.Blink))->InLoadOrderModuleList.Flink = GurrentModule->InLoadOrderModuleList.Flink;
memset(GurrentModule->FullDllName.Buffer, 0, GurrentModule->FullDllName.Length);
memset(GurrentModule, 0, sizeof(PLDR_MODULE));
}int main() {
HMODULE hdAsdDll = LoadLibrary(L"C:\\Users\\Administrator\\Desktop\\asd.dll");
MessageBox(NULL, L"Hi_1", L"Tit", MB_OK);
HideModule(hdAsdDll);
MessageBox(NULL ,L"Hi_2" ,L"Tit" ,MB_OK);
return 0;
}

测试代码和测试效果如下(用的API Monitor)

宋孖健,13

R3抹掉加载的DLL相关推荐

  1. C# 加载 SQLite DLL问题

    /********************************************************************************** C# 加载 SQLite DLL ...

  2. 无法加载mspdb140.dll

    无法加载mspdb140.dll python setup.py build_ext --inplace cl.exe的环境变量设置的不对 环境变量设置后,资源管理器也必须重启,否则,环境变量还是旧的 ...

  3. 加载NMGameX.dll时出错?

    nmgamex.dll是在访问"新浪游戏总动园"(http://igame.sina.com.cn/)时生成的,并且在系统启动项中自动加载.可能时无意中删除了该文件,所以导致每次启 ...

  4. python调用dll函数_关于从加载的DLL调用函数的Python基本问题

    我是在搜索和尝试各种各样的例子后提出这个问题的,但我似乎无法从加载的DLL调用函数.我想如果有人能给我举一个例子,我就能理解我做错了什么,并取得一些进展.在 首先,使用Python 3.3.3可以加载 ...

  5. DllMain加载其他DLL造成的死锁问题及其解决办法

    DllMain加载其他DLL造成的死锁问题及其解决办法 使用VS 2008新建一个MFC ActiveX工程,因为在工程里要用到GDI+.我习惯把初始化GDI+库的代码放在应用程序类的InitInst ...

  6. QPluginLoader 加载插件dll失败

    1.加载 方法参考一下:Qt 使用QPluginLoader 加载外部dll的方法笔记_振星的博客-CSDN博客_qpluginloader 2.遇到的问题是:界面dll文件 在Debug平台编译下运 ...

  7. 计算机中丟失Slc.dll,调试符号不会加载slc.dll和sppc.dll

    这是我的情况.我正在尝试在远程服务器上调试WCF服务(Windows 2012 R2 Standard).我在运行Visual Studio 12的Windows 7专业系统上.在弄清楚如何安装远程调 ...

  8. 3dmax提示加载插件dll出错,代码193怎么办?代码193是什么意思?

    3dmax作为一款三维动画制作软件,本身软件就比较复杂,那么有的人安装之后在使用时会出现加载插件dll出错,代码193.那么这个是为什么呢?3dmax代码193怎么解决呢? 3dmax加载插件dll出 ...

  9. Revit二次开发加载RevitLookup.dll程序集

    Revit二次开发加载RevitLookup.dll程序集 Revit二次开发环境搭建(Revit 2019+Visual Studio 2017) 更正加载RevitLookup.dll: 编译出R ...

最新文章

  1. PHP解决方案@黑名单过滤
  2. 12306架构到底是不是国内最牛逼的架构
  3. 人工智能应用实践与趋势
  4. 增长黑盒:零代码基础做智能电商网站,不要重复发明轮子
  5. RIS镜像中添加网卡和RAID卡驱动方法及实践经验总结
  6. (转) Android 数字签名
  7. c语言学习加强营(一):switch分支
  8. Java可移动性不强_java地位无可撼动的原因
  9. 击鼓传花c语言编程题,c语言-第5章 循环程序设计.ppt
  10. 信息学奥赛一本通(1226:装箱问题)
  11. NRF24L01使用外部中断读取数据的问题
  12. kafka sqs 与_RabbitMQ和Kafka的比较
  13. 洛谷P1306 斐波那契公约数
  14. Delphi Note
  15. NOIP2017题解
  16. Github使用: 无法打开github网页
  17. 一个计算机系统配置有3台打印机,我们是局域网3站点 3台电脑共享一个打印机 3台电脑相同的系统 打印参数也设置完全一样 但是打印出来的效果却不同 请问什么原因?需要怎么设置?...
  18. python图像的手绘效果代码_python实现手绘效果图
  19. zblog如何调用HTML,Zblog教程:模板文件与调用标签详细说明
  20. sublime的注意事项

热门文章

  1. 数据分析行业需要具备哪些技术 如何快速进入
  2. 妇女在IT安全工作人员当中的比例只有10%
  3. [第180期]我在51CTO的提问:如何做好企业信息安全管理
  4. 面向对象网络编程基础 property的使用
  5. spark streaming 消费 kafka入门采坑解决过程
  6. 关于排版中经常见的问题的解决方法
  7. Yii中缓存依赖的处理
  8. Silverlight入门系列]使用MVVM模式
  9. 使用rem适配不同屏幕的移动设备
  10. 在元素前面添加一个伪元素下边框