我有一个目标进程,它的主代码被调用之前加载一个DLL。它通过名称被添加到文件的ImportsTable(使用StudPE)的DLL来完成此操作。我的目标是创建一个钩子DLL,它将被注入到这个进程中并在加载它的导入之前拦截它的调用。所以目标进程会在它的安全DLL之前加载我的hook dll。我尝试使用传统的方法,但我没有成功,因为安全DLL总是在我的钩子DLL的DllMain被调用之前被调用。有谁能告诉我一种解决这个问题的方法吗?在调用导入之前将钩子DLL注入进程?
1
A
回答
0
您可以创建目标进程暂停,并使用远程线程()用于注射,但记住以下限制:
- 你应该为远程线程复制线程主程序到目标进程的地址空间。
- 此代码不能包含任何外部引用(例如CRTL或直接WinApi调用)。我通常会限制这些代码加载DLL并执行它的函数,或者依靠DllMain完成你需要的工作。为了调用LoadLibrary和GetProcAddress方法,我获取它们的地址并将包含此信息的结构复制到目标进程,并将远程结构的地址作为CreateRemoteThread()中的线程主例程的参数。您可以使用VirtualAllocEx()在远程进程中分配内存。
- 这种情况下的远程线程将在主线程之前执行,包括进程和一些Win32/64的初始化。因此,在这种情况下,并不是每个Win32 API都可以安全地调用。
如果目标进程是由其他人产生的,则必须在其初始化之前拦截其创建。有一些方法可以做到这一点,所有这些方法都是无证的,因此没有未来的证据。
0
该DLL按照与PE标题中的导入条目相同的顺序依次加载。大多数PE编辑会让你重新排序进口。您还应该注意,如果另一个DLL X具有对安全DLL的依赖关系,那么它将与DLL X同时加载。另外,如果安全DLL使用静态加载,则在运行时通过修改导入表进行挂接仍应该是即使您的DLL稍后被加载也是有效的,但您将错过在此期间完成的调用(但不应该有任何)。
相关问题
- 1. Firefox pr_write挂钩。 DLL注入,windows钩子
- 2. 流程执行之前的DLL注入
- 3. 注入x64进程的x64-DLL挂钩x86-DLL失败,使用C++和EasyHook
- 4. SQLAlchemy ORM之前插入钩子
- 5. SetWindowsHookEx()只注册本地钩子,而注入DLL
- 6. DLL注入 - 调用目标进程的程序
- 7. 子进程执行fork调用之前写入的语句
- 8. 在进入主站点之前注册
- 9. 导入和调用COM DLL
- 10. PyQt4.QtCore的导入钩子
- 11. Python导入钩子和__main__
- 12. C#Dll注入器,VB.Net Dll注入器
- 13. 在远程数据源调用之前将过滤器注入数据源
- 14. DLL注入用CreateRemoteThread
- 15. 用createremotethread注入dll
- 16. 如何在IronPython/Silverlight中导入钩子?
- 17. 在Python进程之间共享导入
- 18. 从注入的DLL中调用函数
- 19. 注入DLL中的调用函数
- 20. push_back()导致程序在进入main()之前停止
- 21. SetWinEventHook - Dll注入?
- 22. 注入C++ DLL
- 23. 上下文注入和BeforeFeature钩子
- 24. 在注入过程中调用DLL中的函数
- 25. 将.dll导入到Qt中
- 26. 将Pchar Delphi DLL导入C#?
- 27. 在Codeigniters之前注入SQL $ this-> db-> get()调用
- 28. 如何在REST调用之前初始化注入值?
- 29. mongoose unique:真正的预保存钩子调用验证之前的钩子
- 30. 导入DLL到C++程序