首页
社区
课程
招聘
[求助]如何在Ring3 在进程模块里隐藏自己的DLL模块?
2015-1-8 00:46 18948

[求助]如何在Ring3 在进程模块里隐藏自己的DLL模块?

2015-1-8 00:46
18948
如何在Ring3 在进程模块里隐藏自己的DLL模块?
有没有好的C++ 的代码啊?支持X86 X64的 XP 以上系统
不想用驱动啊。

不用内存加载DLL法。。。

==================
已经解决,放代码,在需要隐藏的DLL本身的代码里加入:
typedef struct _UNICODE_STRING {
	USHORT Length;
	USHORT MaximumLength;
	PWSTR  Buffer;
} UNICODE_STRING;

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;

typedef struct _PEB_LDR_DATA
{
	ULONG               Length;
	BOOLEAN             Initialized;
	BYTE        reserved[3];
	PVOID               SsHandle;
	LIST_ENTRY          InLoadOrderModuleList;
	LIST_ENTRY          InMemoryOrderModuleList;
	LIST_ENTRY          InInitializationOrderModuleList;
} PEB_LDR_DATA, *PPEB_LDR_DATA;

typedef struct _NT_PEB 
{
	BOOLEAN InheritedAddressSpace;
	BOOLEAN ReadImageFileExecOptions;
	BOOLEAN BeingDebugged;
	BOOLEAN Spare;
	HANDLE Mutant;
	PVOID ImageBaseAddress;
	PPEB_LDR_DATA LoaderData;
	PVOID ProcessParameters;//PRTL_USER_PROCESS_PARAMETERS
	PVOID SubSystemData;
	PVOID ProcessHeap;
	PVOID FastPebLock;
	PVOID FastPebLockRoutine;//PPEBLOCKROUTINE
	PVOID FastPebUnlockRoutine;//PPEBLOCKROUTINE
	ULONG EnvironmentUpdateCount;
	PVOID *KernelCallbackTable;
	PVOID EventLogSection;
	PVOID EventLog;
	PVOID FreeList;//PPEB_FREE_BLOCK
	ULONG TlsExpansionCounter;
	PVOID TlsBitmap;
	ULONG TlsBitmapBits[0x2];
	PVOID ReadOnlySharedMemoryBase;
	PVOID ReadOnlySharedMemoryHeap;
	PVOID *ReadOnlyStaticServerData;
	PVOID AnsiCodePageData;
	PVOID OemCodePageData;
	PVOID UnicodeCaseTableData;
	ULONG NumberOfProcessors;
	ULONG NtGlobalFlag;
	BYTE Spare2[0x4];
	LARGE_INTEGER CriticalSectionTimeout;
	ULONG HeapSegmentReserve;
	ULONG HeapSegmentCommit;
	ULONG HeapDeCommitTotalFreeThreshold;
	ULONG HeapDeCommitFreeBlockThreshold;
	ULONG NumberOfHeaps;
	ULONG MaximumNumberOfHeaps;
	PVOID **ProcessHeaps;
	PVOID GdiSharedHandleTable;
	PVOID ProcessStarterHelper;
	PVOID GdiDCAttributeList;
	PVOID LoaderLock;
	ULONG OSMajorVersion;
	ULONG OSMinorVersion;
	ULONG OSBuildNumber;
	ULONG OSPlatformId;
	ULONG ImageSubSystem;
	ULONG ImageSubSystemMajorVersion;
	ULONG ImageSubSystemMinorVersion;
	ULONG GdiHandleBuffer[0x22];
	ULONG PostProcessInitRoutine;
	ULONG TlsExpansionBitmap;
	BYTE TlsExpansionBitmapBits[0x80];
	ULONG SessionId;
}NT_PEB, *pNT_PEB;

