首页
社区
课程
招聘
[求助]小白急求 前辈看看代码修复重定位
发表于: 2017-12-13 19:39 2568

[求助]小白急求 前辈看看代码修复重定位

2017-12-13 19:39
2568
pNTHeader->OptionalHeader.ImageBase += 0x1000;
	// 获取 RelocationBase 地址,遍历重定位块修复.....rva
	pRelocationBase = (PIMAGE_BASE_RELOCATION)pNewSecbuffer;
	while (1)
	{
		if ((pRelocationBase->SizeOfBlock == 0) && (pRelocationBase->VirtualAddress == 0))
			break;// 该检测有问题....
		PIMAGE_SECTION_HEADER pSecHeader = NULL;  // 循环遍历 找到对应的节
		pSecHeader = (PIMAGE_SECTION_HEADER)((DWORD)pNTHeader + sizeof(IMAGE_NT_HEADERS32));
		int x = 0;
		BOOL bFind = FALSE;
		for (x = 0; x < pNTHeader->FileHeader.NumberOfSections; ++x)
		{
			DWORD low = pSecHeader->VirtualAddress;	// 这个在内存里面啊
													//
			DWORD hign = pSecHeader->VirtualAddress + pSecHeader->Misc.VirtualSize;
			if ((pRelocationBase->VirtualAddress < hign) && (pRelocationBase->VirtualAddress >= low))
			{
				bFind = TRUE;
				break;
			}
			pSecHeader++;
		}
		if (!bFind)	 // 如果找不到这样的区段
			break;
		// 得到真修改的值 (全局变量的地址  常量 的地址  用户函数的地址)+1000H
		int nItems = (pRelocationBase->SizeOfBlock - 8) / 2;
		PWORD pItem = (PWORD)((DWORD)pRelocationBase + 8);//得到第一项...
		for (int n = 0; n < nItems; ++n)
		{
			WORD item12 = *pItem & 0x0fff;	  // 遍历 该快的items 修复重定位表...
			WORD item4 = *pItem >> 12;
			if (item4 == 3)
			{
				DWORD rva = pRelocationBase->VirtualAddress + item12;
				PDWORD pAddress=(PDWORD)((DWORD)newFilebuffer+RVAtoFOA(newFilebuffer, rva));
				*pAddress += 0x1000;
			}
			pItem++;
		}
		
		pRelocationBase = (PIMAGE_BASE_RELOCATION)((DWORD)pRelocationBase + pRelocationBase->SizeOfBlock);
	}
	


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
在这段代码  前面  ,我首先新增了一个节,将重定位表移动到了这几pNewSecBuf里。我调试的时候发现,如果不修改imagebase,也不修复重定位表。  也就是把上述代码注释掉,LoadLibry  函数是能够执行成功的。去掉上述代码的注释,就加载失败。hMoudule  返回NULL??
2017-12-13 19:50
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
有人吗  ???
2017-12-13 19:57
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
已经解决了    模块对齐的问题 
2017-12-14 10:20
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我这2天和你遇到的问题一样,就是和pe重定向表修复有关的问题方便加qq问么2506266391
2017-12-22 02:37
0
雪    币: 1448
活跃值: (579)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我也出现这样的问题,后来发现是算法写错了。 
推荐用winhex,打开原DLL与你修改的DLL做对比,winhex有对比功能
也可以自己写方法,比较,找出出错位置
2020-3-13 18:20
0
游客
登录 | 注册 方可回帖
返回
//