• XSS.stack #1 – первый литературный журнал от юзеров форума

прочее VMProtect Source Code (Pwn3rzs)

Пожалуйста, обратите внимание, что пользователь заблокирован
Пожалуйста, обратите внимание, что пользователь заблокирован
https://github.com/Alukym/VMProtect-Source/blob/master/runtime/VMProtect.Runtime/VirtualMachine.cs - не, ну на реализацию ВМ в любом случае интересно посмотреть, но я ожидал большего. Опкоды линейно соответсвуют MSIL, а реализация некоторых из них через DynamicMethod - ну это читерство, как будто просто забили хер и не стали делать нормально.

Впечатляет, сразу видно настоящий малварокодер писал, особенно понаравилось - uint32_t WINAPI SetupImage()
Ну, наверное, был какой-то глубокофилософский смысл в строках на стеке и парсинге номеров сисколлов из копии нтдлл, но я, честно говоря, хер понимаю, зачем такое делать в протекторе, который якобы предназначен для легитимного софта.
 
https://github.com/Alukym/VMProtect-Source/blob/master/runtime/VMProtect.Runtime/VirtualMachine.cs - не, ну на реализацию ВМ в любом случае интересно посмотреть, но я ожидал большего. Опкоды линейно соответсвуют MSIL, а реализация некоторых из них через DynamicMethod - ну это читерство, как будто просто забили хер и не стали делать нормально.


Ну, наверное, был какой-то глубокофилософский смысл в строках на стеке и парсинге номеров сисколлов из копии нтдлл, но я, честно говоря, хер понимаю, зачем такое делать в протекторе, который якобы предназначен для легитимного софта.
То есть функции уходящие за горизонт тебе ок? Декомпозиция для слабаков? Коды сисколов ифами бл#ть вместо сделать нормальные таблицы. Всратая работа со строками, да это образцовый говносорец.
 
Ну, наверное, был какой-то глубокофилософский смысл в строках на стеке и парсинге номеров сисколлов из копии нтдлл, но я, честно говоря, хер понимаю, зачем такое делать в протекторе, который якобы предназначен для легитимного софта.
Чтобы сложнее было в динамике ковырять?
https://github.com/Alukym/VMProtect-Source/blob/master/runtime/VMProtect.Runtime/VirtualMachine.cs - не, ну на реализацию ВМ в любом случае интересно посмотреть, но я ожидал большего. Опкоды линейно соответсвуют MSIL, а реализация некоторых из них через DynamicMethod - ну это читерство, как будто просто забили хер и не стали делать нормально.
Когда уже статья по готовке дотнета, дядя дилдо?
 
парсинге номеров сисколлов из копии нтдлл
Не увидел там получения нормеров из ntdll, их там вроде захардкодили, может что-то упустил, недосмотрел.
Коды сисколов ифами бл#ть вместо сделать нормальные таблицы
А зачем вообще номера хардкодить ? HaloGate для особо продвинутых ? Это надежнее чем хардкодить их в таблицы или даже говнокодить через ифы. На нестандартных билдах винды могут быть носоответствия, а даже если поднять все архивные версии винды, вручную вытянуть номера и захардкодить, то это ебанутый оверхед. Самый проверенный способ - пробегаемся по всем экспортным именам ntdll, составляем таблицу экспортных адресов, сортируем. Все. Дальше находим любой не хукнутый сискол, и определяем какой он по счету от того, который нас интересует (хукнутый), разница в индексах в отсортированном массиве экспортных адресов будет разницей в номерах сисколов. Отсюда в зависимости от расположения первого и второго сложением или вычитанием вычисляется нужный номер. Безотказная техника. Все в рантайме, без чтения с диска, никаких копий ntdll в памяти и никаких захардкоженых значений. Работает на любой винде с самых первых NT версий. Кода в разы меньше. Да тут одни только плюсы и вообще нет минусов. Почему люди живут технологиями уходящими за горизонт ?
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Не увидел там получения нормеров из ntdll, их там вроде захардкодили, может что-то упустил, недосмотрел
Ну я про этот фрагмент:
C++:
sc_close = LoaderParseSyscall(LoaderGetProcAddress((HMODULE)copy_ntdll, reinterpret_cast<const char *>(FACE_NT_CLOSE), true));
sc_virtual_protect = LoaderParseSyscall(LoaderGetProcAddress((HMODULE)copy_ntdll, reinterpret_cast<const char *>(FACE_NT_VIRTUAL_PROTECT_NAME), true));
sc_open_file = LoaderParseSyscall(LoaderGetProcAddress((HMODULE)copy_ntdll, reinterpret_cast<const char *>(FACE_NT_OPEN_FILE_NAME), true));
sc_create_section = LoaderParseSyscall(LoaderGetProcAddress((HMODULE)copy_ntdll, reinterpret_cast<const char *>(FACE_NT_CREATE_SECTION_NAME), true));
sc_map_view_of_section = LoaderParseSyscall(LoaderGetProcAddress((HMODULE)copy_ntdll, reinterpret_cast<const char *>(FACE_NT_MAP_VIEW_OF_SECTION), true));
sc_unmap_view_of_section = LoaderParseSyscall(LoaderGetProcAddress((HMODULE)copy_ntdll, reinterpret_cast<const char *>(FACE_NT_UNMAP_VIEW_OF_SECTION), true));
sc_query_information_process = LoaderParseSyscall(LoaderGetProcAddress((HMODULE)copy_ntdll, reinterpret_cast<const char *>(FACE_NT_QUERY_INFORMATION_PROCESS_NAME), true));
sc_set_information_thread = LoaderParseSyscall(LoaderGetProcAddress((HMODULE)copy_ntdll, reinterpret_cast<const char *>(FACE_NT_SET_INFORMATION_THREAD_NAME), true));
sc_query_virtual_memory = LoaderParseSyscall(LoaderGetProcAddress((HMODULE)copy_ntdll, reinterpret_cast<const char *>(FACE_QUERY_VIRTUAL_MEMORY_NAME), true));

