首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

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

为什么远程注入某个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/

热点排行