问题标签 [dll-injection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - 注入dll不起作用?
我创建了一个简单的 dll。我将它注入到一个进程中,但它没有显示消息框。消息框的代码是用 dll 编写的。
dll代码:
c++ - 拦截 Windows 中的移动命令
我正在开发文档标记软件的插件。我想在 Windows 资源管理器中拦截 MOVE 操作,并让标记软件来处理它。
我在想 Hooks, DLL injection 。MOVE可以由用户通过多种方式发起,我需要全部拦截。
有没有人有其他想法。如果您也可以发布一些示例链接,那就太好了。
TIA
苏杰
c - Hook keyboard from injected DLL using KeyboardProc / SetWindowsHookEx
Note: I am working in plain C. Not C++, not C#.
I am working on a mod. I've already written a working DLL-injector, as well as the DLL to be injected. Everything is going well, apart from the userinput.
I want to be able to use hotkeys, so I tried to setup a keyboardhook using SetWindowsHookEx. The following is my callback function:
And this is how I set it up:
As far as I can tell, the hook gets setup well (I used to have a problem with an invalid parameter, but fixed that by using GetCurrentThreadID). It returns a handle which is not NULL.
But whenever I press a key, there is no output.
To further clarify: The code above is from the injected DLL. So it effectively 'belongs' to the game process. I have allocated a console using AllocConsole, to print debug messages to.
What am I doing wrong?
EDIT: To clarify (even more): the listed code is from the injected DLL. It is not the approach I use to inject the DLL - I wrote a seperate (working!) program to do just that.
It surprises some that I use printf(), since that wouldn't show up, considering I call it from inside the host process. Yes, I do call it from inside the host process, but that is not an issue, because I have already allocated a working console. I used an approach very similar to the one mentioned here
EDIT2: I am not asking why printf() isn't working (because it is), I am asking why this keyboardhook isn't working.
c++ - WinAPI 访问另一个应用程序的控件
我需要从 win 计算器 (calc.exe) 中获取所有控件的列表,然后从我的应用程序中按下 calc 上的按钮。我尝试了代码注入,现在可以从 calc 应用程序执行我的代码。在示例中,它发送消息框:
但是我怎样才能使按钮单击并从 calc 上的某些控件中获取文本?
我如何尝试枚举子窗口:
c# - 如何在运行时将文件注入 EXE 并在程序运行期间引用该文件?
我希望用户从我的网站下载一个 exe,其中(在下载时同步)一个 XML 文件被注入到这个应用程序中。此 XML 文件包含一个公钥和一个签名。
如何在下载之前注入文件并在稍后执行期间引用它?
理想情况下,我不会使用 shell 来注入文件,而是使用本机 .NET api。
c# - 如何强烈命名非托管 C++ Dll?
我正在开发一个使用EasyHook 库进行 DLL 注入的 C# 应用程序。EasyHook 要求使用它的任何应用程序都必须进行强命名。为了强命名应用程序,我需要确保我使用的所有库也都是强命名的。
这对我所有的托管库都很容易做到,但我也有一个非托管 c++ 库,我需要对其进行强命名。经过一番搜索,我似乎无法找到一种方法来签署我的非托管 dll,即使使用源代码也是如此。可以做到这一点,如果可以,我需要做什么?
感谢您的任何建议或帮助!
dllimport - 检测 DLL 代码拼接
我正在尝试编写一些函数来检测 DLL 代码拼接。我认为 dll 代码拼接意味着在加载的 dll 中修改函数开头的字节,这样它就不会跳转到 dll 中的完整函数实现,而是跳转到其他位置。
到目前为止,我的方法是:
首先 - 加载 dll 信息(例如,加载的 dll 的图像库等)我从使用 Toolhelp32 库中获得。
对于每个加载的 dll:
- 通过读取内存中 dll 的导出表来获取每个函数地址 (rva)
- 在内存中的这个地址读取 8 个字节
- 从磁盘上的 dll 版本获取函数 rva
- 解析 dll-on-disk 的 PE 头,将 rva 转换为文件偏移量 - 在这里也读取 8 个字节
- 比较这 8 个字节
现在我知道我做的不是很正确,我可能在概念上犯了错误。
我一直在使用 32 位的 notepad.exe 进行测试。对于加载的 DLL 中的大多数函数,比较成功,但它往往会发现一些差异。
例如:
ntdll.dll: ordinal=00000059, rva=0007e098, fileoffs=0007d498, function VA: 7c97e098
disk: 00 00 00 00 00 00 00 00
mem: e4 04 00 00 00 00 00 00
和:
ntdll.dll: ordinal=0000003d, rva=0009d0d8, fileoffs=0009c4d8 函数 VA: 77a9d0d8
磁盘: a1 5c 81 f9 77 c3 90 90
mem: a1 5c 81 ad 77 c3 90 90
有人向我提到这与搬迁有关。但是,我无法弄清楚这一点,并且我还没有找到任何关于如何在此处应用的文档。
有没有人有一些信息或链接?或者有谁知道我在哪里失败?提前谢谢了。
编辑: DLL正在其首选图像库中加载(将 OptionalHeader.ImageBase 与内存中加载模块的基地址进行比较时)。
因此,我一直试图弄清楚为什么会有差异 - 例如。上图:为什么 ntdll 中的 1312 个函数似乎匹配,但第 1313 个不匹配。
c# - 如何更新已部署的类库 (DLL)?
目前我有一个包含类库、安装程序和设置项目的 C# 解决方案。安装项目生成一个 MSI 来安装我的类库 (dll),注册 vsdrfCOM,在最终用户客户端上的第三方应用程序安装后引用该类库。我无法控制第三方应用程序。这一切都按预期工作,并且可以毫无问题地引用我的类库,并且可以通过部署的 MSI 安装/重新安装。
不幸的是,我要解决的问题是如何将更新应用到类库 (dll),而不期望最终用户通过 MSI 卸载、下载新的 MSI 并运行它。此外,还有一些我想维护的用户状态文件夹/文件。基本上,只需覆盖类库(dll)。我最初的目标是初始化库,点击远程位置,检查版本,并在需要时下载新的 dll。然后通知用户他们需要重新启动第三方应用程序。
只是下载一个新的 dll 并在旧的上粘贴似乎不起作用,即使 CLSID 得到维护,因为它看起来注册表不喜欢某些东西。受位于此处的自动更新项目的启发,http://www.codeproject.com/KB/vb/Auto_Update_Revisited.aspx
ClickOnce 似乎不适用于类库,除非您有一个与之绑定的 Forms/Console 应用程序。
- 不确定是否可以下载新的 MSI 并在不覆盖上述用户状态文件的情况下被动地运行旧 MSI。
那么,在上述情况下,有没有办法更新已经安装了MSI的dll呢?
谢谢。
memory-management - DLL 注入、线程和内存释放
我有以下情况 - 我将用 C 编写的 dll 注入另一个进程,该 dll 加载 CLR 并启动一个线程,从托管类库调用方法。
我的问题是 - 我应该如何以及何时释放所有这些对象的内存,以便目标进程(我最初在其中注入 dll)可以成功退出并释放它的资源,包括从我注入的 dll 中释放锁?
c# - 如何在 C# 和 C++/CLI 中为注入器的挂钩进程序列化数据?
我在序列化来自注入器的挂钩进程的数据时遇到了一个奇怪的问题(它将间谍 dll 注入到其他进程中)。我成功地将间谍 dll 登陆到其他托管进程中。但是当我想从那个 spyDll 序列化自定义对象(它实际上落在其他被钩住的托管进程中)时,就会出现问题。在这里,我想序列化数据和列表或 .NET 字典,例如 .NET 字典Dictionary<IntPtr,List<Objects>>
。有时它会通过诸如“无法序列化Dictionary<IntPtr,List<Objects>>
......”之类的异常,有时它会说将挂钩进程中的所有类和类型标记为可序列化。我也尝试过 Json 来做到这一点,但我以某种方式未能正确使用它。
任何有经验的人都可以成功地从 spy dll 获取数据到注入器,然后可以将其传输到使用注入器的模块,然后通过挂钩和注入从远程进程获取一些数据。序列化在简单的控制台基础中工作得很好应用程序,但是我想要获取数据的方式完全不同,因为有一个MessageHookProc
函数负责将托管程序集加载到其他托管进程中。
有谁是 .NET 进程注入和挂钩方面的专家,并成功使用了挂钩进程的一些信息?
笔记 :
====
通过.NET远程处理作为进程间通信将数据从挂钩进程调度到挂钩进程(在注入器和间谍dll的帮助下挂钩其他进程的进程)所需的建议?如果有些没有解决方案将数据从挂钩进程序列化到挂钩进程......?
问候
乌斯曼