加密与解密第三版中,修复重定位表大概用以下方法: 第一步: 首先需要获取需要重定位的各个RVA地址,保存在一个连续的数据块(bin文件)中。以DWORD的0作为结束。可以通过对外壳加补丁做到这点,参见351页。(感觉纯用OD脚本更方便) 第二步: 然后利用ReloREC工具,将BIN文件拖入界面,然后点击Fix Dump按钮选择DLL文件来修复定位表。 在第一步中,需要跟踪外壳代码中对定位表的处理。因此可能要面对许多讨厌的杂乱的ANTI-DEBUG。 于是我想出个新办法,不必跟踪外壳代码。可一步算出需要重定位的RVA地址。 我们知道,DLL每次加载的地址可能是不同的。我们设法让DLL加载在2个不同的虚拟地址中,然后分别DUMP出2份DLL文件。只要比较这2份DLL文件的不同,就可以得出需重定位的RVA地址了。 那么如何让DLL加载在不同的地址呢?可以修改PE文件头中默认的加载基址。 如果外壳有自校验的话,也可以在不同的虚拟机中加载。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课