exe重定位清除,主要让WIN7的动态基址不起作用
来源:互联网 发布:福州司法拍卖淘宝网 编辑:程序博客网 时间:2024/06/04 18:03
若EXE有重定位表,在属性里将重定位已分离勾上,同时将重定位表的数值清零,OK,WIN7再也不用将EXE动态基址了。爽.原文在看雪:
标 题: 【原创】【脱壳修复】win7下简单处理重定位表
作 者: xhbuming
时 间: 2015-04-23,15:14:40
链 接: http://bbs.pediy.com/showthread.php?t=199895
操作很简单,高手请直接看动手实践
问题介绍:
对于脱壳修复导入表后的程序,在XP下可以执行,但是换到win7上就直接崩溃的问题。
通常情况是因为win7对exe文件的加载进行了基址重定位,而此时如果可执行程序包含重定位表,往往加壳后会对PE重定位表进行压缩,如果运气不好,加壳程序会手动修正执行文件的重定位地址,这时dump下来的程序就会因为丢失重定位表造成程序无法正常执行。所以脱诸如upx一类的压缩重定位表的程序,往往需要手动找出重定位表修复,这样虽然属于较完美脱壳,但复杂度却略高,对于我等懒人时一种折磨,那么只能使用比较懒得方法进行不完美脱壳。
解决思路:
既然找回重定位表有些复杂,那么我们就不找回重定位表了 ,我的思路是:在壳更正完重定位表后进行脱壳,此时将镜像基址设置为用OD脱壳时被加载的随机基址, 这时只要PE每次被加载的镜像基址是相同的,那么重定位表也就没有用了.
下面就来说如何实现上面的思路:
首先,需要找到如何禁止PE被win7重定位基址,
懒得找文档,这里我直接用编译器生成两个程序,一个是开启随机地址一个是未开启随机地址的。
然后使用LordPE进行PE比较。
从上图可以看出两个PE文件主要区别是特征值中的重定位分离属性不同,通过实践发现此处属性就是我们要修改的了,将该属性勾选上后win7 PE装载器将不会对镜像基址进行随机分配了。
动手实践:
用UPX压缩含有重定向属性的PE文件,现在开始脱壳,找到OPE后直接对用OD脱壳,关键就是这里
起始地址我们设置为此次装载器加载的地址即10C0000,大小8E000(这两个信息可通过LordPE查看)
人口地址为当前OEP-镜像基址,即10E5474-10C0000=25474h
代码基址和数据基址默认就可以(貌似这两个东西没有用途..),点击脱壳。
此时如果你去执行脱壳后程序会发现程序是无法执行的,这时用LordPE修改PE属性的 IMAGE_NT_HEADERS.FileHeader.Characteristics属性,为其添加"重定位已分离选项"
最后,可以清除掉PE的重定位表信息了
通过该方法同样可以处理Dll的重定位,但是因为dll没有了重定位表,当加载基址冲突时就玩完了....
所以,该方法只能算是半完美处理重定位表。
win7下简单处理重定位表.doc.*转载请注明来自看雪论坛@PEdiy.com
- exe重定位清除,主要让WIN7的动态基址不起作用
- 动态基址的定位获取
- 基址重定位
- 基址重定位
- 动态基址定位的改进方法
- PE文件基址重定位
- PE结构->【基址重定位】
- 关于内核重载中基址重定位的一点解释
- PE详解之 基址重定位
- EXE文件的重定位表起作用
- EXE文件的重定位表起作用
- 0.ring3-去掉exe的重定位
- vc++教程之win7下基址定位处理
- PE格式详解9 基址重定位详解
- PE文件结构(五)基址重定位
- PE格式详细讲解10 - 基址重定位
- PE文件学习(四)基址重定位
- PE格式详细讲解10 – 基址重定位
- Android调试命令总结
- js/jquery操作div显示或隐藏
- MyEclipse项目如何导入jar包
- 关于指针
- Java c标签的简单使用
- exe重定位清除,主要让WIN7的动态基址不起作用
- Spring3+mybatis+mysql整合详解(五)
- 对框架设计模式的认识小结
- SRVE0255E: A WebGroup/Virtual Host to handle /p2pd/servlet/dispatch has not been defined.
- IOS调试技巧(不定时更新)
- poj 2240 Arbitrage(Bellman-Ford||Floyd)(中等)
- HEVC/H.265视频软硬件编码
- poj2676Sudoku 暴搜
- 结构体简介