程序输入表修复

1.使用的一款修复输入表的工具:Import REConstructor,如下图所示: 



2.一个加过壳的程序在经过脱壳后,输入表一般会出现问题,出现各种程序不能运行的情况,这时就需要修复输入表。

打开未脱壳的程序(因为该修复输入表的工具需要附加到一个活动的进程),然后将打开的未脱壳的程序加载到该工具中,

然后OEP处输入未脱壳程序的OEP(程序的原始入口点),

OEP一般在经过OD调试脱壳后就可以得到,如上图该实验程序的OEP为271B0(该位置填的是程序原始入口点的偏移地址而不是基址,因为该调试工具会自动定位程序的基址),

然后点击自动查找IAT按钮,该工具会自动寻找到未脱壳程序的输入表的RVA:60814(相对偏移地址)和大小718如上图所示,

需要注意的是这些数据都是16进制数(0X),

走到这里就需要手动的查一下OD里面的调试过程,在OD里面数据区域搜索一下460814这个区域的数据情况,一般情况下你可以看到许多API函数,或者是一些乱码(我感觉是某种加密就像 ASCII码或者UNICODE码那样无法识别出来,所以显示的是乱码)

输入表区域一般是一个完整的的区域,一般在这个区域只要不是“...............”这些东西(说的有点俗)一整块的数据基本都属于输入表的内容,所以一般从这个完整的数据块的首地址开始算起到这个数据块结束的地址的大小为这个数据块的大小(也就是需要填写到上图“大小”位置处的数据),对于这个大小,个人感觉一般能大不能小,某些特殊的程序除外。

在这里我感觉还有一种情况需要注意就是有时候在这一整块数据区域有一小部分数据并不需要,或者说是干扰,你如果加进去的话修复过的程序还是无法打开,对于这种情况我个人的看法是遵照该修复工具自动查找得到的RVA和大小,在修改某个程序的输入表时可以尝试一下哪种方式可以成功,毕竟我的水平有限,深层次的知识还不了解,有待进一步提高。

经过这些过程以后就可以点击获取输入表按钮,然后你可以看到程序飞快的加载了好多输入表的函数(这里都是函数的指针及函数的数字),加载完成后,可以点击“显示无效的”按钮,如果输入的IAT大小较大,估计会稍等一会该工具才会显示出来,显示出来以后(那些蓝色的家伙)直接右键(不要手残的去点左键。。。)点击“剪切指针”按钮,这个过程该工具应该会小卡一下,但这是正常情况,你可以发现他正在进行某种操作,CPU都占用了好多。。。  ,等剪切完成,接着点击“修复转储文件”按钮然后选择你用OD  DUMP出来的那个不能正常打开的脱壳程序,然后该工具会自动为你创建一个新的程序,这就是修复过后的程序,到这里,一个程序的输入表的修复工作完成。然后你就可以点击运行了,ok... 关于更深层次的东西以后继续深入

"无法定位程序输入点regsetkeyvaluea" 是一个错误提示,意味着系统无法在程序中找到名为regsetkeyvaluea的函数。 通常情况下,这个错误提示可能是由以下几种情况引起的: 1. 缺少相关的动态链接库(DLL)文件:regsetkeyvaluea函数属于某个特定的DLL文件,如果缺少了这个DLL文件,那么程序就无法找到这个函数。 解决方法:首先要确认程序所需的DLL文件是否存在,如果不存在,需要将其重新安装。或者,可以尝试从另一个可靠的源头获取该DLL文件,并将其复制到程序的运行目录或系统目录下。 2. DLL文件版本不匹配:即使存在所需的DLL文件,如果其版本与程序要求的版本不匹配,程序也无法找到regsetkeyvaluea函数。 解决方法:确保所使用的DLL文件与程序要求的版本一致。可以通过更新程序或DLL文件,或者通过更改程序代码中对该函数的调用来解决。 3. 程序错误或损坏:在特定情况下,程序本身可能存在错误或损坏,导致无法定位regsetkeyvaluea函数。 解决方法:尝试修复或重新安装程序,或者检查程序代码中是否存在调用错误的情况。 总结起来,无法定位程序输入点regsetkeyvaluea通常是由缺少相关DLL文件、版本不匹配或程序错误等原因引起的。解决方法包括确保所需的DLL文件存在且版本匹配,修复或重新安装程序,或处理代码中的调用错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值