读书人

为何远程注入某个dll时候里面的api函

发布时间: 2012-10-19 16:53:36 作者: rapoo

为什么远程注入某个dll时候,里面的api函数的起始地址就不是原来的那个呢


1.为什么远程注入某个dll时候,里面的api函数的起始地址就不是原来的那个呢?
自己写了个模块a.dll b.exe程序用“载入动态链接库LoadLibraryA函数”载入a.dll
用“取模块函数地址GetProcAddress函数得到了指定的函数的起始地址”然后用“创建远程线程CreateRemoteThread”创建 了线程
这样可以在b.exe中运行a.dll里面的指定函数

2. 但是呢 把a.dll注入到其他进程
然后打开其它的进程
用“创建远程线程”运行a.dll时候就出错了
所以我用ollydbg打开a.dll(用"查看名称"的菜单)直接取指定的“导出函数”的地址这样远程注入时候用这个地址又可以运行了

但我用ollydbg得到的“导出函数”的起始地址在b.exe运行时候就出错了

我就是想知道是不是把a.dll模块注入到其他进程时候原始的函数起始地址就会发生变化呢?



[解决办法]
你是怎么把你的dll注入到别的进程的?是用的CreateRemoteThread么?如果是,你需要同时再注入一些代码,就是把获取函数地址的代码也注入进去。

要么就是在你的dllmain的attch事件里面启动个线程,在线程里处理。
[解决办法]
注入远程进程需要处理重定位信息以防止地址冲突。LdrSup可以帮助您干这事,将EXE/DLL注入到远程进程中。http://rlib.googlecode.com/svn/Examples/Loader/

读书人网 >C++

热点推荐