火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 473|回复: 9
打印 上一主题 下一主题

[视窗] 易语言的这个命令谁能转成火山的

[复制链接]

2

主题

9

帖子

42

积分

新手上路

Rank: 1

积分
42
跳转到指定楼层
楼主
发表于 2024-4-23 20:36:46 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
精易模块中的【程序_内存中运行EXE
自己封装的时候被这结构体搞头疼了,实在翻不过来。
有没有大佬帮我翻成火山的,可有偿!


回复

使用道具 举报

2

主题

9

帖子

42

积分

新手上路

Rank: 1

积分
42
沙发
 楼主| 发表于 2024-4-24 19:18:26 | 显示全部楼层
urenai 发表于 2024-4-23 22:23
未经测试的代码:

不行啊不行啊不行啊不行啊
回复

使用道具 举报

2

主题

9

帖子

42

积分

新手上路

Rank: 1

积分
42
板凳
 楼主| 发表于 2024-4-24 20:00:21 | 显示全部楼层
  1. #include <windows.h>
  2. #include <iostream>

  3. // 获取PE文件头
  4. PIMAGE_DOS_HEADER GetDosHeader(LPVOID lpBaseAddress) {
  5.     return reinterpret_cast<PIMAGE_DOS_HEADER>(lpBaseAddress);
  6. }

  7. // 获取NT头
  8. PIMAGE_NT_HEADERS GetNtHeaders(LPVOID lpBaseAddress) {
  9.     PIMAGE_DOS_HEADER pDosHeader = GetDosHeader(lpBaseAddress);
  10.     return reinterpret_cast<PIMAGE_NT_HEADERS>(
  11.         reinterpret_cast<BYTE*>(pDosHeader) + pDosHeader->e_lfanew);
  12. }

  13. // 执行远程进程入口点
  14. void ExecuteRemoteProcess(HANDLE hProcess, LPVOID remoteBaseAddress) {
  15.     PIMAGE_NT_HEADERS pNtHeaders = GetNtHeaders(remoteBaseAddress);
  16.     LPVOID entryPoint = (LPVOID)((DWORD_PTR)remoteBaseAddress + pNtHeaders->OptionalHeader.AddressOfEntryPoint);

  17.     HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0,
  18.         (LPTHREAD_START_ROUTINE)entryPoint, NULL, 0, NULL);
  19.     if (hThread == NULL) {
  20.         std::cerr << "CreateRemoteThread failed: " << GetLastError() << std::endl;
  21.         return;
  22.     }

  23.     WaitForSingleObject(hThread, INFINITE);
  24.     CloseHandle(hThread);
  25. }

  26. int main() {
  27.     // 要注入的exe文件路径
  28.     TCHAR szFilePath[] = L"C:\\Users\\HZW\\Desktop\\32.exe";
  29.     //被注入的exe文件
  30.     TCHAR FilePath111[] = L"C:\\Windows\\System32\\notepad.exe";

  31.     // 打开exe文件
  32.     HANDLE hFile = CreateFile(szFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
  33.         FILE_ATTRIBUTE_NORMAL, NULL);
  34.     if (hFile == INVALID_HANDLE_VALUE) {
  35.         std::cerr << "CreateFile failed: " << GetLastError() << std::endl;
  36.         return -1;
  37.     }

  38.     // 获取exe文件大小
  39.     LARGE_INTEGER fileSize;
  40.     if (!GetFileSizeEx(hFile, &fileSize)) {
  41.         std::cerr << "GetFileSizeEx failed: " << GetLastError() << std::endl;
  42.         CloseHandle(hFile);
  43.         return -1;
  44.     }


  45.     // 创建新进程
  46.     PROCESS_INFORMATION pi;
  47.     STARTUPINFO si = { sizeof(STARTUPINFO) };
  48.     if (!CreateProcess(NULL, FilePath111, NULL, NULL, FALSE,
  49.         CREATE_SUSPENDED, NULL, NULL, &si, &pi)) {
  50.         std::cerr << "CreateProcess failed: " << GetLastError() << std::endl;
  51.         CloseHandle(hFile);
  52.         return -1;
  53.     }

  54.     // 映射exe文件到内存
  55.     HANDLE hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
  56.     if (hMapFile == NULL) {
  57.         std::cerr << "CreateFileMapping failed: " << GetLastError() << std::endl;
  58.         TerminateProcess(pi.hProcess, -1);
  59.         CloseHandle(hFile);
  60.         return -1;
  61.     }

  62.     LPVOID pFileBase = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
  63.     if (pFileBase == NULL) {
  64.         std::cerr << "MapViewOfFile failed: " << GetLastError() << std::endl;
  65.         CloseHandle(hMapFile);
  66.         TerminateProcess(pi.hProcess, -1);
  67.         CloseHandle(hFile);
  68.         return -1;
  69.     }

  70.     // 将exe文件内容写入新进程
  71.     LPVOID remoteBaseAddress = VirtualAllocEx(pi.hProcess, NULL, fileSize.LowPart, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  72.     if (remoteBaseAddress == NULL) {
  73.         std::cerr << "VirtualAllocEx failed: " << GetLastError() << std::endl;
  74.         UnmapViewOfFile(pFileBase);
  75.         CloseHandle(hMapFile);
  76.         TerminateProcess(pi.hProcess, -1);
  77.         CloseHandle(hFile);
  78.         return -1;
  79.     }

  80.     SIZE_T bytesWritten;
  81.     if (!WriteProcessMemory(pi.hProcess, remoteBaseAddress, pFileBase, fileSize.LowPart, &bytesWritten)) {
  82.         std::cerr << "WriteProcessMemory failed: " << GetLastError() << std::endl;
  83.         VirtualFreeEx(pi.hProcess, remoteBaseAddress, 0, MEM_RELEASE);
  84.         UnmapViewOfFile(pFileBase);
  85.         CloseHandle(hMapFile);
  86.         TerminateProcess(pi.hProcess, -1);
  87.         CloseHandle(hFile);
  88.         return -1;
  89.     }

  90.     // 执行注入的exe
  91.     ExecuteRemoteProcess(pi.hProcess, remoteBaseAddress);

  92.     // 清理
  93.     VirtualFreeEx(pi.hProcess, remoteBaseAddress, 0, MEM_RELEASE);
  94.     UnmapViewOfFile(pFileBase);
  95.     CloseHandle(hMapFile);
  96.     CloseHandle(hFile);
  97.     ResumeThread(pi.hThread);
  98.     CloseHandle(pi.hThread);
  99.     CloseHandle(pi.hProcess);

  100.     return 0;
  101. }
复制代码
你看看,你试下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-5-19 01:20 , Processed in 0.086231 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表