标签: dll-injection

从注入的DLL中挂接DirectX EndScene

我想绕过EndScene任意DirectX 9应用程序来创建一个小的叠加层.例如,您可以采用FRAPS的帧计数器覆盖,激活后会在游戏中显示.

我知道以下方法:

  1. 创建一个新的d3d9.dll,然后将其复制到游戏路径.由于首先搜索当前文件夹,然后转到system32等,我的修改后的DLL会被加载,执行我的附加代码.

    缺点:你必须在开始游戏之前把它放在那里.

    • 与第一种方法相同,但直接替换system32中的DLL.

    缺点:您无法添加游戏特定代码.您不能排除不希望加载DLL的应用程序.

    • 使用IDA Pro 4.9 Free等工具直接从DLL获取EndScene偏移量.由于DLL按原样加载,您可以将此偏移量添加到DLL起始地址,当它映射到游戏时,获取实际偏移量,然后将其挂钩.

    缺点:每个系统的偏移量都不相同.

    • 挂钩Direct3DCreate9以获取D3D9,然后挂钩D3D9-> CreateDevice以获取设备指针,然后通过虚拟表挂钩Device-> EndScene.

    缺点:当进程已经运行时,无法注入DLL.您必须使用CREATE_SUSPENDED标志启动进程以挂接初始Direct3DCreate9.

    • 一旦注入DLL,就在新窗口中创建新设备.然后,EndScene从该设备获取偏移量并将其挂钩,从而导致游戏使用的设备挂钩.

    缺点:从我读过的一些信息来看,创建第二个设备可能会干扰现有设备,并且可能会出现窗口与全屏模式等错误.

    • 与第三种方法相同.但是,您将进行模式扫描EndScene.

    缺点:看起来不那么可靠.

如何挂钩EndScene注入的DLL,可以在游戏运行时加载,而不必在其他系统上处理不同的d3d9.dll,并使用可靠的方法?例如,FRAPS如何执行它的DirectX挂钩?DLL不应该适用于所有游戏,只适用于我通过注入它的特定进程CreateRemoteThread.

c++ directx hook dll-injection

31
推荐指数
3
解决办法
5万
查看次数

Dll Injection - 有什么可能吗?

我最近在浏览互联网时遇到了Dll Injection.

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

我已经读过它可以用于破解/黑客游戏和软件,但它是否也可以做一些积极的事情呢?

如果是的话,它可以用于什么?

什么语言支持这个?

为了记录,我不会尝试破解/破解任何获得知识的游戏,无意做违法行为!

谢谢你的时间,

Emerion

ps:关于这个主题的网站/书籍将不胜感激!

dll-injection

17
推荐指数
2
解决办法
6167
查看次数

获取进程主线程的句柄

我在一些小型测试应用程序中创建了一个额外的线程,并希望从这个额外的线程中挂起主线程.附加线程是通过CreateRemoteThread外部进程创建的.

由于SuspendThread需要一个HANDLE应该挂起的线程,我想知道如何HANDLE从我的附加线程中运行的代码中获取它.

c++ windows multithreading dll-injection

14
推荐指数
3
解决办法
3万
查看次数

使用CreateRemoteThread进行DLL注入