typedef struct _NT_TEB
{
	NT_TIB Tib;                         /* 00h */
	PVOID EnvironmentPointer;           /* 1Ch */
	//  CLIENT_ID Cid;                      /* 20h */
	BYTE Reserved1[8];				 //占用8个字节
	PVOID ActiveRpcInfo;                /* 28h */
	PVOID ThreadLocalStoragePointer;    /* 2Ch */
	pNT_PEB Peb;                       /* 30h */
	ULONG LastErrorValue;               /* 34h */
	ULONG CountOfOwnedCriticalSections; /* 38h */
	PVOID CsrClientThread;              /* 3Ch */
	void* Win32ThreadInfo;        /* 40h */
	ULONG Win32ClientInfo[0x1F];        /* 44h */
	PVOID WOW32Reserved;                /* C0h */
	LCID CurrentLocale;                 /* C4h */
	ULONG FpSoftwareStatusRegister;     /* C8h */
	PVOID SystemReserved1[0x36];        /* CCh */
	PVOID Spare1;                       /* 1A4h */
	LONG ExceptionCode;                 /* 1A8h */
	UCHAR SpareBytes1[0x28];            /* 1ACh */
	PVOID SystemReserved2[0xA];         /* 1D4h */
	//  GDI_TEB_BATCH GdiTebBatch;          /* 1FCh */
	BYTE Reserved3[0x4e0];				 //占用8个字节
	ULONG gdiRgn;                       /* 6DCh */
	ULONG gdiPen;                       /* 6E0h */
	ULONG gdiBrush;                     /* 6E4h */
	// CLIENT_ID RealClientId;             /* 6E8h */
	BYTE Reserved2[8];				 //占用8个字节
	PVOID GdiCachedProcessHandle;       /* 6F0h */
	ULONG GdiClientPID;                 /* 6F4h */
	ULONG GdiClientTID;                 /* 6F8h */
	PVOID GdiThreadLocaleInfo;          /* 6FCh */
	PVOID UserReserved[5];              /* 700h */
	PVOID glDispatchTable[0x118];       /* 714h */
	ULONG glReserved1[0x1A];            /* B74h */
	PVOID glReserved2;                  /* BDCh */
	PVOID glSectionInfo;                /* BE0h */
	PVOID glSection;                    /* BE4h */
	PVOID glTable;                      /* BE8h */
	PVOID glCurrentRC;                  /* BECh */
	PVOID glContext;                    /* BF0h */
	LONG LastStatusValue;        /* BF4h */
	UNICODE_STRING StaticUnicodeString; /* BF8h */
	WCHAR StaticUnicodeBuffer[0x105];   /* C00h */
	PVOID DeallocationStack;            /* E0Ch */
	PVOID TlsSlots[0x40];               /* E10h */
	LIST_ENTRY TlsLinks;                /* F10h */
	PVOID Vdm;                          /* F18h */
	PVOID ReservedForNtRpc;             /* F1Ch */
	PVOID DbgSsReserved[0x2];           /* F20h */
	ULONG HardErrorDisabled;            /* F28h */
	PVOID Instrumentation[0x10];        /* F2Ch */
	PVOID WinSockData;                  /* F6Ch */
	ULONG GdiBatchCount;                /* F70h */
	USHORT Spare2;                      /* F74h */
	BOOLEAN IsFiber;                    /* F76h */
	UCHAR Spare3;                       /* F77h */
	ULONG Spare4;                       /* F78h */
	ULONG Spare5;                       /* F7Ch */
	PVOID ReservedForOle;               /* F80h */
	ULONG WaitingOnLoaderLock;          /* F84h */
	ULONG Unknown[11];                  /* F88h */
	PVOID FlsSlots;                     /* FB4h */
	PVOID WineDebugInfo;                /* Needed for WINE DLL's  */
}NT_TEB, *pNT_TEB;


NT_TEB*  GetCurrentThreadTEB()
{
	NT_TEB* pTeb=NULL;

	_asm
	{
		mov    eax,fs:[0x18]	//获取本进程的主线程的TEB
		mov    pTeb,eax
	}
	return pTeb;
}

BOOL HideModuleByHandle(HMODULE hModule)
{
	OutputDebugString("FFFFFFFFFFFFFFFFF");
	NT_TEB* pTeb = GetCurrentThreadTEB();
	NT_PEB* pPeb = pTeb->Peb;
	PPEB_LDR_DATA pLdrData = pPeb->LoaderData;
	PLDR_MODULE  ListHead = (PLDR_MODULE)(&(pLdrData->InLoadOrderModuleList));
	PLDR_MODULE pFirstLdrModule = (PLDR_MODULE)pLdrData->InLoadOrderModuleList.Flink; 
	PLDR_MODULE pLdrModule = pFirstLdrModule;
	//   PLDR_MODULE pLastModule,pNextModule;

	//LoadOrderModuleList
	while(pLdrModule != ListHead)
	{
		//判断是否是我们要屏蔽的模块
		if(pLdrModule->BaseAddress == hModule)
		{
			pLdrModule->InLoadOrderModuleList.Flink->Blink = pLdrModule->InLoadOrderModuleList.Blink;
			pLdrModule->InLoadOrderModuleList.Blink->Flink = pLdrModule->InLoadOrderModuleList.Flink;
			pLdrModule->InMemoryOrderModuleList.Flink->Blink = pLdrModule->InMemoryOrderModuleList.Blink;
			pLdrModule->InMemoryOrderModuleList.Blink->Flink = pLdrModule->InMemoryOrderModuleList.Flink;
			pLdrModule->InInitializationOrderModuleList.Flink->Blink = pLdrModule->InInitializationOrderModuleList.Blink;
			pLdrModule->InInitializationOrderModuleList.Blink->Flink = pLdrModule->InInitializationOrderModuleList.Flink;
		}
		//移动到链表的下一个
		pLdrModule = (PLDR_MODULE)pLdrModule->InLoadOrderModuleList.Flink;
	} 
	return 0;
}


然后在DLL初始化或者被调用的函数下面调用一下:
//===============隐藏模块==============================
HMODULE hModule = GetModuleHandle("54nb.com.dll");//本身DLL名称
HideModuleByHandle(hModule) ;
//===============隐藏模块==============================

[培训]《安卓高级研修班(网课)》月薪三万计划

收藏
点赞1
打赏
分享
最新回复 (22)
雪    币: 8809
活跃值: (2364)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 10 2015-1-8 01:09
2
0
直接内存加载DLL
雪    币: 2654
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 34 2015-1-8 01:21
3
0
,同意
雪    币: 255
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
AioliaSky 1 2015-1-8 08:00
4
0
不用内存,可以用显存吗?
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
人在塔在 2015-1-8 09:13
5
0
写成shellcode
注入目标进程
雪    币: 3008
活跃值: (1144)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
zhouws 2 2015-1-8 09:43
6
0
想想就不太可能,不用内存就要有section的存在,这个没办法隐藏,除非只能做到别人找到这个section但不知道是你这个dll
雪    币: 255
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
AioliaSky 1 2015-1-8 10:08
7
0
周总这么早啊,忙什么呢?
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
一盏清茗 2015-1-8 10:10
8
0
大早上一大波牛。。
雪    币: 3008
活跃值: (1144)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
zhouws 2 2015-1-8 10:10
9
0
打杂。。
雪    币: 134
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
夜凉如水 3 2015-1-8 11:04
10
0
同求方法啊
雪    币: 5981
活跃值: (3700)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
pxhb 2 2015-1-8 11:06
11
0

求例子,看到很多壳的插件都这样
雪    币: 7
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mvyn 2015-1-8 13:39
12
0
内存加载dll时导入表如何处理?求思路
雪    币: 719
活跃值: (782)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
落笔飞花 1 2015-1-8 14:21
13
0
修正地址。
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaoaabc 2015-1-8 14:43
14
0
内存加载就可以隐藏dll模块了吗?
雪    币: 1040
活跃值: (455)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Rookietp 2015-1-8 16:16
15
0
内存加载无影无踪
雪    币: 719
活跃值: (782)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
落笔飞花 1 2015-1-8 17:10
16
0
memLOADER
雪    币: 7
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mvyn 2015-1-8 17:43
17
0
借楼主宝地,请教一下,如何修正,比如当内存中还未加载导入表中使用的dll,如何将此dll加载到内存中(不使用LoadLibrary函数)以查找函数地址修正导入表。

望不吝赐教~
雪    币: 780
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 8 2015-1-8 23:59
18
0
解决了,放代码了
雪    币: 123
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
xiager 1 2015-1-9 21:36
19
0
是的,我就是这样过11平台的检测的
雪    币: 265
活跃值: (196)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
冰琥珀 2 2015-1-9 22:45
20
0
这不就是断链么,似乎隐藏性不是很高吧,似乎都过不了XueTr
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
无边 2015-1-12 14:30
21
0
OD都过不了的
雪    币: 1
活跃值: (929)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
网络游侠 2015-1-12 16:02
22
0
DllLoader
雪    币: 6
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
三刀疯 2018-9-24 22:57
23
0
驱动一扫就出来了 你这隐藏没啥用
游客
登录 | 注册 方可回帖
返回