Сейчас на форуме: (+8 невидимых) |
eXeL@B —› Основной форум —› Vmprotect. Хитрая защита от отладки. |
<< . 1 . 2 . 3 . 4 . 5 . >> |
Посл.ответ | Сообщение |
|
Создано: 24 мая 2017 20:14 · Поправил: Vamit · Личное сообщение · #1 При реверсе одной проги встретил хитрую защиту от отладки: она не позволяет работать проге под дебагером, после F9 терминация, приаттачиться к работающей то же нельзя - сразу терминация. Приложение накрыто последним Vmprotect, все функции защиты также под протектором, основные виртуализованы, остальные обфусцированы, а всего их более 200шт. Терминирует именно защита, а не вмпрот. В TLS сидят 2 каллбака защиты, первый из них есть в листинге. Дебаг работает только до первого каллбака, тут можно снять дамп проги и девиртуализовать вмпрот. А суть задачи такова: прога посылает запрос на сервер, в котором одним из куков является состояние защиты (32 бита), проэмулировать мне его не удалось и сервак не отвечает. Прошу любые идеи как победить, или идентифицировать защиту, она явно не самописная, и прилинкована к проге из какой-то либы. Вот листинг нескольких функций ядра защиты, вытащенных из под Vmprotect: Code:
----- Everything is relative... |
|
Создано: 31 мая 2017 19:15 · Личное сообщение · #2 |
|
Создано: 31 мая 2017 19:15 · Личное сообщение · #3 SegFault пишет: наслаждаюсь твоей беспомощностью Иди мимо, нечего сказать по делу - молчи... Беспомощность у того кто ничего не делает или тролит от нечего делать, а я уже более 50 фунок из под вмпрота восстановил. difexacaw пишет: По нормальному это запускается под визором и никаких ваших проблем нет. Дак запусти, у тебя же есть визор, и вытащи состояние защиты, которое отправляется на сервер. SegFault пишет: стало быть ему нужно готовое решение Готовое решение тут никто не сделает. ----- Everything is relative... |
|
Создано: 31 мая 2017 19:31 · Личное сообщение · #4 |
|
Создано: 31 мая 2017 19:56 · Личное сообщение · #5 |
|
Создано: 31 мая 2017 20:08 · Поправил: difexacaw · Личное сообщение · #6 |
|
Создано: 31 мая 2017 20:35 · Личное сообщение · #7 difexacaw пишет: Вот интересно спустя столько лет вы вернулись к этому с чего такие выводы? хрюшу забыл уже когда юзал, и не помню как выглядит. К сабжу можно приатачиться, но до создания тредгварда. Но для этого петлю надо ставить, и возможно из-за неё црц из массива найти и пересчитать. Хз может и для старта с еп, требуется отловить проверку целостности и сделать то же самое. После того как этот поток создадут, прицепиться можно только после того как он отпустит, обычно это после инит. Но вопрос не просто в запуске под отладчиком. или не заметил акцент? ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 31 мая 2017 21:23 · Поправил: Haoose-GP · Личное сообщение · #8 difexacaw пишет: хотел найти линк на семпл, не нашёл его. Оно? | Сообщение посчитали полезным: difexacaw |
|
Создано: 31 мая 2017 22:16 · Поправил: Vamit · Личное сообщение · #9 Bronco пишет: помню что свип бряки ставит, потом сабж рестартит.декомпилим только с еп, или с аттача так же можно? Это было давно, сейчас он работает полностью в статике, хоть с аттача, хоть с детача, хоть с еп, хоть с любого другого места, главное чтоб образ проги был в памяти распакованный от вмпрота. Ни одного байта кода он не исполняет. или не заметил акцент? Да надо-то всего стопануться в одном месте и вытащить 4 байта данных (состояние зашиты, которое отправляется на сервер). В памяти этих байт нет, возвращаемое функой значение сразу криптуется и пихается в пакет. Снифером тут ничего не отловить, все пакеты кодируются рандомным сессионным ключом, даже если случайно что-то и поймаешь, то раскодировать без ключа невозможно. ----- Everything is relative... |
|
Создано: 31 мая 2017 22:21 · Личное сообщение · #10 |
|
Создано: 31 мая 2017 22:34 · Личное сообщение · #11 Vamit пишет: Да надо-то всего стопануться в одном месте и вытащить 4 байта данных Обычно после оеп (или вм_оеп) и инит, этот тред килляют. В основном он для защиты служебного кода, и не отделяйте его от общего дерьмопрота. Кроме как под ним, тредгвард не встречал пока ни разу. Хрюши нет под рукой(это к слову о той среде, о которой писал выше), но под вин10 у Ольки те же бокарезы, что по видимуму и у Вас на ХР. Я о недоступности образа. Под х64dbg такого нет. Вникать глубже пока не могу, занят другим. По црц, я Вам в приватной переписке объяснял. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 31 мая 2017 22:45 · Поправил: Vamit · Личное сообщение · #12 difexacaw пишет: Хотя бы лог по сервисам, это первое что нужно мониторить. Логов у меня нет, есть только восстановленный код примерно 50 фунок защиты, причем большинство из них это крипт/декрипт, в данных защиты нет ни одного байта в чистом виде, в памяти всё закриптовано рандомным ключом, который уникален для каждой единицы данных. Структура каждой единицы данных такова: -8 байт хеш, куда может быть завернут byte, word, dword, qword (на каждый размер свой алгоритм) -16 байт рандомный ключ, получают его через rdtsc А дальнейшая задумка такова или разбирать защиту дальше и пытаться найти вариант её обхода или же можно обойтись без дебага, но для этого нужно раскодировать состояние защиты (оно кодировано как описано выше), а взять его можно из памяти приаттачившись к проге и не исполняя кода, но для этого нужно знать где что лежит и как закодировано. ----- Everything is relative... |
|
Создано: 31 мая 2017 22:53 · Личное сообщение · #13 |
|
Создано: 01 июня 2017 00:21 · Личное сообщение · #14 |
|
Создано: 01 июня 2017 00:30 · Поправил: difexacaw · Личное сообщение · #15 hash87szf Чем выше версия оси, тем там толще механизмы и ты замучаешься что то разбирать, особенно с включённой защитой и прочими вещами. И что бы запустить какой то софт, который робит в XP, вам друг мой нужно будет немного приложить усилий, а может быть и много. Я не юзаю стронг, я же говорил, что эти несколько плагов уг. Одна годность что мышью в два клика из меню можно заюзать. Но аналогично как автор топика говорил - это фича не плага, а отладчика =) ----- vx |
|
Создано: 01 июня 2017 00:43 · Поправил: hash87szf · Личное сообщение · #16 |
|
Создано: 01 июня 2017 11:27 · Поправил: Vamit · Личное сообщение · #17 Начальная инициализация данных защиты. Все данные рандомно криптованы, как описывалось выше. 00C93CB0: 0 00C93D10: DllHandle - хендл при вызове TLS callback 00C93D28: 0 00C94350: состояние fs:[C0] FastSysCall for x64 00C943C8: наличие функции "wine_get_version" в либе L"ntdll.dll" 00C94418: 0 00C943E8: 0 00C94400: 0 00C94430: 0 ----------------- не криптовано 00C93D70: qword, (eax из rdtsc) | (0 << 32) 00C93D78: qword, 00C93D70 >> 9 ----------------- 00C93D80: fs:[30] PEB address 00C93D98: fs:[18] TEB address далее заполняется табличка именами следующих функций: NtQueryInformationProcess NtQuerySystemInformation NtSetInformationThread NtFreeVirtualMemory NtQueryVirtualMemory NtAllocateVirtualMemory NtProtectVirtualMemory NtWaitForSingleObject NtQueryInformationFile NtSetInformationFile NtQueryFullAttributesFile NtRemoveProcessDebug NtTerminateProcess NtDeviceIoControlFile NtFsControlFile NtWriteVirtualMemory NtCreateFile NtFlushInstructionCache NtReadVirtualMemory NtReadFile NtWriteFile NtClose NtDelayExecution NtMapViewOfSection NtUnmapViewOfSection NtCreateSection NtCreateDebugObject LdrGetDllHandle LdrGetProcedureAddress NtQueryObject LdrLoadDll затем если (FastSysCall for x64 != 0) && (Wine not present) идет большая ветка инициализаций под Вин х64, её я пропускаю и разбирать не буду далее пошли манипуляции с записанными именами функций из ntdll.dll пока всё, девиртуализую дальше... ----- Everything is relative... | Сообщение посчитали полезным: Bronco, ==DJ==[ZLO], mak, sendersu, v00doo |
|
Создано: 02 июня 2017 03:21 · Поправил: difexacaw · Личное сообщение · #18 Vamit Посмотрел ваш семпл. Оно работает под олли, по адресу возврата из senter обнаруживается этот код: Code:
Тело апи если и проверяется, то я это не обнаружил, видимо нужно пропатчить их все, что бы узнать какие именно апи проверяются. В тлс обычная последовательность апи, ничего там особенного нет. Нужно разбирать логику работы, разбирая аргументы каждой функции или девирт кода - примитивная и длительная механическая работа. Что у вас не получается с отладкой я хз. ----- vx | Сообщение посчитали полезным: Vamit |
|
Создано: 02 июня 2017 09:29 · Поправил: Vamit · Личное сообщение · #19 difexacaw пишет: Оно работает под олли Что значит работает под Олли? Да, прогу под ольком можно запустить, стартовав с ЕП, а не с system bp, или приаттачиться к уже работающей, но хардбряки в ней уже не работают. Если тормознуть Паузой F12, то при последующей попытке продолжить работу получаем терминацию. Хардбряки норм работают до первого ТЛС каллбака защиты (0062С6F0) и внутри него до определенного места, а на втором ТЛС каллбаке защиты (00619AB0) хардбряк уже не работает, следовательно механизм их блокировки сидит в первом ТЛС защиты. Попробуйте поставить хардбряк на адрес открытого кода 0075DE70 (100% вызывается из CWinApp::InitInstance) и стопануться на нем, причем не обязательно под олькой, приветствуется любой дебагер, у кого это получиться - тому пиво и даже могу девиртуализовать что-то полезное для него...)) База приведенных адресов под ВинХР 0х00400000. По ходу разбора защиты возник вопрос, что находится в PEB:[0xAC]? По Майкрософту это смещение попадает внутрь PVOID Reserved5[52];, а защита оттуда читает WORD. ----- Everything is relative... |
|
Создано: 02 июня 2017 10:04 · Личное сообщение · #20 Vamit пишет: По ходу разбора защиты возник вопрос, что находится в PEB:[0xAC]? По Майкрософту это смещение попадает внутрь PVOID Reserved5[52];, а защита оттуда читает WORD. http://www.mpgh.net/forum/showthread.php?t=863507 Code:
| Сообщение посчитали полезным: Vamit, DenCoder |
|
Создано: 02 июня 2017 10:08 · Поправил: mysterio · Личное сообщение · #21 |
|
Создано: 02 июня 2017 14:01 · Поправил: DenCoder · Личное сообщение · #22 Дополню инфу по смещениям в PEB: Правая колонка - аналогичные смещения в x64 Инфа за reversecode. Но там не каждый может найти сразу ссылку на полезную таблицу. ) Я табличку ещё раньше нашёл, месяц назад, когда искал, как правильно определить версию оси, находясь ещё до старта процесса. ) ----- IZ.RU | Сообщение посчитали полезным: OKOB, bizkitlimp |
|
Создано: 03 июня 2017 12:25 · Поправил: difexacaw · Личное сообщение · #23 Vamit Вроде как я вчера уже отвечал. Вы были недовольны ответами, вот значит сами и разбирайтесь. Олли это лишь отладчик, процессом же отладки вы управляете. Если у вас что то не получается, то может следует немного матчасть почитать. Потому что я не увидел проблем. Ну а с такой чисткой сообщений толку не будет, я помогаю только один раз. Это совсем нужно обнаглеть, чтобы запостить комерс задачу и есчо быть недовольным.. я не писал чепухи. Короче в запросы, если вас не устраивают обычные обсуждения. Вам никто не поможет, это ранее уже сказали. ----- vx | Сообщение посчитали полезным: SegFault |
|
Создано: 05 июня 2017 14:23 · Поправил: Vamit · Личное сообщение · #24 Продолжение инициализации защиты... Все функции получения и инициализации параметров защиты имеют три ветки кода - для Wine, для x32 и х64 систем. - Получают параметры версии OS (MajorVersionOS, MinorVersionOS, BuildNumberOS, CSDVersionOS) из ресурсов RT_VERSION файла ntdll.dll - Проверка на наличие VirtualBox Создают файл L"\.\PhysicalDrive0", затем через DeviceIoControl с кодом IOCTL_STORAGE_QUERY_PROPERTY получают описание девайса в котором ищут подстроку "vbox". Если этот вариант неудачен, то ищут в реестре строку "HARDWARE\ACPI\DSDT\VBOX__", если она присутствует, то получают хендл L"VBoxHook.dll". - Проверка наличия виртуальной мыши Выполняют DisableWow64FsRedirection, если доступна. В системной директории проверяют наличие файла L"\drivers\vmmouse.sys". Выполняют RevertWow64FsRedirection, если доступна. - Проверка BIOS на qemu Читают из реестра "HARDWARE\Description\System" значение "SystemBiosVersion" и в нем ищут подстроку "qemu". - Проверка типа процессора на "GenuineIntel" через вызов cpuid с eax = 0. - Проверка тиков Сравнивают значение полученное из GetTickCount со значением из USER_SHARED_DATA с вызовом pause. Проверяются данные из разных адресов в зависимости от билда OS (0х7FFE0000, 0x7FFE0004, 0x7FFE0320 - 0x7FFE0328). Буду признателен если кто-то даст подробное описание инфы в этой области в зависимости от операционки, я ничего толкового не нашел. - Проверка SystemTime Сравнивают значение полученное из GetSystemTimeAsFileTime со значениями из USER_SHARED_DATA. Адреса 0х7FFE0014, 0x7FFE0018. - Получение частоты процессора Определяют способность процессора на выполнение расширенных функций через вызов cpuid с eax = 0x80000000. Если способен, то через cpuid с eax = 0x80000002, 0x80000003, 0x80000004 получают полное описание процессора и оттуда вытягивают частоту, если присутствует. В противном случае рассчитывают частоту через вызов QueryPerformanceCounter и rdtsc. На этом инициализация защиты заканчивается. Добавлено спустя 57 минут Вот полная структура данных защиты Code:
----- Everything is relative... | Сообщение посчитали полезным: VOLKOFF, nice, bartolomeo |
|
Создано: 05 июня 2017 15:29 · Личное сообщение · #25 Добрый день! По-моему инициализация 2-го слоя защиты начинается в 1-ом TLS CALLBACK путем вызова функции по адресу 0xd43cc2. Сначала идет сбор различной информации о системе невиртуализированными функциями. Затем уже виртуализированными функциями дешифруется имя библиотеки ntdll.dll и имя функции DbgUiRemoteBreakin. Видимо, реализован какой-то анти-аттач метод. Дальнейшие действия защиты продолжаю изучать. |
|
Создано: 05 июня 2017 15:40 · Личное сообщение · #26 Vamit пишет: Сравнивают значение полученное из GetTickCount со значением из USER_SHARED_DATA с вызовом pause. Проверяются данные из разных адресов в зависимости от билда OS (0х7FFE0000, 0x7FFE0004, 0x7FFE0320 - 0x7FFE0328). 0x7FFE0320 - 0x7FFE0328 ======>GetTickCount64 появилась начиная с Windows Vista ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 05 июня 2017 15:59 · Поправил: hash87szf · Личное сообщение · #27 > Проверяются данные из разных адресов в зависимости от билда OS (0х7FFE0000, 0x7FFE0004, 0x7FFE0320 - 0x7FFE0328). Должны быть одинаковы они, даже на х86 и х64. Например, XP x86: http://uninformed.org/index.cgi?v=2&a=2&p=15 И мой Вин10, справа | Сообщение посчитали полезным: Vamit |
|
Создано: 05 июня 2017 16:03 · Личное сообщение · #28 gggeorggge пишет: По-моему инициализация 2-го слоя защиты начинается в 1-ом TLS CALLB 017E6B02 - 1ый ТЛС каллбак это защита вмпрота и распаковка образа программы, там ничего интересного нет и дебаг в нем работает. 0062C6F0 - 2ой ТЛС каллбак. Инициализация защиты. Внутри 3 функции, первая (0061B370) проверяет целостность 3го ТЛС каллбака, вторая (00627780) самая большая инициализирует все данные защиты, третью (006296C0) я ещё не разобрал. 00619AB0 - 3ий ТЛС каллбак - ещё не смотрел... Добавлено спустя 5 минут hash87szf пишет: Должны быть одинаковы они, даже на х86 и х64 Вот тело этой функи, оно не очень большое Code:
----- Everything is relative... |
|
Создано: 05 июня 2017 16:52 · Личное сообщение · #29 Ну как Клок говорит видать, два варианта: ХП и Виста+ Win 10 x64, x86 process Code:
Win10 x64, x64 process Code:
|
|
Создано: 05 июня 2017 17:31 · Личное сообщение · #30 |
|
Создано: 05 июня 2017 18:38 · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . >> |
eXeL@B —› Основной форум —› Vmprotect. Хитрая защита от отладки. |