• 标 题:输入表重建工具ReVirgin
  • 作 者:blowfish
  • 时 间:2000年
  • 链 接:http://bbs.pediy.com

ReVirgin(简称RV)

功能:      重建Import Table;寻找OEP
下载地址:  http://www.woodmann.com/fravia/index.htm
具体地址是:http://www.woodmann.com/fravia/exe/revirgin.zip

一、安装。

1、自动安装:

直接双击*.msi就会自动激活Windows Installer进行安装,这是最省事的办法。如果你的系统太老,可能需要到微软主页上免费下载Windows Installer的包。

2、手动安装:

可以用WinRAR将*.msi解开到某个目录中。然后把tracer.dll、thread.dll拷贝到%SystemRoot%目录下;对于NT/2K/XP系统,把rvtracer.sys拷贝到%SystemRoot%\system32\drivers目录中。

二、重建IT

1、首先选择被加壳的程序所对应的进程。如果找不到则点击refresh按钮。

2、再找被加壳了的程序的OEP。找OEP的方法主要有:用IceDump的/tracex;用冲击波;手动用debugger跟;利用各种编译器生成的可执行程序的startup code的机器码的pattern来找;利用RV自带的tracer来找。

3、找到OEP之后将其填入RV的相应位置(注意要填VA而不是RVA),然后点击“Fetch IAT”,RV会自动分析出IAT的起始RVA和Length。如果你觉得RV找到的不对,你也可以手动找到这个RVA和Length并填入该位置。

4、然后点击“IAT Resolver”按钮,RV会自动分析,可能要等好几分钟。这时CPU占用率很高,最好不要切换到其它程序。

5、分析完之后会看到一些API函数标记为“redirected/emulated”,此时点击“Resolve again”,大部分函数都可以resolve出来。

6、然后在下拉列表中选择“Show unresolved”,因为此时只关心尚未分析出来的API函数。

在函数列表框中选中一个或多个函数(按住shift可以选多个),然后打开右键菜单。对于每个未分析出来的API函数,你可以试试右键菜单中的“tracer”或“API Emulator”,如果RV能够分析出来,则相应的行会变成“traced”或“emulated”状态,并且Address这一列会指向DLL的地址范围。

一旦变成“traced”或“emulated”状态,则你可以再次点击“resolve again”按钮,这些API函数将会被分析出来。

注:
a、未分析出来的函数很多时,最好不要用右键菜单中的“Trace all”,后果你试试就知道了;
b、右键菜单中的edit是个开关,表示列表中的每列是否可以编辑,此时可以手动输入API函数的相关信息(但这里似乎有bug,因为即使你手动把未分析出来的函数都手动填入了,RV仍说没有全部分析完)。
c、右键菜单中的Tracer功能可能会导致被跟踪的程序出现非法操作,所以最好是随时使用“Save resolved”按钮的功能把阶段性结果存为文本文件,一旦出现非法操作还可以用“Load resolved”功能把以前的结果加载进来继续干活。

7、对所有的API函数重复5、6两步,大部分都可以分析出来。剩下的那些基本上要用debugger来手动分析了。

8、所有的API函数都分析出来之后,就可以生成IT信息,并粘贴到脱壳后的文件中。首先你得确定把生成的IT放在程序的什么位置,一般是放在末尾(此时要添加一个section),但实际上可以放在任何合理的位置。

把存放IT的位置的RVA填入,并点击“generate”按钮。如果选中了“Auto fix sections + IT Paste”,则RV会问你脱壳后的exe文件名并自动把IT粘贴进去(但目前的版本没有帮你修改程序的OEP,你得手动修改粘贴好的程序的OEP),并生成一个BIN文件,这个BIN文件是由IT、IAT、DLL名和函数名组成的,供你手动粘贴用(如果你喜欢手动粘贴的话)。

至此重建IT完毕。

三、其它说明:

1、RV的mangled scheme选项是用来对付那种将多个API重定向到同一个函数的壳的,一般用不上。
2、RV的底部的“Tracer”按钮是用来跟踪程序找OEP的,功能也很强。 只需要指定OEP可能存在于什么范围(给出最小值、最大值),当被跟踪的程序的EIP落在此区间时RV就会停下来。这和利用IceDump的/tracex来找OEP有些相似。
3、API函数列表中的Refs这一列是该函数的引用计数。
4、最好是在OEP处将被加壳的进程suspend,然后用RV。因为某些被ASProtect加壳的程序在进入OEP之后会修改IAT的某些项。