Чтобы сложнее было в динамике ковырять?
Ну в целом да, но строки можно было бы и пошифровать, не то чтобы их нахождение в коде больше усложняет жизнь реверсеру, чем их шифрование. Насчет сисколлов, типа чтобы нельзя было бряк поставить на апишку, ну в этом есть смысл, но тоже реализация странноватая.

Когда уже статья по готовке дотнета, дядя дилдо?
Лол, я уже и забыл об этом думать. Я решил взять только обзор обфускации дотнетов, дошел до 15к символов, хотя описал только базовую часть без конкретных алгоритмов, понял, что в одну статью все не влезет, и на этом остановился. Ну я подумаю, может, найду время к этому вернуться.
 
Лол, я уже и забыл об этом думать. Я решил взять только обзор обфускации дотнетов, дошел до 15к символов, хотя описал только базовую часть без конкретных алгоритмов, понял, что в одну статью все не влезет, и на этом остановился. Ну я подумаю, может, найду время к этому вернуться.
Блин ну ладно
Но если что мы все ждем, я не смог найти статей где бы с теоритической частью это все рассматривалось
А читать коды без общего понимания это "смотрю в книгу вижу фигу"
 
Не увидел там получения нормеров из ntdll, их там вроде захардкодили, может что-то упустил, недосмотрел.

А зачем вообще номера хардкодить ? HaloGate для особо продвинутых ? Это надежнее чем хардкодить их в таблицы или даже говнокодить через ифы. На нестандартных билдах винды могут быть носоответствия, а даже если поднять все архивные версии винды, вручную вытянуть номера и захардкодить, то это ебанутый оверхед. Самый проверенный способ - пробегаемся по всем экспортным именам ntdll, составляем таблицу экспортных адресов, сортируем. Все. Дальше находим любой не хукнутый сискол, и определяем какой он по счету от того, который нас интересует (хукнутый), разница в индексах в отсортированном массиве экспортных адресов будет разницей в номерах сисколов. Отсюда в зависимости от расположения первого и второго сложением или вычитанием вычисляется нужный номер. Безотказная техника. Все в рантайме, без чтения с диска, никаких копий ntdll в памяти и никаких захардкоженых значений. Работает на любой винде с самых первых NT версий. Кода в разы меньше. Да тут одни только плюсы и вообще нет минусов. Почему люди живут технологиями уходящими за горизонт ?
А как мы будем находить _настоящий_ ntdll в котором хукали сплайсом на точки входа в апи и никаких сюрпризов не подкинули? Я вам более скажу доверять извлеченной из пеб информации про версию тоже стоит с осторожностью и прощупывать почву уже чрез вызовы и анализ ответа. Комформизм губит :) Паник рум эвривэ. А сорец расстроил, почему то думал что там порядок и четкость мысли в каждой строчке.
 
