gpt4 book ai didi

C Windows DLL 注入(inject)记事本崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:34 32 4
gpt4 key购买 nike

我已经尝试在 Programm Notepad.exe 上进行 DLL 注入(inject)

但是如果我启动我的注入(inject)器,记事本会崩溃。这是我的注入(inject)器代码:

#include <windows.h>
#include <stdio.h>

char const Path[]="C:\\Users\\IEUser\\Desktop\\Mydll.dll";
int main(void) {

HANDLE hWnd, hProcess, AllocAdresse, hRemoteThread;
DWORD PID;

hWnd = FindWindow(0,"Untitled - Notepad");
GetWindowThreadProcessId((HWND)hWnd, &PID);

hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID);

AllocAdresse = VirtualAllocEx(hProcess, 0, sizeof(Path), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(hProcess, (void*)AllocAdresse, (void*)Path, sizeof(Path), 0);
hRemoteThread=CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA"), AllocAdresse, 0, 0);
WaitForSingleObject(hRemoteThread, INFINITE);
VirtualFreeEx(hProcess, AllocAdresse, sizeof(Path), MEM_DECOMMIT);
CloseHandle(hProcess);
return 0;
}

这是我的 DLL 文件代码:

#include <windows.h>
#include <stdio.h>

void InjNachricht() {
MessageBox(0, "It Works", "My DLL File", 0);
}

int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved) {
if(reason==DLL_PROCESS_ATTACH)
CreateThread(0, 0, (LPTHREAD_START_ROUTINE) InjNachricht, 0, 0, 0);
return 0;
}

我在我的 Linux 机器上用 MinGW 编译这段代码:

(Injector) i686-w64-mingw32-gcc -o Injector.exe injector.c
(DLL-File) i686-w64-mingw32-gcc -o Mydll.dll mydll.c

我还写了一个设置调试权限的函数:

void SetDebugPrivilege() {
HANDLE hProcess=GetCurrentProcess(), hToken;
TOKEN_PRIVILEGES priv;
LUID luid;

OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue(0, "seDebugPrivilege", &luid);

priv.PrivilegeCount = 1;
priv.Privileges[0].Luid = luid;
priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, false, &priv, 0, 0, 0);

CloseHandle(hToken);
}

如果我在我的虚拟机中运行我的程序: Notepad.exe Crash

为什么记事本崩溃了?如果我用它工作的程序注入(inject)我的 dll 文件: enter image description here

现在请不要跟我来“那我就用这个程序而不是写一个单独的注入(inject)器”!!这对我没有任何帮助!!

最佳答案

我已经有一段时间没有做这些事情了,所以我可能要离开了,但是:

  1. 您尝试在运行远程线程时映射 LoadLibraryA 方法。大多数现代应用程序使用 LoadLibraryW 或仅使用 LoadLibrary,后者将根据编译器模式使用默认值。
  2. 您使用 gcc,为什么不使用 Microsoft 编译器?编译器之间可能存在映射问题,这会阻止您将 gcc 生成的代码与(可能)vcc 编译器链接起来....

希望有帮助

关于C Windows DLL 注入(inject)记事本崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47932559/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com