-
-
[原创]手查PE重定向
-
2015-11-26 10:27
10032
-
建议先看这篇文章
手查PE导出表:
http://bbs.pediy.com/showthread.php?t=205989
工具:010editor 计算器...
既然是手查重定位 那么就要先找到重定位表
得到 地址029000 大小09F8
判断落在哪个区段
区段大小 地址
10000 1000
e8ca 011000
4248 20000
0a54 025000
11dc 026000
08c9 028000
0c56 029000 015200
029000-029000+015200=
015200
计算及判定方法在“手查PE导出表”一文中 在此就不赘述了。
根据数据结构:
typedef struct _IMAGE_BASE_RELOCTION{
DWORD VirtualAddress; //需要重定位的位置
DWORD SizeOfBlock; //这个结构体的大小
WORD TypeOffset[1]; //一个特殊数据存放相对于第一个元素描述的位置的偏移
}
CTRL+G
15200
得到 011000 0C 3FD0
需要重定位的个数 n=(SizeOfBlock-8(结构体的大小))/2;
(0C+8)/2=2H
第三个成员高4位描述属性 低12位描述的才是一个偏移
我们可以用计算器得到 高四位为0011 即0x0003 低12位*111111010000 即
0xFD0
我们便可以得到需要重定位的虚拟地址RVA
11000+fd0=11fd0;
按照上篇帖子所述方法 我们仍需要查落在哪个区段
由之前查到区段可知
落在第二个区段 所以我们可以按照公式 :11fd0-11000+0400=
13d0
ctrl +G 13D0
取出数据(无论如何都是4个字节) 得
100209fc
我们再去扩展头(可选头)找到默认加载基址
得到
10000000
根据公式 得到 100209fc-1000000=
209FC 这个数据就是需要重定位的虚拟地址(VA)
很显然 落在第三个区段
再计算 : 209FC-20000+ee00=
F7FC
CTRL +G
F7FC
得到内容 也就是 lordpe里面的数据解释
然后对照LORDPE 就会发现 这个上面的所需数据 我们都查到了!!!!
好了 重定位大概就是这些
至于自我重定位 有了这些思路那还难吗?
这篇文章是因论坛网友的需求 再加之我有空 就写出来吧
还有 我为什么从来没被加过精华 或者优秀也是好的啊 (哭
我哪里有欠缺 大家指出来 我好改正啊
-----------------------------------
样本:
MFCLibrary1Dll.rar
[培训]《安卓高级研修班(网课)》月薪三万计划