问题标签 [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.

0 投票
3 回答
7387 浏览

dll-injection - DLL 注入 - 它有什么可能?

我最近在浏览互联网时,偶然发现了 Dll Injection。

我认为这是一个有趣的主题,但我不知道它的目的是什么?

我读过它可以用于破解/破解游戏和软件,但它也可以做一些积极的事情吗?

如果是这样,它可以用来做什么?

什么语言支持这个?

为了记录,我不会尝试破解/破解任何获得知识的游戏,无意做一些非法的事情!

谢谢你的时间,

埃默里翁

ps:有关此主题的网站/书籍将不胜感激!

0 投票
1 回答
224 浏览

dll - 当我们需要注入 dll

嗨,我学习了一些将 dll 注入另一个进程的方法

好的,我们什么时候使用它或者为什么使用它

请给我一些路线图

0 投票
1 回答
4176 浏览

c# - 从注入的 DLL 调用函数


首先我想说的是,我并不是要破解游戏。我实际上受雇于我试图注入其流程的公司。:)
我想知道如何从已经注入的 DLL 中调用函数。
因此,我已经使用 CreateRemoteThread() 在目标中成功注入并加载了我的 DLL。您可以在下面看到注入的片段:

注意:为简洁起见,错误检查和释放资源已被删除,但请放心,我会检查所有指针并释放我的资源。
在上面的函数退出后,我有一个由 LoadLibrary 通过返回的 DLL 的非零模块句柄hLibModule,这意味着 DLL 已正确加载。
我的 DLL 是一个 C# 类库,旨在显示一个消息框(用于测试)。我已尝试测试该功能并弹出消息框。它看起来像这样:

我从 Visual Studio 编译它,DLL 出现在 Debug 文件夹中。然后我将我的 DLL 的完整路径传递给注入器。
注入目标进程后,我不知道如何ThreadFunc从注入的DLL中调用我的,所以它永远不会执行。
我无法使用GetProcAddress(hLibModule,"ThreadFunc"),因为我不在进程中,所以答案必须在于以某种方式调用 CreateRemoteThread()。另外,我已经读到 .NET DLL 不再允许使用 DllMain,因此我也无法通过这种方式获得任何免费执行。
有谁知道如何从注入的 DLL 调用函数?
先感谢您。

0 投票
0 回答
527 浏览

c# - 注入的 WPF 窗口

我试图让我的 WPF 窗口通过 DLL 注入和远程 CLR 托管从另一个进程内部显示。我知道 CLR 已正确托管并且能够运行代码,因为我可以使用 ICLRRuntimeHost::ExecuteInDefaultAppDomain(); 从远程进程内部创建 MessageBox();

但是,当我尝试显示我的 WPF 窗口(已编译到类库中)时,什么也没有发生。我尝试了以下方法:

并且:

我的 App.xaml 和 MainWindow.xaml:

以上方法均不显示任何窗口。我对 WPF 很陌生,我确信我缺少一些东西。

0 投票
2 回答
2733 浏览

c# - 在运行应用程序 i C#/.NET 之前检查 DLL 是否真实/正确

嗨,我想弄清楚如何确保提供的 DLL 是正确的。原因是我们的分布式解决方案是由许多小的 DLL 构建的,每个 DLL 都包含应用程序的某些部分,有时我们会推出其中一些的新版本。

它不是一个“更新问题”,而是一个好消息——我们如何检查:

  1. 它是正确的二进制/汇编

  2. 客户/客户篡改了文件,并可能将其替换为具有相似功能的同名文件之一以返回错误值?

多种原因

这可以用于复制保护/许可证测试或其他重要的验证问题,所以我试图弄清楚 MD5 校验和 + 某种组合信息是否足够?(如果是这样,如何访问装配详细信息或类似信息?)

因为没有什么是故障安全的,当你可以反编译 .NET DLL 时,但正是因此,我们要确保有人不只是反编译我们的函数列表,然后在那里编写自己的替换 DLL,以替换我们“哦,太重要了”的 DLL。

我们的原因是调试/支持所需的麻烦数量,当我们遇到因错误或目的而破坏这些的客户时(我们不关心原因,我们只是试图防止大多数可能的错误)。

0 投票
4 回答
869 浏览

c# - 反射可以帮助我在注入的 DLL 中调用函数吗?

我已将托管 .NET DLL 注入到 .NET 进程中。
我在 StackOverflow 上看到有人说您可以使用反射调用注入的 DLL 的函数。这显然是 Snoop 使用的技术。
它是否正确?如果是这样,具体怎么做?
先感谢您。

