使用 C# 将 C++ DLL 注入 Windows 10 上的记事本

CPunkh
bool bInject(uint pToBeInjected, string sDllPath)
    {
        IntPtr hndProc = OpenProcess((0x2 | 0x8 | 0x10 | 0x20 | 0x400), 1, pToBeInjected);

        if (hndProc == INTPTR_ZERO)
        {
            return false;
        }

        IntPtr lpLLAddress = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");

        if (lpLLAddress == INTPTR_ZERO)
        {
            return false;
        }

        IntPtr lpAddress = VirtualAllocEx(hndProc, (IntPtr)null, (IntPtr)sDllPath.Length, (0x1000 | 0x2000), 0X40);

        byte[] bytes = Encoding.ASCII.GetBytes(sDllPath);

        WriteProcessMemory(hndProc, lpAddress, bytes, (uint)bytes.Length, 0);

        // This next one is the one that doesn't seem to work.
        CreateRemoteThread(hndProc, (IntPtr)null, INTPTR_ZERO, lpLLAddress, lpAddress, 0, (IntPtr)null);
        CloseHandle(hndProc);

        return true;
    }

我在为 x86 编译的 .NET 4.6.1 中使用 C#(显然)。在上面的代码中,我评论了似乎不起作用的命令。CreateRemoteThread 调用。没有返回错误,受害者进程(记事本)没有显示以下 DLL(我从示例项目中提取,因为我很懒惰。)被注入的任何迹象。

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

extern "C" __declspec(dllexport)
DWORD WINAPI MessageBoxThread(LPVOID lpParam) {
  MessageBox(NULL, "Hello world!", "Hello World!", NULL);
  return 0;
}

extern "C" __declspec(dllexport)
BOOL APIENTRY DllMain(HMODULE hModule,
                      DWORD ul_reason_for_call,
                      LPVOID lpReserved) {
  switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH:
      CreateThread(NULL, NULL, MessageBoxThread, NULL, NULL, NULL);
      break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
      break;
  }
  return TRUE;
}

记住我使用的是 Windows 10。我想也许有额外的安全检查来防止我注入所说的 DLL。在此之后,我计划制作一个引导程序 DLL 来加载 CLR,以及另一个 C# DLL。

非常感谢您提供的任何帮助!

下垂的

您应该使用预处理器定义作为 API 调用的标志,这样更清楚。

我相信VirtualAllocEx你试图通过PAGE_READWRITE一个标志,但是你通过了0x40,它被定义为#define PAGE_READWRITE 0x04. 所以要么PAGE_READWRITE直接使用,要么如果你想“酷”使用0x04.

此外,我从未使用过 string 类,但您应该使用它sDllPath.Length + 1,因为它也可能不会将空终止符添加到您的路径中!

更准确地说(在以后的问题中),您可以将错误代码添加到问题中!您可以使用:

CHAR Error[MAX_PATH]; // MAX_PATH is used for system paths, it's still big enough
wsprintfA(Error, "Error: %lu", GetLastError());
MessageBoxA(0, Error, 0, 0);

在您CreateRemoteThread获取系统错误代码之后- 它可以帮助您随时了解应用程序中的错误!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用C崩溃记事本进行DLL注入

来自分类Dev

C ++:DLL注入。为什么CreateRemoteThread()在记事本上失败?

来自分类Dev

C中的Windows DLL注入器不会注入DLL

来自分类Dev

使用DLL注入C ++进行读写

来自分类Dev

使用Delphi 10从C#dll打开Windows证书列表

来自分类Dev

C ++ DLL注入失败

来自分类Dev

强制Windows 10始终使用记事本++打开主机文件

来自分类Dev

当我打开使用Notepad ++创建的文件时,为什么Windows记事本将所有代码行放在一行上?

来自分类Dev

呼叫记事本在 Windows 10 上的 rebol 或 red 中不起作用

来自分类Dev

将C ++ dll注入器转换为unicode

来自分类Dev

将C ++ dll注入器转换为unicode

来自分类Dev

运行C ++程序和记事本

来自分类Dev

Linux C读取文件UNICODE格式的文本(记事本Windows)

来自分类Dev

将剪贴板C#工作簿转换为Excel和记事本

来自分类Dev

如何使用Regex将所有内容移到记事本++中的一行上

来自分类Dev

如何使用Regex将所有内容移到记事本++中的一行上

来自分类Dev

如何使用Regex将所有内容移到记事本++中的一行上

来自分类Dev

在记事本上编译c ++时出现错误“找不到指定的文件”

来自分类Dev

使用C#中的TextBox为记事本创建查找功能

来自分类Dev

C#DLL注入未加载DLL

来自分类Dev

Windows 10记事本找不到文本

来自分类Dev

如何在记事本/记事本++中创建“查找表格”?C#

来自分类Dev

使用Windows记事本打开文本文档

来自分类Dev

在DLL中注入C#文件

来自分类Dev

c++ Injector 运行但未注入 DLL

来自分类Dev

使用C#将秒表注入到使用Mono.Cecil的所有dll方法中,包括具有多个Return语句的方法

来自分类Dev

无法使用DllImport将C ++ DLL导入C#项目

来自分类Dev

使用C ++ WinAPI在Windows 10上设置亮度

来自分类Dev

无法从开始菜单打开记事本搜索Windows 10

Related 相关文章

  1. 1

    使用C崩溃记事本进行DLL注入

  2. 2

    C ++:DLL注入。为什么CreateRemoteThread()在记事本上失败?

  3. 3

    C中的Windows DLL注入器不会注入DLL

  4. 4

    使用DLL注入C ++进行读写

  5. 5

    使用Delphi 10从C#dll打开Windows证书列表

  6. 6

    C ++ DLL注入失败

  7. 7

    强制Windows 10始终使用记事本++打开主机文件

  8. 8

    当我打开使用Notepad ++创建的文件时,为什么Windows记事本将所有代码行放在一行上?

  9. 9

    呼叫记事本在 Windows 10 上的 rebol 或 red 中不起作用

  10. 10

    将C ++ dll注入器转换为unicode

  11. 11

    将C ++ dll注入器转换为unicode

  12. 12

    运行C ++程序和记事本

  13. 13

    Linux C读取文件UNICODE格式的文本(记事本Windows)

  14. 14

    将剪贴板C#工作簿转换为Excel和记事本

  15. 15

    如何使用Regex将所有内容移到记事本++中的一行上

  16. 16

    如何使用Regex将所有内容移到记事本++中的一行上

  17. 17

    如何使用Regex将所有内容移到记事本++中的一行上

  18. 18

    在记事本上编译c ++时出现错误“找不到指定的文件”

  19. 19

    使用C#中的TextBox为记事本创建查找功能

  20. 20

    C#DLL注入未加载DLL

  21. 21

    Windows 10记事本找不到文本

  22. 22

    如何在记事本/记事本++中创建“查找表格”?C#

  23. 23

    使用Windows记事本打开文本文档

  24. 24

    在DLL中注入C#文件

  25. 25

    c++ Injector 运行但未注入 DLL

  26. 26

    使用C#将秒表注入到使用Mono.Cecil的所有dll方法中,包括具有多个Return语句的方法

  27. 27

    无法使用DllImport将C ++ DLL导入C#项目

  28. 28

    使用C ++ WinAPI在Windows 10上设置亮度

  29. 29

    无法从开始菜单打开记事本搜索Windows 10

热门标签

归档