怎么让一个DLL随目录下的exe文件启动
如何让一个DLL随目录下的exe文件启动
目录下有a.exe(没有源码,不可修改)
还可以有一个自己写的b.dll
我希望每次a.exe启动时都自动加载b.dll
有个外挂就是这样做的,名字是 WSOCK.DLL,他替换了socket通讯库
我想利用这个技术,谁能给我指点下
目前我的实验是自己写一个lpk.dll,然后dll加载的时候弹出一个对话框
但实际上lpk.dll并不能够被加载,我的系统是windows8
------解决思路----------------------
取决于人家代码怎么写的
LoadLibrary("WSOCK.DLL")_//在当前搜索路径查找并加载
LoadLibraryEx("WSOCK.DLL",LOAD_LIBRARY_SEARCH_SYSTEM32)_//在系统目录查找加载
清单里加了WinSxS的会去先找WinSxS
------解决思路----------------------
是不是说知道名字,把楼主写的动态库改成对应的名字,然后放到程序路径或系统路径中,就可以了?
如果两个路径都放动态库,那肯定是用新的动态库么?
------解决思路----------------------
1. 找一个exe调用的DLL,放到一个同名的DLL(自己的)在目录下即可。(这种最简单)
2. 修改PE的导入表,增加一个自己DLL的函数调用。(找工具即可)
3. 在A.EXe加个壳,类似于detour,运行时注入dll (需要自己编码)
------解决思路----------------------
你说的这个技术叫dll劫持.
这个技术得以实现, 是因为一个exe的运行肯定会依赖很多dll, 而exe自己只是根据名字加载dll, 并不知道这个dll是否被修改过.
所以你完全可以自己写一个同名的dll覆盖掉原来的dll (前题是有相同的导出函数), 这样程序加载时, 就会调用你自己的dll了.
外挂可能hook掉socket通信的dll, 甚至有些外挂为了多开, 还会hook掉 d3d相关的dll来减少资源加载.
至于你的场景, 因为exe已经固定, 那么它会加载的dll也是固定的. 你要想能加载你的dll, 那么你就需要知道这个exe加载了哪些dll, 有哪些dll你可以实现并修改, 这样才有可能你把自己的b.dll加载到a.exe中去.
------解决思路----------------------
在我的认知里,替换库是一个很麻烦的事情。
1.第一个你必须弄清楚的是,原库的导出函数列表。如果这个库还包含有导出类(比如COM)之类的东西,我觉得还是放弃吧。
导出函数名很好得到,但函数参数就稍微有点费劲。
2.对库进行修改时,在我的认知里,大约有两种方式:1)直接在二进制代码上动手,这要求你对汇编甚至机器语言比较熟悉,有比较强的逆向能力,对文件结构也很清楚,并且不适合大幅度修改;2)将原DLL改名,新建一个与原DLL同名的DLL,在新的DLL重建导出函数列表:对于不需要动的地方,直接调用原DLL对应的函数。
3.对于你的问题,你确定a.exe中会加载b.dll吗?如果不确定这一点,建议还是用全局钩子之类的东西,来对a.exe的进程进行监控。
------解决思路----------------------
看 exe 写的时候 load 的 dll 是什么名字,把 dll 改为相应的名字。。。
目录下有a.exe(没有源码,不可修改)
还可以有一个自己写的b.dll
我希望每次a.exe启动时都自动加载b.dll
有个外挂就是这样做的,名字是 WSOCK.DLL,他替换了socket通讯库
我想利用这个技术,谁能给我指点下
目前我的实验是自己写一个lpk.dll,然后dll加载的时候弹出一个对话框
但实际上lpk.dll并不能够被加载,我的系统是windows8
------解决思路----------------------
取决于人家代码怎么写的
LoadLibrary("WSOCK.DLL")_//在当前搜索路径查找并加载
LoadLibraryEx("WSOCK.DLL",LOAD_LIBRARY_SEARCH_SYSTEM32)_//在系统目录查找加载
清单里加了WinSxS的会去先找WinSxS
------解决思路----------------------
是不是说知道名字,把楼主写的动态库改成对应的名字,然后放到程序路径或系统路径中,就可以了?
如果两个路径都放动态库,那肯定是用新的动态库么?
------解决思路----------------------
1. 找一个exe调用的DLL,放到一个同名的DLL(自己的)在目录下即可。(这种最简单)
2. 修改PE的导入表,增加一个自己DLL的函数调用。(找工具即可)
3. 在A.EXe加个壳,类似于detour,运行时注入dll (需要自己编码)
------解决思路----------------------
你说的这个技术叫dll劫持.
这个技术得以实现, 是因为一个exe的运行肯定会依赖很多dll, 而exe自己只是根据名字加载dll, 并不知道这个dll是否被修改过.
所以你完全可以自己写一个同名的dll覆盖掉原来的dll (前题是有相同的导出函数), 这样程序加载时, 就会调用你自己的dll了.
外挂可能hook掉socket通信的dll, 甚至有些外挂为了多开, 还会hook掉 d3d相关的dll来减少资源加载.
至于你的场景, 因为exe已经固定, 那么它会加载的dll也是固定的. 你要想能加载你的dll, 那么你就需要知道这个exe加载了哪些dll, 有哪些dll你可以实现并修改, 这样才有可能你把自己的b.dll加载到a.exe中去.
------解决思路----------------------
在我的认知里,替换库是一个很麻烦的事情。
1.第一个你必须弄清楚的是,原库的导出函数列表。如果这个库还包含有导出类(比如COM)之类的东西,我觉得还是放弃吧。
导出函数名很好得到,但函数参数就稍微有点费劲。
2.对库进行修改时,在我的认知里,大约有两种方式:1)直接在二进制代码上动手,这要求你对汇编甚至机器语言比较熟悉,有比较强的逆向能力,对文件结构也很清楚,并且不适合大幅度修改;2)将原DLL改名,新建一个与原DLL同名的DLL,在新的DLL重建导出函数列表:对于不需要动的地方,直接调用原DLL对应的函数。
3.对于你的问题,你确定a.exe中会加载b.dll吗?如果不确定这一点,建议还是用全局钩子之类的东西,来对a.exe的进程进行监控。
------解决思路----------------------
看 exe 写的时候 load 的 dll 是什么名字,把 dll 改为相应的名字。。。