首页
社区
课程
招聘
[求助]PE重定位求教
发表于: 2015-6-21 23:59 4114

[求助]PE重定位求教

2015-6-21 23:59
4114
是这样的,我需要提取一个DLL (B)的.text(数据段也是.text)段的内容。
FixBaseRelocTable 能根据重定位表中的数据进行定位,函数参数为 新的镜像基址。
程序A把DLL B的.text段数据提取出来,在程序C中新建一个节表,然后把数据写进去。然后就是怎么定位了。。 直接用FixBaseRelocTable(C的镜像基址) 是不行的,因为在新节表的VirtualAddress和A中的.text段地址不一样。。。

该如何定位??

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1088
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
我把狗砍掉一只腿,求楼下教我怎么用猫的腿接上......
2015-6-22 00:02
0
雪    币: 6911
活跃值: (9074)
能力值: ( LV17,RANK:797 )
在线值:
发帖
回帖
粉丝
3
自己解决了。
void FixRelocBase2(CPeFile &cPe,DWORD ImageBase,DWORD SecBase)
{
PIMAGE_BASE_RELOCATION rel;
DWORD relNum;
rel=(PIMAGE_BASE_RELOCATION)(
cPe.rva_to_buffer(cPe.GetDataDirInfo(IMAGE_DIRECTORY_ENTRY_BASERELOC)->VirtualAddress)
);
while (rel->SizeOfBlock)
{
relNum=(rel->SizeOfBlock-8)/2;
for (DWORD i=0;i<relNum;i++)
{
char Type;
Type = rel->TypeOffset>>12;
if (Type==3)
{
DWORD *relAdr;
relAdr = (DWORD *)rel->VirtualAddress;
relAdr = (DWORD *)cPe.rva_to_buffer((DWORD)relAdr + (rel->TypeOffset&0x0fff));
*relAdr -= cPe.GetImageBase(); //算出RVA
*relAdr -=cPe.FindSectionByName(".MyCode")->VirtualAddress;
*relAdr +=SecBase;
*relAdr +=ImageBase;
}
}
rel=(PIMAGE_BASE_RELOCATION)((DWORD)rel + rel->SizeOfBlock);
}
}
2015-6-22 13:17
0
雪    币: 376
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
参考内存加载dll里面有
2015-6-22 14:55
0
游客
登录 | 注册 方可回帖
返回
//