А зачем вообще номера хардкодить ? HaloGate для особо продвинутых ?
На реализацию халогейт авер и ставит бряк
пробегаемся по всем экспортным именам ntdll
вот тут и будет бряк у фалькона с карбона тоже
Кода в разы меньше. Да тут одни только плюсы и вообще нет минусов.
ну да, может для авера что стоит в школе или у многих дома - то да все топ.
а если брать EDR за 100к типа кортекса или ебучего огнеглаза - на том поле не бывает решений без минусов и работающих долго
(если они применяються гдето за пределами вашей лабы с ав\edr и отключеным инетом)
Ну я подумаю, может, найду время к этому вернуться.
если даже черновики выложишь, уже рады будем. толком не кто ни чем не делиться. на безрыбье и рак рыба
 
А как мы будем находить _настоящий_ ntdll в котором хукали сплайсом на точки входа в апи и никаких сюрпризов не подкинули? Я вам более скажу доверять извлеченной из пеб информации про версию тоже стоит с осторожностью и прощупывать почву уже чрез вызовы и анализ ответа. Комформизм губит :) Паник рум эвривэ. А сорец расстроил, почему то думал что там порядок и четкость мысли в каждой строчке.
Мне тебе рассказывать как найти базу ntdll ? Ну не смеши, ты это и без меня знаешь. Даже если учесть, что в пебе все поменяли, наебнули, и сделали труным добытие базы, это не значит что ее достать нельзя. Просканируй адресное пространство целиком, найди вручную по PE заголовкам все модули, даже если из peb целиком ntdll убрать (наебнув при этом дюжину системных механизмов, никто из аверов так не сделает), она находится через прямой анализ виртуальной памяти. Да бро, и старый трюк с анализом стека тоже никто не отменял, в стеке у тебя где-то на дне всегда будет адрес из кодовой секции ntdll, потому что запуск процесса начинается с созданного в ntdll потока. Короче проблему ты из пальца высосал. Касательно версии в пебе, так зачем она тебе на этапе получения номеров сисколов через Halo ? Там peb можно вообще не использовать. А когда ты уже решил номера сисколов, версию винды можно получить из NtQuerySystemInformation прямым вызовом сискола в ядро. Там тебе могут помешать только ядерные колбэки аверов, но без драйвера из юзермода ты на это вообще никак не повлияешь. Вторую проблему тоже из пальца высосал.
Сюрпризы на точках входа апи ? Не видел я "неправильных" двойников ntdll, что бы убить работу Halo подсунув неверные номера через модуль-двойник. Вот не было такого в природе и судя по всему не предвидится, потому что техника тупая, и будет обходиться так же просто.

На реализацию халогейт авер и ставит бряк
вот тут и будет бряк у фалькона с карбона тоже
Да ты что, а может ты мне расскажешь как это будет происходить ? Halo (и в частности проход по экспорту, как один из его элементов) работает без единого вызова апи функций, сырой ассемблерный код, тупо бинарь, шеллкод, называй как хочешь. На перехватах функций авер тут не вывезет, потому что их тупо нет. Там нечего перехватывать для анализа. Единственная возможность у авера - эмулировать этот код, и понять, что происходит. Я сделаю для тебя открытие, называется оно Антиэмулятор. Очень полезная штучка, рекомендую. После этого поворота событий как ты будешь детектить Halo ? Я отвечу, никак.
 
Последнее редактирование:
Интересно а как я буду сканировать память если я не нашел ntdll что бы найти в нем api что бы найти в них ординалы что бы использовать их для сканирования памяти....загадка.
А с поиском _настоящего_ а не прокси нтдлл и тем более с парсингом экспорта случается всякое :)
Эх счастливые люди, не видали больших на солнце пятен.
 
