PE Loader 有所突破
想了一个办法,把 Loader 宿主程序的 ImageBase 在链接时设到不是 0x00400000 的地址,那么被运行的程序就可以在 0x00400000 安家了。
今天花了很多时间来修改导入表的程序段,加入了 Forwarder 导出函数(比如 WSock32.dll 中的导出函数 WSAStartup 其实只是 WS2_32.dll 中的 WSAStartup 的一个引用)的导入程序段,现在基本上可以保证所有导入函数能够被正确导入。
现在的问题是,即使被运行程序的 ImageBase 正确了,被导入的 DLL 们也无法保证他们的 ImageBase。一般来说,很多 DLL 的 ImageBase 都处在很高的内存段,而且相互之间很可能会重叠,遇到这些情况,被导入的 DLL 就必须挪位置。不幸的是,很多程序里面给出的访问地址就是以默认 ImageBase 的值为参照的,所以肯定会出错。我还想不到什么办法来解决这个问题。
更奇快的是,我现在一调试程序,整个 Windows (Windows XP SP1)的所有图标都没了,然后陷入半死机状态,所有程序无法运行。我发现是只要我一装载 exe 文件到 0x00400000,就会出现这个问题,完全让人摸不到头脑……
关于调试器,我找不到合适的、运行于 Windows 下的、开源的 exe 的调试器,而且我发现,就算是 OllyDbg,它也是通过 API 来装载好了一个 exe 后再进行调试的,而我需要的恰恰是在不调用任何关键 API 的情况下装载并运行 exe。看来后面的路还很长。
没有评论:
发表评论