求助编程如何实现x64注入
本帖最后由 朱朱你堕落了 于 2024-8-15 08:22 编辑自行解决了。 本帖最后由 Aurelion 于 2024-8-14 15:14 编辑
朱朱你堕落了 发表于 2024-8-14 14:21
对无壳有管用吧,如果有壳就不管用了吧?有壳的还能让他导入表编辑?
可以的,无非就是壳会不会去检测文件被修改过而已,用的api是DetourBinaryEditImports。
还有另外一种注入方式,就是创建进程时注入(DetourCreateProcessWithDllEx),原理是创建挂起的进程,然后修改导入表(改内存,不改文件),微软还提供了DetourRestoreAfterWith这个API,写在dllmain可以还原之前的导入表,这样壳就检测不到了 本帖最后由 ibilibili 于 2024-8-14 12:35 编辑
obs有个64位注入器你可以去改改用,开源的。或者直接调用他的exe
这个文章写的调用32位注入https://www.galasp.cn/artcles/190,64位你可以自己写一个 如果你需要启动注入可能需要修改源程序代码 Xenos,这个有启动时注入。选中EXE 和 dll,点Jnject然后启动程序就会自动注入了。https://github.com/DarthTon/Xenos
不知道你要的是不是这个效果。 微软的detours库支持导入表编辑,非常强大 Aurelion 发表于 2024-8-14 14:01
微软的detours库支持导入表编辑,非常强大
对无壳有管用吧,如果有壳就不管用了吧?有壳的还能让他导入表编辑? Aurelion 发表于 2024-8-14 14:47
可以的,无非就是壳会不会去检测文件被修改过而已,用的api是DetourBinaryEditImports。
还有另外一种注 ...
按大佬的方法试了下,遇到个问题,搞不明白了,大佬看私信吧,望解惑。 #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();
} xieemengxin 发表于 2024-8-14 13:56
Xenos,这个有启动时注入。选中EXE 和 dll,点Jnject然后启动程序就会自动注入了。https://github.com/Dart ...
实际上Windows的兼容性,老项目应该也可
页:
[1]
2