Интересно а как я буду сканировать память если я не нашел ntdll что бы найти в нем api что бы найти в них ординалы что бы использовать их для сканирования памяти....загадка.
Ты перескакиваешь с места на место, еще не получили базу, а уже сканируем экспорт. Бредятина. Самому не смешно?
Начнем по порядку, для одаренных пользователей. С получения базы. Без PEB раз он так не нравится.
Все просто до безобразия, взял получил набор рабочих живых страниц в процессе, каждую страницу просканировал в поисках сигнатуры MZ и дальше PE (ух ты, а это же давно известная техника аверов для детекта инжекта шеллкодов, если у нас есть executable память вне какого-то модуля - алерт), вот так и нашел базы всех существующих модулей. Просканировал все таблицы экспорта этих модулей, нашел в них адреса строк, где прописано имя библиотеки, определил страницу на которой лежит эта строка, проверил флаг shared для этой страницы, если его нет, значит страницу модифицировали, и имя возможно подменили, так что потенциально это реальная библиотека, которую скрыли за прокси либой, но мы пока этого не знаем, просто знаем что возможно имя подменили, особенно, если в экспорте есть Nt функции свойственные для ntdll, а в имени библиотеки написано zalupadll. Так же через бит shared проверяются другие страницы, например там где могли затереть MZ и PE сигнатуры. Если их потерли, первый этап слегка меняется, но суть остается той же. Базы всех модулей мы находим в любом случае. Способов дюжина.
Если имена не подменили, но находим несколько библиотек с именем ntdll, значит есть прокси. Задача найти нормальную dll. Вспоминаем про прологи сисколов, и что всего есть 5-6 шаблонов. При условии, что прокси в идеальном случае проксирует абсолютно все адреса всех экспортных функций, проходимся в обоих библиотеках ntdll по экспорту, останавливаясь на Nt функциях, сканируем на шаблон сискола. В прокси либе вместо реальных сисколов на точке входа будет что-то вроде хука, а не реальный пролог, и проверку по шаблону он не пройдет. Вот и все, мы нашли реальную ntdll.
Так же с огромной вероятностью в PEB будет адрес прокси либы, что бы стандартные функции винды, те же LoadLibrary возвращали юзеру адрес прокси, а не реальной dll, на этом тоже можно сыграть. Действуем простым методом исключения.
Счастливые люди правда не видели пятен на солнце, ни больших, ни маленьких, задаюсь вопросом, о существовании солнца им вообще известно ?
 
Последнее редактирование:
Самому не смешно?
Смешно.
Начнем по порядку, для одаренных пользователей. С получения базы. Без PEB раз он так не нравится.
Все просто до безобразия, взял получил набор рабочих живых страниц в процессе
Как я получу этот набор страниц и их аттрибутов и состояний если я не знаю оридиналов сисколлов что бы их получить? Как не зная ордиллов сисколлов я должен парсить структуры, тот же экспорт не вляпавшись в приготовленный эксепшен.
Самые счастливые не только про пятна на солнце не в курсе но и не видали больших под полом тараканов :)
 
Как я получу этот набор страниц и их аттрибутов и состояний если я не знаю оридиналов сисколлов что бы их получить?
Ах да, мы забыли про сканирование всего адресного пространства и seh на случай ACCESS_VIOLATION. И да, способов дюжина, но мы предпочитаем цепляться за каждое слово в конкретном способе. Не поверишь, не горю желанием перечислять здесь все, ладно бы ты слушал с открытым ротиком, внимая умные мысли, но нет, ты вышел поспорить. Впрочем, как обычно, ничего нового. Все вокруг неправы, ничего не знают, один виспер знает все обо всем. Спор ради спора, хотя ты и сам знаешь, как получить базу во всех этих случаях. К чему тогда спор ? Просто потрепаться ?

от же экспорт не вляпавшись в приготовленный эксепшен
try catch и seh наверное просто так придумали, явно не для того, что бы эксепшены ловить
а veh который мог влепить авер наверное тоже никак не снимается, что бы твой seh отработал первым
а еще наверное самоотладку придумали не для того, что бы получать уведомлния о любом шорохе из первых уст прямиком из ядра
и аверы конечно же всех победили, не существует никаких рабочих обходов, малварь мертва, никто на ней сейчас не зарабатывает, а все кто "зарабатывает" просто сказочкники
чувствую тут даже без солнца становится душно, так все тараканы из под пола разбегутся :)
 
Сестра срочно двойную дозу успокоительного! Дилда срочно поддержи жопку, скажи что найти нтдлл просто и хало гейт рулит, а таблицы для дураков.
 
Сестра срочно двойную дозу успокоительного!
Тройную бро, успели до тараканов разогнаться, двойная только обратно к пятнам вернет, лучше вообще лошадиный транквил, что б наверняка, кто знает что за тараканами вылезет из сознания великого мастера.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Дилда срочно поддержи жопку, скажи что найти нтдлл просто и хало гейт рулит, а таблицы для дураков.
Я вообще не понимаю, зачем кто-то с тобой разговаривает тут. Не, ну, может, кто-то и любит когда его духотой обмазывают со всех сторон, но меня то зачем в это втягивать, общайтесь сами.


если даже черновики выложишь, уже рады будем. толком не кто ни чем не делиться. на безрыбье и рак рыба
Но если что мы все ждем, я не смог найти статей где бы с теоритической частью это все рассматривалось
Ладно, ладно, я постараюсь дописать)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх