标签: dll-injection

如何在同一进程中加载​​的两个.NET CLR相互通信?

现在可以在同一个盒子上运行两个CLR,它们怎么能互相"说话"呢?

假设GUI在.NET 2.0 CLR下运行,并且在.NET 4.0 CLR上运行了一个脚本,例如,有没有办法从4.0环境修改基于2.0的GUI?

当我使用这种技术将.NET C#REPL环境注入另一个.net进程时,我遇到了这个问题:视频:将C#DLL注入托管(C#)和非托管(C++)进程


注意:我在Reddit上问了一个类似的问题,如果您对并行执行和CLR托管主题感兴趣,那么该版本包含大量引用

c# clr clr-hosting clr4.0 dll-injection

3
推荐指数
1
解决办法
1261
查看次数

delphi xe3 dll注入64位dll到64位进程不起作用

我正在使用此代码将我的64位dll注入到Windows 7 64位的64位进程中,CreateRemoteThread返回200但仍然没有注入dll,我用另一个源测试了我的dll并且它工作正常,Process Explorer显示我的代码不起作用,这个代码有什么问题,我正在使用delphi XE3,我已经在64位目标平台上编译代码.

function InjectDLL(dwPID: DWORD; DLLPath: pwidechar): integer;
var
dwThreadID: Cardinal;
hProc, hThread, hKernel: NativeUInt;
BytesWritten: NativeUInt;
pRemoteBuffer, pLoadLibrary: Pointer;
begin
try
hProc := OpenProcess(PROCESS_ALL_ACCESS, False, dwPID);
if hProc = 0 then
begin
  Result := 0;
  Exit;
end;
pRemoteBuffer := VirtualAllocEx(hProc, nil, Length(DLLPath) + 1, MEM_COMMIT,
  PAGE_READWRITE);
if pRemoteBuffer = nil then
begin
  Result := 0;
  Exit;
end;
if WriteProcessMemory(hProc, Pointer(pRemoteBuffer), lpvoid(DLLPath),
  Length(DLLPath) + 1, BytesWritten) = False then
begin
  Result := 0;
  Exit;
end;
hKernel := …
Run Code Online (Sandbox Code Playgroud)

delphi dll-injection

3
推荐指数
1
解决办法
2174
查看次数

注入后未执行 DLLMain()

我已经用 C++ 编写了一个 dll 和注入器。dll代码如下:

#include <cstdio>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <fstream>
#include <winsock.h>
using namespace std;
#pragma comment(lib, "wsock32.lib")

extern "C" __declspec(dllexport) void UploadFile()
{
.....
}

INT APIENTRY DLLMain(HMODULE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
    switch(fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        MessageBox(0,"Process Attach","Info",MB_OK);
        UploadFile();
        break;
    case DLL_THREAD_ATTACH:
        MessageBox(0,"Thread Attach","Info",MB_OK);
        UploadFile();
        break;
    case DLL_PROCESS_DETACH:
        break;
    case DLL_THREAD_DETACH:
        break;
    default:
        break;
    }
    return TRUE;
}
Run Code Online (Sandbox Code Playgroud)

dll 将特定文件上传到服务器。我能够使用 LoadLibrary() 和 CreateRemoteThread() 成功地将 dll 注入“notepad.exe”,但它没有被执行。甚至不是 dllmain() 函数。不知道出了什么问题。

c++ windows dll-injection dllmain

3
推荐指数
1
解决办法
3663
查看次数

使用注入的DLL从远程进程调用函数

我看到了一个类似但仍然不同的问题,所以只是为了澄清这不是13428881的欺骗(在注入的DLL中调用函数).

我现在所拥有的:一个DLL,注入到目标进程中,显示​​一个消息框并摆弄数学.

我将来想要的是:一个可以操纵和玩弄目标进程内部的DLL.

实现所需操作的下一步是在我注入的进程中调用远程线程中的方法.

让我们举一个例子:我有一个C++应用程序,它有int main,让我们说它看起来像这样:

int PrintText(string text)
{
    cout << text;
    return 1;
}

int main()
{
    while (true)
    {
        PrintText("From the DLL");
    }
}
Run Code Online (Sandbox Code Playgroud)

好的,这很可爱,我的目标应用程序目前正在打印一些文本,而且它似乎非常愉快地这样做.它以令人难以置信的速度向它发送垃圾邮件,但如果我需要的话,我可以使用线程和睡眠等来降低速度.事实是这不是问题,这里的代码没有编译或测试,我也不打算使用这个确切的代码.我实际上正在玩游戏.

现在,假设我创建了一个指向方法PrintText的指针,并且我知道该进程中的地址.我如何在外部调用它,传递参数?

在本地,我相信它看起来像这样:

int i;
int (*PrintSomeText)(string) = PrintText;
Run Code Online (Sandbox Code Playgroud)

然后,我可以使用引用调用此函数,如下所示:

i = operation("Text to be printed", PrintSomeText);
Run Code Online (Sandbox Code Playgroud)

根据我的理论,这应该声明一个名为i的整数,然后定义一个指向返回int的方法的指针,将一个字符串作为参数,指针存储PrintText中指针的值.(或者那种性质的东西).

非常好,所以我可以通过指针调用我自己的函数,这很好,实际上是破解.我真的对这种能力感到惊讶,现在我感觉像是超人.我会去保存一些婴儿或其他东西,brb.

回来,所以现在我想再继续下去,并采取下一步措施.假设我知道该方法位于目标进程中的地址100处(十进制,我可能会以十六进制表示,因为我使用CheatEngine/OllyDBG来查找目标进程中的方法,但对于此示例,我们'保持简单).

我假设我注入的DLL完全拥有自己的空间,它是否有更高的目标进程访问权限?我怎么能找到这个?

谢谢你的时间,乔希

编辑:一个小小的注释,我正在阅读C++教程书,到目前为止它已被证明是非常有用的.我注意到我忘了包含我的操作方法,所以对于遗失的道歉.如果需要,请告诉我.谢谢!

编辑nr 2:我刚刚编写了一些可编译的代码来测试这个,因为我在没有IDE的情况下从书中写下了大部分这个免费的手,而IDE终于自己配置了,所以这里是我目前的代码与...合作

#include "stdafx.h"
#include <iostream>

using namespace std;

int PrintText(char * Text)
{
    cout << Text << endl;
    return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int (*Print)(char*) …
Run Code Online (Sandbox Code Playgroud)

c++ dll code-injection codecave dll-injection

3
推荐指数
1
解决办法
3133
查看次数

检查运行进程正在调用哪个窗口api

我想检查正在运行的程序正在调用哪个windows api.例如,如果进程调用timeGetTime(),endprocess()或其他一些api,我想知道这些信息,并且理想地实时显示或存储.如果我可以选择我想知道哪个api正在使用它也就足够了.我知道这可以通过api挂钩等技术来完成,但我正在寻找可以做到这一点的现有程序.有没有这样的东西?任何帮助,将不胜感激.

windows debugging winapi win32-process dll-injection

3
推荐指数
1
解决办法
2638
查看次数

如何获取已使用的DLL列表?

我想从应用程序本身获取已使用的DLL列表.我的目标是将列表与硬编码列表进行比较,以查看是否注入了任何DLL.我在Google中找不到任何示例.

delphi dll dll-injection delphi-xe2

3
推荐指数
1
解决办法
1907
查看次数

如何在 Windows 中挂钩所有新进程

我想编写一个程序,通过为所有进程创建一个监视器线程来分离 dll 注入或漏洞利用。我想在用户级别执行此操作,而不是插入驱动程序。

我尝试使用 AppInit_DLLs 在 DllMain 创建一个线程,但如果程序不加载 user32.dll,它就不起作用。

我尝试侦听新进程创建事件并挂起新进程以加载我的监视器 dll,但效果不佳。

是否有任何方法可以在所有新进程开始运行之前挂钩?

windows dll hook monitor dll-injection

3
推荐指数
1
解决办法
1942
查看次数

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

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

它不是“更新问题”,而是快乐 - 我们如何检查:

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

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

多种原因

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

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

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

.net c# checksum assemblies dll-injection

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

RE - IDA 查找函数偏移量

我刚刚开始进行逆向工程。

我创建了一个小型 C++ ConsoleApplication,并尝试通过注入的 DLL 调用 NewFunction。

void NewFunction()
{
    DWORD dwImageBase = (DWORD)GetModuleHandle(NULL);

    std::cout << "ImageBase: " << ToHex(dwImageBase) << std::endl;
    std::cout << "NewFunction: " << ToHex((DWORD)&NewFunction) << std::endl;
    std::cout << "Offset: " << ToHex((DWORD)&NewFunction - dwImageBase) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

ImageBase: F90000
NewFunction: FA111D
Offset: 1111D
Run Code Online (Sandbox Code Playgroud)

现在,当我使用注入的 DLL 调用 0xFA111D 时,它会按预期工作并再次打印。(DLL调用ImageBase + Offset)

但我不知道如何使用 IDA Pro 获取 NewFunction 的地址...

在国际开发协会中:

  • 该函数位于:0x4133F0
  • 图像库是:0x400000
  • 计算出的偏移量为:0x133F0

至少偏移量不应该是相同的吗?我在这里错过了一些重要的东西吗?

c++ reverse-engineering ida memory-address dll-injection

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

DLL注入和访问冲突

我有一个简单的DLL,我在记事本中注入仅用于测试目的.我的注射器代码是这样的:

uses
  Windows;

var
  BytesWritten:  cardinal;
  PID, Process, Thread, ThreadId, hKernel: dword;
  pLoadLibrary, Paramaters: pointer;
    DLL: AnsiString;

    begin
      DLL := 'C:\test.dll'; // Must be full path name.
      PID := 3160;
      Process := OpenProcess(PROCESS_ALL_ACCESS,
                             False,
                             PID);

      Paramaters := VirtualAllocEx(Process,
                                 nil,
                                   Length(DLL),
                                   MEM_COMMIT,
                                 PAGE_EXECUTE_READWRITE);

      WriteProcessMemory(Process,
                         Paramaters,
                         PAnsiChar(DLL),
                         Length(DLL),
                         BytesWritten);

      hKernel := GetModuleHandle('KERNEL32.DLL');

      pLoadLibrary := GetProcAddress(hKernel,
                                     'LoadLibraryA');

      Thread := CreateRemoteThread(Process,
                                   nil,
                                   0,
                                   pLoadLibrary,
                                   Paramaters,
                                   0,
                                   ThreadId);

      WaitForSingleObject(Thread, INFINITE);

      VirtualFreeEx(Process,
                    Paramaters,
                    0,
                    MEM_RELEASE);

      CloseHandle(Thread);
      CloseHandle(Process);
end.
Run Code Online (Sandbox Code Playgroud)

我的DLL代码很简单:

uses
  SysUtils,
  Classes,
  Windows;

{$R *.res}


procedure …
Run Code Online (Sandbox Code Playgroud)

delphi dll dll-injection

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