吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9107|回复: 14
收起左侧

[原创] 【原创】【脱壳修复】win7下简单处理重定位表

  [复制链接]
xhbuming 发表于 2015-8-23 17:17
win7下简单处理重定位表
问题介绍:
   对于脱壳修复导入表后的程序,在XP下可以执行,但是换到win7上就直接崩溃的问题。
通常情况是因为win7exe文件的加载进行了基址重定位,而此时如果可执行程序包含重定位表,往往加壳后会对PE重定位表进行压缩,如果运气不好,加壳程序会手动修正执行文件的重定位地址,这时dump下来的程序就会因为丢失重定位表造成程序无法正常执行。所以脱诸如upx一类的压缩重定位表的程序,往往需要手动找出重定位表修复,这样虽然属于较完美脱壳,但复杂度却略高,对于我等懒人时一种折磨,那么只能使用比较懒得方法进行不完美脱壳。

解决思路:

   既然找回重定位表有些复杂,那么我们就不找回重定位表了                              ,我的思路是:在壳更正完重定位表后进行脱壳,此时将镜像基址设置为用OD脱壳时被加载的随机基址, 这时只要PE每次被加载的镜像基址是相同的,那么重定位表也就没有用了.

   下面就来说如何实现上面的思路:
首先,需要找到如何禁止PEwin7重定位基址,

懒得找文档,这里我直接用编译器生成两个程序,一个是开启随机地址一个是未开启随机地址的。  

11.png

然后使用LordPE进行PE比较。
2.png
3.png

  

从上图可以看出两个PE文件主要区别是特征值中的重定位分离属性不同,通过实践发现此处属性就是我们要修改的了,将该属性勾选上后win7 PE装载器将不会对镜像基址进行随机分配了。

动手实践:
UPX压缩含有重定向属性的PE文件,现在开始脱壳,找到OPE后直接对用OD脱壳,关键就是这里
4.png

起始地址我们设置为此次装载器加载的地址即10C0000,大小8E000(这两个信息可通过LordPE查看)
人口地址为当前OEP-镜像基址,10E5474-10C0000=25474h
代码基址和数据基址默认就可以(貌似这两个东西没有用途..),点击脱壳。
    此时如果你去执行脱壳后程序会发现程序是无法执行的,这时用LordPE修改PE属性的                 IMAGE_NT_HEADERS.FileHeader.Characteristics属性,为其添加"重定位已分离选项"
5.png
最后,可以清除掉PE的重定位表信息了
6.png
通过该方法同样可以处理Dll的重定位,但是因为dll没有了重定位表,当加载基址冲突时就玩完了....
所以,该方法只能算是半完美处理重定位表。


免费评分

参与人数 4威望 +1 热心值 +4 收起 理由
晓寒歌 + 1 东西不错,但这字体也太小了吧!!!近视看.
酒醒黄昏 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
Hmily + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
Cizel + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

madder 发表于 2018-8-3 22:23
amonsonic 发表于 2018-6-19 11:40
请问
1.有些exe特征值已经是分离的重定位(没钩),却依然有.reloc区块是怎么回事
2.既然可以已分离,.re ...

重定位表的结构应该知道吧,不知道你可以百度,大概就是每一个表管从节(一般都是0x1000这个位置)开始,每0x1000个字节有一张表,这张表的开始是 0x1000  0x2000这样的,第二个成员是这个表的大小,下面的都是两字节为一个单位的地址,这些两字节的数据后12位 加上 前面说的0x1000就是 需要进行重定位的相对地址,这些地址记录的是 编译器写死的函数地址,如果程序或者dll加载的时候,imagebase 发生变化,写死的函数地址就要改变,就是根据重定位表提供的地址进行改变。重定位表记录的是要改变的地方。比如一个dll 的imageBase本来是0x10000000, 里面的某些函数在被调用,然后编译之后就会写成  0x1000100f,这就是写死了。但是加载dll的时候,发现0x10000000这个地方被人占用了,就可能改成 0x12000000, 现在当然不可能调用0x1000100f这个地址 了,系统就会根据imageBase 还有重定位表 把函数地址修改成0x1200100f。
amonsonic 发表于 2018-6-19 11:40
请问
1.有些exe特征值已经是分离的重定位(没钩),却依然有.reloc区块是怎么回事
2.既然可以已分离,.reloc目录就可以不清0
3.去除重定位目录对原程序有什么影响
4.重定位表有什么详细的作用(我知道是重定位,不知道完整的实现细节和原理),有实例讲解的代码没有

4.
亿联网络 发表于 2015-8-23 17:26
 楼主| xhbuming 发表于 2015-8-23 21:14
亿联网络 发表于 2015-8-23 17:26
楼主这图片的边角怎么搞的

FastStone capture
头像被屏蔽
用生命看广告 发表于 2015-8-28 10:58
提示: 作者被禁止或删除 内容自动屏蔽
酒醒黄昏 发表于 2015-8-28 11:06
要是做成一件修复  才是我等懒人的福音啊  哈哈哈
wolaipao 发表于 2015-10-2 00:42
学习的小白看大神的 帖子,飘过
雨雾星天 发表于 2015-10-2 11:33 来自手机
果断收藏
1462326016 发表于 2015-10-2 12:19
感谢分享
風走過的路 发表于 2016-8-12 19:13

围观学习收藏大牛的经验啊
zeveve 发表于 2016-8-13 00:36
看看,学习下,菜鸟飞过!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 01:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表