-
-
[求助][求助]关于写壳时壳的重定位问题
-
发表于:
2015-8-9 17:15
5417
-
思路如下,
1. 为待加壳程序新添一个区段,
2. 处理壳的重定位表,
3. 将壳复制进去,
4. 设置新的OEP指向( OEP - 壳代码段RVA + 新段RVA)
大体如上
在修复重定位表时,采用
*((ULONG*)Data) -= ShellCodeOffset; //重定位地址 - 壳的代码段偏移
*((ULONG*)Data) -= ShellImageBase; //重定位地址 - 壳的 Imagebase
*((ULONG*)Data) += NewSecOffset; // 加 新段偏移
*((ULONG*)Data) += ImageBase; //加 待加壳程序 基址
其中 Data 是就是 重定位表中需重定位的项的地址,
壳已将 text 和data 段合并
出现的问题:
在运行 加壳后的程序后, 用OD 跟,发现
013D6012 68 54604000 push 0x406054
013D6017 68 5C604000 push 0x40605C
013D601C 6A 00 push 0x0
013D601E FF15 00604000 call dword ptr ds:[0x406000] ; 这是MessageBox IAT 还没修复
其中 0x406054 和 0x40605C 就是 修复后的值,但是程序加载时的地址是
013D0000 新的起始段在 013D6000 ,所以的重定位后正确的字符串应该在
0x13D6054
如下:
013D6054 61 61 61 61 00 00 00 00 aaaa....
问题就是 为什么 壳的重定位表没有生效,没有随待加壳程序的加载地址变化而动态修改?
可能理解有问题,希望哪位好心人能给予一个提示。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课