-
Notifications
You must be signed in to change notification settings - Fork 166
/
Copy pathPEB.h
93 lines (76 loc) · 1.95 KB
/
PEB.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
typedef struct {
DWORD InLoadNext;
DWORD InLoadPrev;
DWORD InMemNext;
DWORD InMemPrev;
DWORD InInitNext;
DWORD InInitPrev;
DWORD ImageBase;
PVOID EntryPoint;
ULONG SizeOfImage;
UNICODE_STRING FullDllName;
UNICODE_STRING BaseDllName;
} PEB_LIST_ENTRY, *PPEB_LIST_ENTRY;
PEB_LIST_ENTRY *GetPEBAdd()
{
DWORD Loaded_Head;
DWORD **pPEB;
DWORD *Ldr;
__asm {
MOV EAX,30h
MOV EAX,DWORD PTR FS:[EAX]
ADD EAX, 08h
MOV SS:[pPEB], EAX
}
Ldr = *(pPEB + 1);
Loaded_Head = *(Ldr + 3);
return (PEB_LIST_ENTRY *)Loaded_Head;
}
// Elimina il modulo hMod
void HidePEB(HMODULE hMod)
{
PEB_LIST_ENTRY *Depends_List, *List_Head;
PEB_LIST_ENTRY *prev, *next;
Depends_List = List_Head = GetPEBAdd();
do {
// Ha trovato il modulo
if (Depends_List->ImageBase == (DWORD)hMod) {
prev = (PEB_LIST_ENTRY *) Depends_List->InLoadPrev;
next = (PEB_LIST_ENTRY *) Depends_List->InLoadNext;
if (prev)
prev->InLoadNext = (DWORD)next;
if (next)
next->InLoadPrev = (DWORD)prev;
prev = (PEB_LIST_ENTRY *) (Depends_List->InMemPrev - 8);
next = (PEB_LIST_ENTRY *) (Depends_List->InMemNext - 8);
if (Depends_List->InMemPrev) {
if (Depends_List->InMemNext)
prev->InMemNext = ((DWORD)next) + 8;
else
prev->InMemNext = NULL;
}
if (Depends_List->InMemNext) {
if (Depends_List->InMemPrev)
next->InMemPrev = ((DWORD)prev) + 8;
else
next->InMemPrev = NULL;
}
prev = (PEB_LIST_ENTRY *) (Depends_List->InInitPrev - 16);
next = (PEB_LIST_ENTRY *) (Depends_List->InInitNext - 16);
if (Depends_List->InInitPrev) {
if (Depends_List->InInitNext)
prev->InInitNext = ((DWORD)next) + 16;
else
prev->InInitNext = NULL;
}
if (Depends_List->InInitNext) {
if (Depends_List->InInitPrev)
next->InInitPrev = ((DWORD)prev) + 16;
else
next->InInitPrev = NULL;
}
break;
}
Depends_List = (PEB_LIST_ENTRY *)Depends_List->InLoadNext;
} while(List_Head != Depends_List);
}