滴水 加载进程,内存写入

***第一个递归问题解决了,原因是如果加载过的dll再修复一边会重复包含然后卡死循环,不过后来有大佬告诉我LoadLibrary或自动加载所需要的DLL,所以竹篮打水一场空,不过我还是会修改代码的,给大家演示一下这种情况,说不定未来哪天能用上
但是就算解决了也无法运行图形界面的程序,比如飞鸽运行出来没有图标,界面只有一个后台进程,PEtool跑不了
后来都要学完内核了,才想起来了,这个软件跑不起来才是正常的,傀儡进程能跑起来图形界面,是因为创建了一个新的进程并且有自己的界面,控制台程序已经占有了这个线程


第一个跳转这个没写好,只有能加载控制台程序,我猜是导入表dll依赖其他dll,那么就需要递归,但我怎么也写不出来,那个递归莫名其妙的有个死循环,一直重复包含
后面贴了IAT修复函数,里面有写一个坑,修复IAT的时候注意对着INT修改成IAT,因为后面那个程序的IAT是已经被修过的了,没有储存数据

VOID ProcessJmp(PBYTE pFileName) {
   
	//读入数据,初始化各项需要的数据
	PBYTE pFileBuffer = 0;
	PBYTE pImageBuffer = 0;
	DWORD dwFileSize = FileToFileBuffer(pFileName, &pFileBuffer);
	DWORD dwImageSize = FileBufferToImageBuffer(pFileBuffer, &pImageBuffer, dwFileSize);
	free(pFileBuffer);
	PIMAGE_DOS_HEADER pDosHeader = pImageBuffer;
	PIMAGE_NT_HEADERS pNTHeader = (DWORD)pImageBuffer + pDosHeader->e_lfanew;
	if (pNTHeader->Signature != IMAGE_NT_SIGNATURE) {
   
		printf("File is not PE\n");
		free(pImageBuffer);
		return FALSE;
	}
	PIMAGE_FILE_HEADER pFileHeader = (DWORD)pNTHeader + sizeof(pNTHeader->Signature);
	PIMAGE_OPTIONAL_HEADER pOptionalHeader = (DWORD)pFileHeader + sizeof(IMAGE_FILE_HEADER);
	PIMAGE_SECTION_HEADER pSectionHeader = (DWORD)pOptionalHeader + pFileHeader->SizeOfOptionalHeader;
	PBYTE oep = pOptionalHeader->ImageBase + pOptionalHeader->AddressOfEntryPoint;
	//在自身内存Process.ImageBase处申请Process.ImageSize大小的内存
	HANDLE hCurProcess = GetCurrentProcess();
	PVOID pImageBase = VirtualAllocEx(hCurProcess, pOptionalHeader->ImageBase, pOptionalHeader->SizeOfImage,
		MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	if (!pImageBase) {
   
		printf("VirtualAllocEx1\n");
		return;
	}
	//修IAT
	FixIATTable(&pImageBuffer);
	//写入pImageBase处
	if (!WriteProcessMemory(hCurProcess, pImageBase, pImageBuffer, dwImageSize,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值