ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PEB断链隐藏模块

2022-04-30 13:33:18  阅读:162  来源: 互联网

标签:pLdrData Flink LIST LDR 模块 ENTRY 断链 DATA PEB


结构体介绍

_LDR_DATA_TABLE_ENTRY包含三个双向链表的结构体

1 typedef struct _PEB_LDR_DATA
2 {
3     ULONG  Length;
4     BOOLEAN Initialized;
5     PVOID SsHandle;
6     LIST_ENTRY              InLoadOrderModuleList;  //模块加载顺序
7      LIST_ENTRY              InMemoryOrderModuleList;  //模块在内存中顺序
8     LIST_ENTRY              InInitializationOrderModuleList;  //模块初始化的顺序
9 }_PEB_LDR_DATA,*PPEB_LDR_DATA;

 

_LIST_ENTRY指向双向链表的结构体指针

1 typedef struct _LIST_ENTRY 
2 {
3     struct _LIST_ENTRY *Flink;                    // 指向下一个节点的指针
4     struct _LIST_ENTRY *Blink;                    // 指向前一个节点的指针
5 } LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;

 

_LDR_DATA_TABLE_ENTRY保存模块信息的结构体

 1 typedef struct _LDR_DATA_TABLE_ENTRY
 2 {
 3     _LIST_ENTRY InLoadOrderLinks;
 4     _LIST_ENTRY  InMemoryOrderLinks;
 5     _LIST_ENTRY InInitializationOrderLinks;
 6     PVOID     DllBase;
 7     PVOID   EntryPoint;  //入口地址
 8     ULONG SizeOfImage;
 9     _UNICODE_STRING     FullDllName;  //所有模块名称
10     _UNICODE_STRING     BaseDllName;  //模块名称的base
11     ULONG Flags;     
12     USHORT LoadCount;
13     USHORT TlsIndex;
14     union
15     {
16         _LIST_ENTRY  HashLinks;
17         struct
18         {
19             PVOID SectionPointer;
20             ULONG CheckSum;
21         };
22     };
23     ULONG TimeDateStamp;
24 }_LDR_DATA_TABLE_ENTRY,*PLDR_DATA_TABLE_ENTRY;

 

断链隐藏指定模块

 1 VOID BrokenHidden(HMODULE hModule)
 2 {
 3     PPEB_LDR_DATA pLdr;
 4     PLDR_DATA_TABLE_ENTRY pLdrData;
 5     PLIST_ENTRY pHead;
 6     PLIST_ENTRY  Cur;
 7       
 8 
 9     _asm 
10     {
11         mov eax,fs:[0x18]   //指向TEB地址
12         mov eax, [eax+0x30]  //指向PEB地址
13         mov ecx,[eax+0xc]   ////指向PEB_LDR_DATA 地址
14         mov pLdr,ecx
15     }
16         pLdrData = (PLDR_DATA_TABLE_ENTRY)pLdr->InLoadOrderModuleList.Flink;
17     //pHead = pLdr;
18     pHead = &(pLdr->InLoadOrderModuleList);
19     Cur = pHead->Flink;
20     
21     //循环遍历找到要隐藏的模块并隐藏
22         do 
23         {
24             pLdrData = (PLDR_DATA_TABLE_ENTRY)Cur;
25             if (pLdrData->BaseAddress == hModule)
26             {
27                 //printf("success!");
28                 pLdrData->InLoadOrderLinks.Blink->Flink = pLdrData->InLoadOrderLinks.Flink;
29                 pLdrData->InInitializationOrderLinks.Blink->Flink=pLdrData->InInitializationOrderLinks.Flink;
30                 pLdrData->InMemoryOrderLinks.Blink->Flink=pLdrData->InMemoryOrderLinks.Flink;
31             }
32             Cur = Cur->Flink;
33         } while (pHead != Cur); //判断链表是否遍历完
34 }

    实现断链隐藏模块中,当用od加载时断链隐藏模块的效果还是不能实现。

 

标签:pLdrData,Flink,LIST,LDR,模块,ENTRY,断链,DATA,PEB
来源: https://www.cnblogs.com/flagby/p/16209955.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有