朱朱你堕落了 发表于 2024-8-14 11:45

求助编程如何实现x64注入

本帖最后由 朱朱你堕落了 于 2024-8-15 08:22 编辑

自行解决了。

Aurelion 发表于 2024-8-14 11:45

本帖最后由 Aurelion 于 2024-8-14 15:14 编辑

朱朱你堕落了 发表于 2024-8-14 14:21
对无壳有管用吧,如果有壳就不管用了吧?有壳的还能让他导入表编辑?
可以的,无非就是壳会不会去检测文件被修改过而已,用的api是DetourBinaryEditImports。
还有另外一种注入方式,就是创建进程时注入(DetourCreateProcessWithDllEx),原理是创建挂起的进程,然后修改导入表(改内存,不改文件),微软还提供了DetourRestoreAfterWith这个API,写在dllmain可以还原之前的导入表,这样壳就检测不到了

ibilibili 发表于 2024-8-14 12:27

本帖最后由 ibilibili 于 2024-8-14 12:35 编辑

obs有个64位注入器你可以去改改用,开源的。或者直接调用他的exe
这个文章写的调用32位注入https://www.galasp.cn/artcles/190,64位你可以自己写一个

ibilibili 发表于 2024-8-14 12:30

如果你需要启动注入可能需要修改源程序代码

xieemengxin 发表于 2024-8-14 13:56

Xenos,这个有启动时注入。选中EXE 和 dll,点Jnject然后启动程序就会自动注入了。https://github.com/DarthTon/Xenos

不知道你要的是不是这个效果。

Aurelion 发表于 2024-8-14 14:01

微软的detours库支持导入表编辑,非常强大

朱朱你堕落了 发表于 2024-8-14 14:21

Aurelion 发表于 2024-8-14 14:01
微软的detours库支持导入表编辑,非常强大

对无壳有管用吧,如果有壳就不管用了吧?有壳的还能让他导入表编辑?

朱朱你堕落了 发表于 2024-8-14 16:43

Aurelion 发表于 2024-8-14 14:47
可以的,无非就是壳会不会去检测文件被修改过而已,用的api是DetourBinaryEditImports。
还有另外一种注 ...

按大佬的方法试了下,遇到个问题,搞不明白了,大佬看私信吧,望解惑。

wtujoxk 发表于 2024-8-14 17:08

#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>

typedef struct {

    LPVOID lpDllAddr;
    HANDLE hRemoteThread;

} INJECTION_RESULT;

//Helper function for search process by name
DWORD FindProcessId(LPCSTR pszProcName) {

    PROCESSENTRY32 pEntry;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (Process32First(hSnap, &pEntry)) {

      while (Process32Next(hSnap, &pEntry)) {

            if (lstrcmp(pEntry.szExeFile, pszProcName) == ERROR_SUCCESS)
                return pEntry.th32ProcessID;

      }

    }

}

//Function for DLL Injection
INJECTION_RESULT InjectDll(HANDLE hProcess, LPCSTR pszDllPath) {

    INJECTION_RESULT irResult = { 0 };

    LPVOID lpAddr = VirtualAllocEx(hProcess, NULL, lstrlen(pszDllPath) + 1, MEM_COMMIT, PAGE_READWRITE);

    irResult.lpDllAddr = lpAddr;

    if (!lpAddr)
      return {0};

    if (!WriteProcessMemory(hProcess, lpAddr, pszDllPath, lstrlen(pszDllPath) + 1, NULL))
      return {0};

    irResult.hRemoteThread = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA"), lpAddr, NULL, NULL);


    return irResult;

}

int main()
{
   
       
        LPCSTR pszPath2Dll = "C:\\Users\\Admin\\Desktop\\DllInjection\\Payload.dll";

    HANDLE hTarget = OpenProcess(PROCESS_ALL_ACCESS, FALSE, FindProcessId("Target.exe"));

    INJECTION_RESULT irResult = InjectDll(hTarget, pszPath2Dll);

    std::cout << "DLL Path allocated at " << irResult.lpDllAddr;
    std::cin.get();
   
}

ibilibili 发表于 2024-8-14 23:15

xieemengxin 发表于 2024-8-14 13:56
Xenos,这个有启动时注入。选中EXE 和 dll,点Jnject然后启动程序就会自动注入了。https://github.com/Dart ...

实际上Windows的兼容性,老项目应该也可
页: [1] 2
查看完整版本: 求助编程如何实现x64注入