如果您看一下简单DLL注入的以下工作代码:

  //Open the target process with read , write and execute priviledges
   Process = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_VM_OPERATION, FALSE, ID); 

   //Get the address of LoadLibraryA
   LoadLibrary = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 

   // Allocate space in the process for our DLL 
   Memory = (LPVOID)VirtualAllocEx(Process, NULL, strlen(dll)+1, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 

   // Write the string name of our DLL in the memory allocated 
   WriteProcessMemory(Process, (LPVOID)Memory, dll, strlen(dll)+1, NULL); 

   // Load our DLL 
   CreateRemoteThread(Process, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibrary, (LPVOID)Memory, NULL, NULL); 

   //Let the program regain control of itself
   CloseHandle(Process); …
Run Code Online (Sandbox Code Playgroud)

c++ dll visual-studio visual-c++ dll-injection

14
推荐指数
2
解决办法
1万
查看次数

C#DLL注入

是否可以使用C#将DLL文件注入到诸如explorer或svchost的进程中?我知道这在C++中是可行的,但它是否在C#中?如果是这样,DLL的编写方式是否重要,例如它是否会在C++ DLL或Visual Studio C#.NET DLL之间有所不同?如果这是可能的话,有人可以发布我可以用来执行此操作的代码.非常感谢你.

c# dll-injection

11
推荐指数
1
解决办法
2万
查看次数

10
推荐指数
2
解决办法
3496
查看次数

从运行进程注入DLL后弹出

我编写了这个函数来将DLL注入到运行进程中:

DLL_Results CDLL_Loader::InjectDll()
{
    DWORD ThreadTeminationStatus;
    LPVOID VirtualMem;
    HANDLE hProcess, hRemoteThread;
    HMODULE hModule;

    if (!isInit())
        return NOT_INIT;

    if (isInjected())
        return DLL_ALREADY_HOOKED;

    hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
    if (hProcess == NULL)
        return PROCESS_ERROR_OPEN;

    VirtualMem = VirtualAllocEx (hProcess, NULL, strlen(DllFilePath), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    if (VirtualMem == NULL)
        return PROCESS_ERRORR_VALLOC;

    if (WriteProcessMemory(hProcess, (LPVOID)VirtualMem, DllFilePath, strlen(DllFilePath), NULL) == 0)
    {
        VirtualFreeEx(hProcess, NULL, (size_t)strlen(DllFilePath), MEM_RESERVE|MEM_COMMIT);
        CloseHandle(hProcess); 
        return PROCESS_ERROR_WRITE;
    }

    hModule = GetModuleHandle(L"kernel32.dll");
    hRemoteThread = CreateRemoteThread(hProcess, NULL, 0, 
                        (LPTHREAD_START_ROUTINE)GetProcAddress(hModule, "LoadLibraryA"),
                          (LPVOID)VirtualMem, 0, NULL);

    if (hRemoteThread …
Run Code Online (Sandbox Code Playgroud)

c++ dll-injection

8
推荐指数
2
解决办法
7591
查看次数

Win32 Hooks DLL注入针对"任何CPU"构建的应用程序

我正在开发一个捕获所有用户交互的项目.MSDN告诉(这个)

SetWindowsHookEx可用于将DLL注入另一个进程.32位DLL无法注入64位进程,64位DLL无法注入32位进程.如果应用程序需要在其他进程中使用钩子,则需要32位应用程序调用SetWindowsHookEx将32位DLL注入32位进程,并且64位应用程序调用SetWindowsHookEx注入64位DLL进入64位进程.

我的问题是,如果构建了一个应用程序会发生什么Any CPU.我是否需要SetWindowsHookEx从构建的DLL 调用Any CPU.

我写了HookLogger_32.exe加载HookFunctions_32.dll(包括x86)和HookLogger_64.exe加载HookFunctions_64.dll(都是x64)设置WH_CBTWH_MOUSE全局(不是特定的线程).

HookLogger_32.exe,HookLogger_64.exe,HookFunctions_32.dll和HookFunctions_64.dll是用C++编写的.

当我点击构建的.NET应用程序时Any CPU,这些DLL会被注入(通过SetWindowHookEx).Windows操作系统挂起,我必须强行重启我的机器.

当针对x86或x64构建相同的.NET应用程序时,当我在HookLoggers(32位和64位)启动后单击应用程序时,一切正常.

这种未定义行为的任​​何原因.

我工作的平台是64位机器.

hook dll-injection setwindowshookex

7
推荐指数
1
解决办法
3400
查看次数

如何在运行时将文件注入EXE并在程序运行期间引用该文件?

我希望用户从我的网站下载exe,其中(同步下载时)将一个XML文件注入到该应用程序中.此XML文件包含公钥和签名.

如何在下载之前注入文件并在执行期间稍后引用它?

理想情况下,我不会使用shell来注入文件,而是使用本机.NET API.

c# deployment user-experience code-injection dll-injection

6
推荐指数
1
解决办法
2789
查看次数

如何在VS2013中调试期间加载dll

我有一些代码

var aa = a();
b(aa);
Run Code Online (Sandbox Code Playgroud)

在调试时,我在b()通话中设置了一个断点.然后转到即时窗口,我希望能够从我的项目中的DLL执行代码,但尚未加载.说我想要一个新的Boo电话Foo().代码Baz位于dll 的命名空间中Spongle.dll.

当我输入

>> new Baz.Boo().Foo(aa)
Run Code Online (Sandbox Code Playgroud)

我收到错误:类型或命名空间名称'Baz'在此范围内无效.

如果我更改我的代码,以便我Boo已经加载它可以正常工作.

new Boo(); // dummy to ensure loading
var aa = a();
b(aa);
Run Code Online (Sandbox Code Playgroud)

是否可以在调试期间从即时窗口加载dll,这样我可以调用我的代码,尽管它已经加载(还)?我可以使用new Boo()我的应用程序主类的静态初始化程序,但是在单元测试期间我遇到了问题,因为它不一定涉及具有该静态初始化程序的类.

c# dll dllimport visual-studio dll-injection

6
推荐指数
1
解决办法
720
查看次数