问题标签 [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.
dll-injection - DLL 注入 - 它有什么可能?
我最近在浏览互联网时,偶然发现了 Dll Injection。
我认为这是一个有趣的主题,但我不知道它的目的是什么?
我读过它可以用于破解/破解游戏和软件,但它也可以做一些积极的事情吗?
如果是这样,它可以用来做什么?
什么语言支持这个?
为了记录,我不会尝试破解/破解任何获得知识的游戏,无意做一些非法的事情!
谢谢你的时间,
埃默里翁
ps:有关此主题的网站/书籍将不胜感激!
dll - 当我们需要注入 dll
嗨,我学习了一些将 dll 注入另一个进程的方法
好的,我们什么时候使用它或者为什么使用它
请给我一些路线图
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 调用函数?
先感谢您。
c# - 注入的 WPF 窗口
我试图让我的 WPF 窗口通过 DLL 注入和远程 CLR 托管从另一个进程内部显示。我知道 CLR 已正确托管并且能够运行代码,因为我可以使用 ICLRRuntimeHost::ExecuteInDefaultAppDomain(); 从远程进程内部创建 MessageBox();
但是,当我尝试显示我的 WPF 窗口(已编译到类库中)时,什么也没有发生。我尝试了以下方法:
并且:
我的 App.xaml 和 MainWindow.xaml:
以上方法均不显示任何窗口。我对 WPF 很陌生,我确信我缺少一些东西。
c# - 在运行应用程序 i C#/.NET 之前检查 DLL 是否真实/正确
嗨,我想弄清楚如何确保提供的 DLL 是正确的。原因是我们的分布式解决方案是由许多小的 DLL 构建的,每个 DLL 都包含应用程序的某些部分,有时我们会推出其中一些的新版本。
它不是一个“更新问题”,而是一个好消息——我们如何检查:
它是正确的二进制/汇编
客户/客户篡改了文件,并可能将其替换为具有相似功能的同名文件之一以返回错误值?
多种原因
这可以用于复制保护/许可证测试或其他重要的验证问题,所以我试图弄清楚 MD5 校验和 + 某种组合信息是否足够?(如果是这样,如何访问装配详细信息或类似信息?)
因为没有什么是故障安全的,当你可以反编译 .NET DLL 时,但正是因此,我们要确保有人不只是反编译我们的函数列表,然后在那里编写自己的替换 DLL,以替换我们“哦,太重要了”的 DLL。
我们的原因是调试/支持所需的麻烦数量,当我们遇到因错误或目的而破坏这些的客户时(我们不关心原因,我们只是试图防止大多数可能的错误)。
c# - 反射可以帮助我在注入的 DLL 中调用函数吗?
我已将托管 .NET DLL 注入到 .NET 进程中。
我在 StackOverflow 上看到有人说您可以使用反射调用注入的 DLL 的函数。这显然是 Snoop 使用的技术。
它是否正确?如果是这样,具体怎么做?
先感谢您。
c++ - 在另一个进程地址空间,调用dll中的函数,如何
好的,所以我将一个 dll 注入到目标进程地址空间中。如何返回目标进程正在使用的 dll 提供的函数列表,比如说 user32.dll;然后假设 user32.dll 包含一个名为 (int test1(str 1, str 2)) 的函数(我知道它没有),我想调用该函数,我该怎么做?
谢谢。
assembly - 如何使用汇编、机器码将字符串地址推送到堆栈
我正在更改 minesweeper.exe 以了解代码注入的工作原理。简单地说,我希望扫雷器在开始之前显示一个消息框。因此,我在可执行文件中找到了一个“洞穴”,然后定义了要在消息框中显示的字符串并调用消息框。此外,当然,我必须更改可执行文件的模块入口点的值,并首先将其定向到我的附加代码,然后继续其自己的代码。所以我在山洞里做什么;
现在由于可执行文件中代码的内存地址每次加载到内存中都会改变,为了调用MessageBoxW函数,我给出了在导入地址表中定义MessageBoxW的地址的偏移量。例如,如果在 IAT 中的address1MessageBoxW
处定义,并且紧随其后的指令是在address2
而不是write ,我写.call MessageBoxW
call MessageBoxW
call 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”。
所以我认为必须有一些东西来组织这些“更新代码”程序。也许它与重定位表有关,我不知道。
你认为也许我应该把这个作为另一个问题来问吗?
c++ - 使用 CreateToolHelp32Snapshot 找到加载的 dll,在 dll 中找到一个函数,然后调用它,GetProcAddress
我正在尝试获取 .dll 中函数的句柄。我正在创建一个 CreateToolHelp32Snapshot,然后枚举模块,直到找到我想要的那个,从那个 .dll 中我想找到一个特定的函数。如何正确调用 GetProcAddress() 以便在“那个”.dll 中获取函数,而不是在另一个可能正在运行的实例中获取函数?
上述问题的延续将是,好的,所以我有一个函数的句柄,我该如何调用它?
编辑:正如已经指出的那样。我已经在第 3 方应用程序地址空间中。如果 getprocaddress 不起作用,我如何使用 readprocessmemory 和必要的偏移量获取函数的入口点?
谢谢。
格雷格,我很想知道为什么这是错误的?它不会抛出任何错误,但它也不起作用!
函数原型:
我尝试称它为:
c - 使用 C 进行 dll 注入
嘿,我试图将 dll 注入到进程中,即 lsass.exe 以获取哈希值。它有点 hacky 但不能帮助我的项目。我有一个 dll 注入代码,但在 Visual C++ 中它会给出错误,例如..
在 TEXT("LoadLibraryA"))))---->>>argument const wchar 与 LPCSTR 不兼容
在 lpFuncAddr------------>>>参数类型“LPVOID”与参数类型“LPTHREAD_START ROUTINE”不兼容
代码:
我是 dll 和 Windows 编程的初学者,因此将感谢您的帮助。