一般情况下kernel32.dll中导出的LoadLibraryA、LoadLibraryW、LoadLibraryExA、LoadLibraryExW这四个函数在所有进程中的地址是一致的,这个是远程线程的一个重要假设。然而,虽然可能性比较小,但确实我遇到了,本进程和宿主进程中LoadLibraryA地址不一致,如此产生的结果是宿主进程出错退出,远程注入看似成功,实际上失败了。
调试显示正常情况下LoadLibraryA的地址位于text段,产生问题时确位于rsrc段中,而且这段代码和正常情况下的LoadLibraryA不一致,但若调用它也能达到通常的效果,只是与此同时在宿主进程中,此位置不是代码而是一大段0。
真不知道怎么搞才好,网上也没见有人提到这样的问题,看来目前只有硬编码或暴力方法保险些。希望有此经验的朋友谈一谈!@