0 投票
2 回答
2132 浏览

c++ - 在另一个进程地址空间,调用dll中的函数,如何

好的,所以我将一个 dll 注入到目标进程地址空间中。如何返回目标进程正在使用的 dll 提供的函数列表,比如说 user32.dll;然后假设 user32.dll 包含一个名为 (int test1(str 1, str 2)) 的函数(我知道它没有),我想调用该函数,我该怎么做?

谢谢。

0 投票
3 回答
6013 浏览

assembly - 如何使用汇编、机器码将字符串地址推送到堆栈

我正在更改 minesweeper.exe 以了解代码注入的工作原理。简单地说,我希望扫雷器在开始之前显示一个消息框。因此,我在可执行文件中找到了一个“洞穴”,然后定义了要在消息框中显示的字符串并调用消息框。此外,当然,我必须更改可执行文件的模块入口点的值,并首先将其定向到我的附加代码,然后继续其自己的代码。所以我在山洞里做什么;

现在由于可执行文件中代码的内存地址每次加载到内存中都会改变,为了调用MessageBoxW函数,我给出了在导入地址表中定义MessageBoxW的地址的偏移量。例如,如果在 IAT 中的address1MessageBoxW处定义,并且紧随其后的指令是在address2 而不是write ,我写.call MessageBoxWcall MessageBoxWcall address2 - address1

所以我的问题是,如何将字符串的地址推入堆栈?例如,如果我通过 ollydbg 进行这些更改,我会给出“hello starbuck”的直接地址以进行推送,并且它可以工作。但是在重新加载可执行文件或在 ollydbg 之外启动它之后,它自然会失败,因为直接地址发生了变化。

提前感谢,伊吉特。

编辑:现在发生这个问题是因为每次打开 exe 时模块入口点的高位字都会发生变化。因此,为了查看其他字符串是如何被推入堆栈的,我这样做了:

我在代码中找到了“Destroy Canvas”字符串。它位于地址:00403E44。在地址 0042878E 处,有一条指令PUSH 00403E44(68 44 3E 40 00),这意味着指向字符串的指针被压入堆栈。然后我在UltraEdit中打开exe,找到对应的地址,就是00027D8E。在那里,它写的不是“68 44 3E 40 00”,而是“68 44 3E 00 01”。现在这意味着当 OllyDbg 加载 exe 时,它​​会更新这些代码;00 01 到 40 00。我查看了其他字符串,它们的推送指令也是如此。所以我想如果我在 UltraEdit 中写“68 DA 9A 00 01”而不是“68 DA 9A 40 00”来推送字符串,它也会被更新。但事实并非如此。之后我在 OllyDbg 中打开 exe 时,要推送的地址仍然是“01009ADA”。

所以我认为必须有一些东西来组织这些“更新代码”程序。也许它与重定位表有关,我不知道。

你认为也许我应该把这个作为另一个问题来问吗?

0 投票
2 回答
1888 浏览

c++ - 使用 CreateToolHelp32Snapshot 找到加载的 dll,在 dll 中找到一个函数,然后调用它,GetProcAddress

我正在尝试获取 .dll 中函数的句柄。我正在创建一个 CreateToolHelp32Snapshot,然后枚举模块,直到找到我想要的那个,从那个 .dll 中我想找到一个特定的函数。如何正确调用 GetProcAddress() 以便在“那个”.dll 中获取函数,而不是在另一个可能正在运行的实例中获取函数?

上述问题的延续将是,好的,所以我有一个函数的句柄,我该如何调用它?

编辑:正如已经指出的那样。我已经在第 3 方应用程序地址空间中。如果 getprocaddress 不起作用,我如何使用 readprocessmemory 和必要的偏移量获取函数的入口点?

谢谢。

格雷格,我很想知道为什么这是错误的?它不会抛出任何错误,但它也不起作用!

函数原型:

我尝试称它为:

0 投票
1 回答
2163 浏览

c - 使用 C 进行 dll 注入

嘿,我试图将 dll 注入到进程中,即 lsass.exe 以获取哈希值。它有点 hacky 但不能帮助我的项目。我有一个 dll 注入代码,但在 Visual C++ 中它会给出错误,例如..

在 TEXT("LoadLibraryA"))))---->>>argument const wchar 与 LPCSTR 不兼容

在 lpFuncAddr------------>>>参数类型“LPVOID”与参数类型“LPTHREAD_START ROUTINE”不兼容

代码:

我是 dll 和 Windows 编程的初学者,因此将感谢您的帮助。