Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Дневники и блоги —› Блог DenCoder'а |
. 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 05 июля 2015 15:23 · Поправил: DenCoder · Личное сообщение · #1 Всем привет! Всем здоровья, достатка, удачи, успехов... всех благ! ) Вот и нашлось немножко времени, чтобы завести блог. Давно хотел, но время для меня на вес золота... С вашего позволения здесь буду описывать процессы обхода/взлома/разбора защит, с которыми приходилось сталкиваться. Кому-то может пригодиться, кому-то - нет... Но за время работы немного узнал, что есть такая защита, перед которой некоторые коллеги пасуют - VMProtect. Может, в общем и есть такие страшные версии вмпрота, на которые терять кучу времени бессмысленно - не знаю, я с такими не сталкивался. Но скажу, что очень часто снимать вмпрот или разбирать то, что им накрыто, просто нет необходимости! Вмпроты, которые мне попались в мае (сразу 2 подряд) - не такие страшные. Первым из них была накрыта lockpdfu.dll - компонент DRM защиты pdf-ок. Подробнее Человек 2 или 3 года ждал, когда же, наконец, найдётся кто-нибудь, кто даст возможность свободно пользоваться pdf-документами на любом компе и редактировать. И находился некто с других сайтов, кто чуть не кинул... Попробую объяснить морально-идеологический аспект в двух словах прежде всего: Человек - учитель, ему необходим учебный материал без ограничений использования с возможностью редактировать. Одна из купленных тетрадей, на файле которой я помогал решить задачу, стоила что-то вроде 70 гривен, использовать можно только на 2х компах и никак нельзя что-то пометить, что-то исправить. Чтобы, например, поделиться с учениками, сколько-то нужно дополнительно проплачивать... мда... куда катится мир, одни то ли бизнесмены, то ли барыги... Ставим задачу: перехватить расшифровку запротекченной тетради, записать в отдельную папку оригинальный pdf. Из совета Vovan666 запротектил пдф-ку персональной версией, после чего без проблем из памяти AcroRd32 достал чистую pdf-ку. честно говоря, не понял про протект персональной версией, но проверил можно ли что-то из памяти выцепить: даже и обычные pdf-ки в первозданном виде в памяти не хранятся, сигнатур %pdf-1.4 .. %pdf-1.7 нет. То, что находится с такой сигной - какая-то полоска для самого ридера ) Я пошёл своим путём. Раз нельзя выцепить из памяти - незаметно (для защиты) встанем на место после декрипта и незаметно сольём поток в файл. Звучит просто, но пришлось немного попотеть... CreateFile, SetFilePointer, CloseHandle удалось хукнуть джампом без проблем. А вот ветка кода из acrord32.dll, вызывающая чтение функой ReadFile была хукнута в NtReadFile защитой + каким-то магическим образом проверялся crc этой ветки, а также защита не давала поставить ни софт бряк, ни джамп на ReadFile ни до, ни внутри, ни после... в дрова лезть не будем! Софт бряк нельзя поставить, а против харда защита ничего не имеет против! Вспомнил, что имеется такая функция AddVectoredExceptionHandler и быстро нарисовалась идея (что не я - первооткрыватель, знаю, потому и пишу, что вспомнил) поставить 2 харда на ReadFile и после и обрабтать по своему. Потратил немножко времени на кодинг, но удалось, с первой подзадачей справился, осталось только записать файл. Записать файл - тут кажется, проще не бывает. Но во-первых под 7кой и выше нужно перевести для этого акроридер в незащищённый режим, чтобы были привилегии, во-вторых - NtWriteFile также хукнута защитой и возвращала жестокий AD. Снимать хук без изучения защиты бесполезно - работать как надо не будет. ReadFile, WriteFile - так защита обменивалась какими-то важными данными. Не стал тратить время на изучение механизмов, сделал проще: против вызова NtWriteFile в месте после хука защита тоже ничего не имела против. Тут, я думаю, подробности излишни, в ntdll индексы всех фунок(nt-сервисов) идут по возрастающей по порядку во всех версиях винды, не встречалось другого(берём адрес хукнутого сервиса, находим следующий/предыдущий, берём оттуда индекс сервиса и минус/плюс 1) Новичкам с опытом кодинга может быть полезно В следующий раз (может быть сегодня вечером, может и через года 2) опишу отлом какой-то из версий вмпрота под x64, где тоже есть морально-идеологический аспект ----- IZ.RU | Сообщение посчитали полезным: TLN, Zoeken |
|
Создано: 06 июля 2015 12:43 · Поправил: DenCoder · Личное сообщение · #2 Не буду тянуть с описанием очередного отлома. Но начну всё-таки с благодарностей. Ибо почему мне и другим удаётся что-то сделать - всё благодаря ребятам по ту (разработчики) и по другую сторону(реверсеры, взломщики)! Thanks to: Всё же m$! Ведь не было бы основы - ОС, работу чего бы изучал? подо что бы писал? на чём б я развернулся? Спасибо m$ за винду от XP до 7 x86, x64! Спасибо за Visual Studio! Спасибо ребятам, отломавшим лицензирование! Спасибо за грамотный MSDN! Спасибо компании VMWare за их одноимённый продукт! Благодарности ребятам, отломавшим защиту! Спасибо Ильфаку за иду! Спасибо за лекарства! Спасибо всем за WinHex! Особые благодарности экзелабу! васму! rsdn! за накопленную энциклопедическую базу! Спасибо всем, кто приложил усилия, чтобы сделать жизнь кодеров и реверсеров легче! Спасибо Румянцеву, спасибо Зубкову! По сей день заглядываю в книги как в справочники. Жаль только нельзя нажать Ctrl-F ) Спасибо chromanova.fm за моральную помощь в трудные моменты реверса и отладки своих тулз! Спасибо всем, кто им помог! Моя мечта - заработать денег столько, чтобы каждому причастному можно было выписать чек на достойную сумму. Но пока это мечты... Итак, посчастливилось познакомиться с людьми, которым было необходимо лекарство для некоего софта. Лекарство это было уже на тот момент, барыги накрыли его вмпротом и перепродавали за 500-700$ где-то за один ключ. Общая задача: убрать ограничения. Подзадачи: кейген и free-версия лекарства. Каждая из подзадач на начальном этапе не предполагала, что легко осуществима. Ведь что я слышал иногда о реверсерах, сталкивающихся с вмпротом, повергало и меня в сомнения, что справлюсь... Ну, с вмпротом сталкивался уже не однажды, и не стараясь его изучать, по чуть-чуть до меня доходило, что это просто замусоренная виртуальная машина сродни эмулятору какого-то проца, какие я и сам умею писать. "Что там может быть сложного?" - прикинул я. Сложность была маленькая - всё это дело под x64, подо что в настоящее время мало приличных дебаггеров. x64dbg не работало на WinXP x64 - в хидере чётко было прописано, что работает, начиная с висты. Но даже перебив хидер и поставив нужный msvc redistributable, загрузить не удалось, поскольку не было функи из kernel32. Win7 x64 на виртуалке работал тормозно на моей тачке, поэтому всё же решил попробовать настроить либо иду, либо WinDbg... Представляю сейчас, сколько бы я времени потерял с недоделанным WinDbg ) У иды есть remote Win32 Debugger, достаточно хорошо для этой задачи подошёл. (кстати, пользовалась ida 5.5). Накрытое лекарство было выполнено в dll прокладкой, написал простенький лоадер для неё и дебаг старт свой лоадер. Тут маленький нюанс - лоадер грузил dll динамически, а в dll был TlsCallback, который вызывается, только если dll статически прилинкована! Посмотрев, в TlsCallback был неизвестный vm entry, для чего он был нужен - не стал тратить время, да и не понадобилось. Сразу с DllEntryPoint встретился с точкой входа в вм, и первые примитивы, которые были встречены - извлечение из виртуального стека на rbp (в своих делах был просто назван VStack) значений и помещением в область локальных переменных, размер которой 0xC0. По Vamit'у, наверное, это будут регистры, 24 шт.(за терминологию спасибо Vamit'у, постараюсь её держаться, но не особо люблю читать, так что поправьте меня, где неточно). Что же делать? Первое - вычислить, сколько всего примитивов, и оценить, сколько времени понадобится на их разбор. Выцепил алго, который по дешифрованному индексу из байт-кода, вычислял адрес примитива, отсортировал по адресам, получалось на некоторые примитивы один индекс, на остальные - больше, до 8. И всего 79 примитивов. Попробовал разобрать один, второй, третий.... первоначально уходило много времени, поскольку был ещё и мусор. По подсчётам надо было на полный разбор от 3 до 5 дней... Не стал полностью разбирать, а просто поставил 79 точек останова, и там где останавливалось, попутно разбирал дальше, убирал бряк, если примитив не заслуживал особого внимания и давал какое-то осмысленное название примитиву... 3 особо важных было найдено, назвал их CallFunc, getCrc и vmExit. Через CallFunc поначалу производился некоторый импорт, как потом оказалось среди них функи антиотладки. Их было всего 4, начеркал в блокнотике схему действий, как их обходить: Code:
Мне казалось, это не конец, встречусь обязательно с чем-то страшным. Поэтому на всякий случай изредка снимал снэпшоты, чтобы ошибившись, откатиться. Эта версия вмпрота не детектила виртуалку, хоть и встречалась cpuid, но даже на этот случай я был готов достаточно к такому повороту. Но к удивлению, последнее, что увиделось - это открытие самой себя и проверка контрольных сумм. Не так страшен чёрт, как его малюют! (Испанская версия - no es tan fiero el león como lo pintan - "не так страшен лев, как его рисуют"). Были там, конечно, ещё проверки crc, но этим нас не напугать! Кстати, в проверках были слабые места, которые можно было и усилить. С чуть меньше половиной примитивов познакомился, некоторые были дублями других, встретил распаковку, полный импорт всех необходимых функций, релоки, дошёл до oep, нашёл DllMain, нашёл релоки, сдампил. Переделал все секции, добавил релоки, стал думать, как приклеить импорт... Сложностью было то, что адреса импортируемых функций были разбросаны по разным адресам... Не буду описывать подробно сложности, можно было сделать уже распакованную версию этой dll, но я посчитал это лишней тратой времени, так как импорт-функи вызывались через такую хитрую последовательность(привожу примерно, без мусора): Code:
для чего надо было писать какой-то детект, а у меня был вариант проще. И вот, подумалось, что всё, вм пройдена, DllMain, сейчас начнётся самое сладкое, пусть даже и с мусором... И вдруг встретилась знакомая сигнатура точки входа в вм, ещё одну. Что же делать, придётся разбирать новую вм, которых оказалось даже 2. И разобрал все 79, дал осмысленные имена, записал в файл, и понял, что без трейсера ничего не смогу сделать. Пришлось писать... не стал закладывать всё, лишь по мере столкновения с новым. Получилась, конечно, каша в этой версии вмтрейсера, но пользоваться можно (если есть файлик с именами примитивов и группами индексов). На разбор второй вм у меня ушло 2.5 дня. Но разбор 3ей - уже 3 часа. Всё потому, что заглядывая в тело примитива, было уже видно, что он делает. Вот тогда, при разборе очередного лога, понял в чём смысл стрелок Пирса ) Приведу один пример - как выражается операция XOR через них: Code:
Можно ли это назвать сложным для человека с отл по дискретке? ) Немного усложняло всё дело то, что константы для операций явно не указывались, а были хитрой последовательностью сложения констант из байт-кода с константами из памяти по адресу, смещение которого вычислялось аналогично. Но привык за некоторое время... Суть кряка как раз и проявилась на стрелках Пирса: XOR хешей от оборудования (хеши по некоторому алго меняются, и из них образуется код запроса) с <"хешами"> введённого ключа(6 двордов "хешей" из 40-символьного ключа делаются путём перевода из base32 в binary, получающийся 25ый байт - crc ключа). Должно было получиться правильное некое значение, без которого либо вылет, либо по-прежнему просило бы зарегистрироваться... Без валидной пары практичекски невозможно вычислить, не зная принципов предыдущих кряков, легче уж тогда сломать оригинал... В общей сложности, на всё ушло месяц и 1 неделя. Так долго благодаря тщательности исследования, ожидания по-настоящему хитрой защиты, чего не встретилось ну и из-за написания и отладки вмтрейсера, который периодически приходилось править и править, и последняя правка была на последней неделе проводимой работы. "Сохранение флагов" работало плохо на mul-примитивах, знак результата не всегда тот получался... Терпение, целеустремлённость, упёртость, внимательность, аккуратность - необходимые качества тут, которые пригодились. На этом пока всё! Кто догадался, о каком кряке шла речь - просьба нигде не упоминать пока! Удача любит подготовленных Удачи!!! ----- IZ.RU | Сообщение посчитали полезным: daFix, TLN, Jupiter |
|
Создано: 07 июля 2015 00:47 · Поправил: hors · Личное сообщение · #3 DenCoder пишет: Спасибо Румянцеву, спасибо Зубкову! По сей день заглядываю в книги как в справочники. Жаль только нельзя нажать Ctrl-F ) Зубков есть и в виде chm справки и в виде pdf. Так что Ctrl-F будет работать. Я тоже купил в 2004 году книгу Зубкова "Assembler для DOS, Windows и UNIX". Это единственная оставшаяся в моей бумажной библиотеке книга на русском языке. Вот фото прилагаю: ----- http://ntinfo.biz |
|
Создано: 07 июля 2015 12:15 · Поправил: DenCoder · Личное сообщение · #4 Да да, именно эта книга. Помогает по части sse, mmx, FPU. Единственное что - книге уже 11 лет, по CPUID данные уже устарели и много чего нет. hors Давай всё ж задетектим версию вмпрота. Просмотрел сигнатуры в текущей версии die, ничего похожего нет. В попавшейся мне версии вмпрота, начиная с ep сигнатуры - e9.... джамп ведёт на ещё один e9...., который выводит на 68....e9.... оттуда 0f8b.... <- jnp(может быть любое условие) следом опять 68....e9.... а по целевому адресу в jnp за многими e9 (встречалось и до 4х) то же самое 68....e9.... , где в push та же самая константа, что и после jnp нагляднее вот так будет, наверное: Code:
за этой последовательностью последовательности инструкций Code:
20 регистров так "сохраняется", среди которых бывают дубли Вход в вм редко ветвится больше, чем на двое, но бывало где-то и 5-6 веток, в каждой ветке по смыслу ровно то же, что и в других. Все ветки рано или поздно сходятся в одну... Какая это версия? ----- IZ.RU | Сообщение посчитали полезным: TLN |
|
Создано: 07 июля 2015 12:58 · Личное сообщение · #5 |
|
Создано: 07 июля 2015 13:47 · Поправил: DenCoder · Личное сообщение · #6 Есть, но шифрована, в отркытом виде почти никакие строки не хранятся. Там есть ещё одна строка для MessageBox'а, тоже шифрована: Code:
Это сообщение выскочило однажды, когда перебил таблицу с CRC(таблица для проверки crc случайных регионов на байт-коде) под свои бряки и случайно пропустил глобальную проверку контрольных сумм, которая захватывала и эту таблицу ) ----- IZ.RU | Сообщение посчитали полезным: TLN |
|
Создано: 07 июля 2015 13:57 · Личное сообщение · #7 DenCoder пишет: Есть, но шифрована, в отркытом виде почти никакие строки не хранятся. Тогда это vmprotect версии 2.06 или старше(2.06-2.13) ----- http://ntinfo.biz | Сообщение посчитали полезным: DenCoder |
|
Создано: 07 июля 2015 14:02 · Личное сообщение · #8 |
|
Создано: 07 июля 2015 14:21 · Личное сообщение · #9 DenCoder пишет: В чём сложности детекта? ) Да в общем-то никаких сложностей нет и никогда не было. Единственно, что некоторые разработчики защит внимательно следят за тем что связанно с их программами. Поэтому к примеру публикация в открытом доступе распаковщика вмпротект(раз мы о нём заговорили), приведёт только к усложнению защиты. Кому от этого станет лучше? Это же касается и алгоритмов детекта. ----- http://ntinfo.biz |
|
Создано: 07 июля 2015 16:09 · Поправил: DenCoder · Личное сообщение · #10 hors пишет: Единственно, что некоторые разработчики защит внимательно следят за тем что связанно с их программами.Поэтому к примеру публикация в открытом доступе распаковщика вмпротект(раз мы о нём заговорили),приведёт только к усложнению защиты. Кому от этого станет лучше? В нормальных организациях нанимают крякеров для проверки их защиты. Также нормальные организации сами идут к повышению надёжности их защит. Отлом 2.xx версий уже не один раз описывали. Ну даже если опишут, раскроют отлом 3.0, то это чуть больше, чем ----- IZ.RU | Сообщение посчитали полезным: TLN |
|
Создано: 22 августа 2015 20:43 · Личное сообщение · #11 |
|
Создано: 26 сентября 2015 16:04 · Поправил: DenCoder · Личное сообщение · #12 Вот и подходит к концу, наконец, очередной проект в моей практике. Особенно тут ничего и не напишешь, поскольку весь код на ладони, ладонь должна быть здоровая. Реверсить код, разбухнувший в 20 мб из-за включенной опции компилятора оптимизировать циклы их разворачиванием там, где не надо, с последовательностями инструкций типа Code:
что скорей всего явлется результатом стиля программирования, в котором за правило взято определять константы через #define с инструкциями из расширения NEON для работы на 64битными числами, с блок-схемой, на которой хексрейс без goto обойтись не может(и ещё раз убедился, что хексрейс никаких денег не стоит) - огромное неудовольствие, хуже чем реверс обфускированного кода... Об этом и о хекс-рейсе чуть позже, но это и было главной причиной, почему решил именно сэмулировать прошивку и прицепиться отладчиком. Хочется верить, что лет через 10 будет самонастраиваемый, самоконфигурируемый потомок qemu и инструменты подоспеют годные для отладки. А пока время, потраченное с оптимизмом на запуск линукса из прошивки не стоит времени, потраченного на статический реверс. Можно найти родственный линукс специально для qemu, поставить, найти все компоненты для работы целевого приложения в прошивке, прицепиться отладчиком. Исходя из моего мимолётного опыта в этой области, оцененная вероятность, что будет работать, как должно, не дотягивает до 30%. Впрочем, это зависит ещё от степени изучения исходников qemu, от умений их править, отлаживать и собирать как надо(а никто за вас этого делать не будет), а также от умений править исходники gdb и с фантазией, какая есть, умений творения mdi поудобнее, чем сделано в insight(там вообще-то куча плавающих окошек, пародия на ольку). Пока этими умениями не обзавёлся, пожалел время... Но обзаведшись какими-то, комбинируя динамику со статикой (реверс дизассемблером, отладчик только в особо трудных местах развёрнутых циклов криптоалго), вышел на финишную прямую. Мда... что сказать. Будучи 7 лет назад азартным игроком, до конца от этого не избавился, поставил немного не на ту лошадку и потерял чуть больше времени, чем ожидалось. Из всего надо извлекать пользу! Очень возможно, приобретённые скилы разовьются и пригодятся в будущем. ----- IZ.RU | Сообщение посчитали полезным: TLN |
|
Создано: 27 сентября 2015 00:26 · Личное сообщение · #13 |
|
Создано: 27 сентября 2015 14:24 · Поправил: DenCoder · Личное сообщение · #14 Ну раз действительно жаждИте, немного поспешу Защищать хексрейс, я так понял, будешь? ) Исходный asm-листинг Code:
На идовском граф-вью во в меру уменьшенном виде это выглядит так Вы знаете, что зелёные линии - переход по истинному условию, красные - если условие ложно, синие - бузусловный переход. Конструкциями if-else на языке си без специальных ухищрений такую конструкцию в общем виде не передать. Для того, чтобы это было возможно, нужен либо язык с ператором выхода из условном блока, что есть в бейсике, либо эмулировать этот оператор при помощи операторов do{...}while(false); и break;. Слава богу, к таким ухищрениям прибегать не приходися, но совсем не слава богу в том, что приходится искать подобие между левой и правой ветками для того, чтобы их избежать... Заденем немного хексрейс, как он бы справился с этой задачей )) Вот как Code:
67 ни для не понятных строк кода на си! Честно скажу, на всякий случай потратил чуть больше времени, чтоб адаптироваться и быть готовым к "таким общего вида конструкциям" (не задумывался над тем, как обозвать, но пришло в голову назвать "параллельным кодом"), поразмыслил над логикой компилятора и выявил общие части, которые совсем нет небходимости дублировать в каждой ветке. Вот что получилось: Code:
Вообще говоря, и этот код можно сократить, но это для меня лишнее. Практически 90% кода так написано, подвергнуто непредсказуемым коварствам компилятора - дублируется часть кода, развёрнуты циклы. + Кодер, который писал это, не обременял себя особо его смыслом - работает и работает. Код приложения в 20 мб из прошивки можно было уменьшить примерно раза в 3, не снижая скорости его работы. А хексрейс тут лоханулся. Применительно к ARM-архитектурам, учесть и заложить оптимизацию создателю в нём не удалось. ----- IZ.RU |
|
Создано: 27 сентября 2015 14:52 · Поправил: reversecode · Личное сообщение · #15 и? Code:
|
|
Создано: 27 сентября 2015 15:02 · Поправил: DenCoder · Личное сообщение · #16 reversecode пишет: и? Что "и"? 5 датаблоков, когда используется один - нормально? goto - нормально? Из асма в си тут переводить проще без хексрейса! )) Ну а не к хексрейсу, а к кодеру(ам): Если ещё дальше посмотреть на соседнюю функцию, то эта функция вообще не нужна. Можно ограничиться Code:
----- IZ.RU | Сообщение посчитали полезным: TLN |
|
Создано: 27 сентября 2015 15:14 · Личное сообщение · #17 ну если нет претензий к рейсу то о чем разговор)) причесал,у меня вышло так Code:
Добавлено спустя 9 минут там на самом деле бинарь скомпилирован без оптимизации с dwarf, поэтому такие конструкции и остались, думаю если бы включили оптимизацию, компилер мог поулучшать все эти переходы |
|
Создано: 27 сентября 2015 15:31 · Поправил: DenCoder · Личное сообщение · #18 reversecode пишет: ну если нет претензий к рейсу есть есть... точнее - были были, но раз с ним не договориться, то они бесполезны так-то. Монстр декомпиляции дискредитирован! И на этом всё! reversecode пишет: причесал Немодная причёска, 67 строк против 37 reversecode пишет: там на самом деле бинарь скомпилирован без оптимизации с dwarf, поэтому такие конструкции и остались,думаю если бы включили оптимизацию, компилер мог поулучшать все эти переходы Реверс, развёрнутые циклы есть ещё в других местах, совсем не в необходимых - это прямо доказывает, что оптимизация как-то влючена. ) Разворачивание циклов даёт вообще-то маленькое преимущество и при их вложенности одного в другой, за счёт избавления от проверок счётчика и непредсказуемого сброса кэша инструкций. Но циклы в тех местах, где они выполняются всего однажды за одно чтение файла. Чего там именно оптимизировать - гадали разработчики долго P.S. Писали ООП-маньяки... ----- IZ.RU |
|
Создано: 27 сентября 2015 16:17 · Поправил: reversecode · Личное сообщение · #19 |
|
Создано: 27 сентября 2015 16:45 · Личное сообщение · #20 reversecode пишет: к ооп там вообще никаким местом, нет ооп подхода Не, это дописал без пояснений. Не захотел пояснять. Рейс, и проблемы, о которых написао - действительно к ООП не имеют отношения. Но чтение файла сделано - потребовалось, пипец, порядка 10 структур, массивом со списком кешей приплели(из-за массива кешей и тормозила и падала ида) и прочую лабуду. Не ООП? Это также можно было б вырезать, на 5 мб сократив код. ) На уроке по ООП однокурсник получает задание. Точно не помню уже какое, но смысл был именно использовать при реализации классы. Сделано было без них, потому что они там не нужны были. Доказать преподу, что надо задачи решать как можно проще, не удалось... Студентов некоторых ВУЗов учат вставлять классы, объекты везде, где только можно. Маниакализм! ) reversecode пишет: ильфак новую математику изобратать не может То, что новую "математику" кто-то не может "изобрести" - это совсем не проблема математики! Математика сейчас на достаточном уровне, чтоб заложить нужную "математику" так, как надо. reversecode пишет: напишешь теорию, и ильфак заложит эти алгосы в рейс Что мне с этого? ) Вариант! Но трудно реализуемый! И не в профессиональном смысле "трудно". ----- IZ.RU |
|
Создано: 27 сентября 2015 16:49 · Поправил: reversecode · Личное сообщение · #21 да я все понял что ооп не к рейсу, и ответил, что ооп там в той прошивке нет, ну ясно дело в классах что то реализовали и все ильфак не изобретатель теории математики и новых алгоритмов, рейс писан по книге по типу дракона где все алгосы и их детекты описаны, новых еще никто не изобрел тебе с этого слава, и много предложений о работе, будешь всемирно известный, а это почти == богатый |
|
Создано: 27 сентября 2015 16:54 · Личное сообщение · #22 reversecode пишет: тебе с этого слава, и много предложений о работе, будешь всемирно известный, а это почти == богатый Это нужно вклад времени сделать, жертвуя многим, веря и не сомневаясь в том, что от старта до момента запланированного финиша ничего не случится с тобой, с семьёй, и не начнётся война. ----- IZ.RU |
|
Создано: 29 октября 2015 00:59 · Личное сообщение · #23 Опять вмпрот x64. Непонятно из-за чего после 3х-месясячной паузы в этом направлении, несмотря на 2х-недельный разгон мозга, в скорости отстаю от прежних результатов в среднем около часа на 3, но в некоторых моментах... На этот раз всё же вместо 5 недель будет 3. Жалею, что не нашлось времени на анпакер. ----- IZ.RU |
|
Создано: 29 октября 2015 11:21 · Личное сообщение · #24 |
|
Создано: 29 октября 2015 22:32 · Личное сообщение · #25 Его пока ещё нет, есть только алгоритм действий и в них включено использование вмтрейсера. И в этом алгоритме пока нет части, как проводить анализ снятых логов. Вмтрейсер делает пока маленькую работу. Есть определённая алгоритмическая задача, как вмтрейсер превратить в "девиртуализатор" (по аналогии с "ассемблер" - "дизассемблер"), особенно в частях, где байт-код ветвится... И вот когда будет он, и из переведённого на простой язык байт-кода деобфускатор удалит мусор, и другим модулем проанализируется требуемая часть логики, отбросится всё ненужное... тогда это и будет анпакер. Пока так я себе это представляю. По удалению мусора из различных функций (получение ид устройств, формирование хвида, кодирование хвида ключом, декрипт строк, распаковка, импорт, ...) особой работы нет, повторюсь - оно на глаз воспринимается легко, сразу видно, где мусор. Вот для чего я столько написал, чтобы ответить на твой вопрос?... Собственно говоря, искал место для DebugAPI в анпакере. ))) Метод обхода антидебага в вмпроте этой версии достаточно прост: Code:
Но! Для анпакера не требуются действия по анти-анти-отладке. Можно ветки кода с антидебажными проверками(всего одна, перед распаковкой), а также с проверками crc(статическая и рандомная, встречается достаточное число раз, чтоб отсеять нетерпеливых и непредусмотрительных) просто исключить. Это можно сделать и вручную, даже можно наполовину распаковать вручную, так чтобы не требовался обход антиотладки вообще в дальнейшем. Скрипт для ольки от LCF-AT и делает это с использованием платформы с DebugAPI так же - наполовину! Но под x86, и не всегда корректно, особенно для dll (DISABLE_ASLR_BY_SCRIPT для dll по меньшей мере - наивность). От OEP он не снимает прот - то есть не избавляет от байт-кода дальше, не заложена в него эта функция. Добрались, наконец, до ответа: Анпакер, задуманный мной, будет полностью автономный, и будет представлять собой реализацию алгоритма, по которому можно снять прот и вручную, но с расширенными функциями для упрошения последующего анализа человеком. А потому DebugAPI ему будет не нужен. ----- IZ.RU | Сообщение посчитали полезным: hors, igorca, TLN |
|
Создано: 17 ноября 2015 00:32 · Поправил: DenCoder · Личное сообщение · #26 hors пишет: Тогда это vmprotect версии 2.06 или старше(2.06-2.13) Зашёл как всегда на форум, по привычке проверил все сообщения - скучно... Но благодаря карме Спекзи наткнулся вот Кол-во примитивов разбиравшейся Демоном прожки под вмпротом было 48, а не 79, как было у меня в мае. Сейчас это 79. Это может быть признаком версии, хотя вполне может быть настраиваемо. Не знаю, как там автор задумал, ни разу не видел и и не надо пока. Увлекательное чтиво оригинальных фраз dermatolog, Demon666, ... 7 лет назад было меньше вменяемых людей? Добавлено спустя 17 часов Что-то меня потянуло на историю, аж не выспался... К автору вмпрота отношусь нейтрально, то, что там, когда-то было у него с кем-то, и у кого-то с ним - так бывает иногда. Это совсем никак не говорит о постоянных плохих или хороших человеческих качествах... Не буду судить о человеке, он вполне кажется нормальным, просто где-то чуть лишне реагировал. Видимо, какая-то вспыльчивость каждому присуща... Всё-таки установил, вроде, минимальную версию прота, которым накрыта была одна и сейчас другая поделка. По Схематично, условно и более просто это выглядит так под защитой VMProtect Code:
Понятно, что взятый наугад ключ, пройдя проверку валидности (по правилам, описанным выше, ну или необязательно у меня) только один из 4 млрд даст нужное значение 0x10 для инициализации переменной. Если результат работы защищаемой программы очень зависит от него, то проверить все со скоростью 1 проверка/сек можно одним компьютером за 136 лет, либо сетью в 30 млн компов за 4 месяца. Только валидная пара поможет установить верный ключ. Тут есть несколько моментов, как улучшить защиту от подмены "левой" пары, чтоб в итоге обеспечить более надёжную защиту... Хз, реализовано оно или нет уже в новых версиях, но писать не хочу об этом пока. Code:
Ладно, поинтересовался немного - пора от этого отстать, всё раскапывать - время надо. ----- IZ.RU | Сообщение посчитали полезным: TLN |
|
Создано: 19 ноября 2015 12:01 · Личное сообщение · #27 |
|
Создано: 19 ноября 2015 19:02 · Личное сообщение · #28 hors пишет: Шифрование строк загрузчика появилось в версии 2.06 Да, наверное, стоит согласиться. Принял под словами ацкого Демона "расшифровка адреса" расшифровку строки... Ну да ладно, 2 признака версий 2.06+ теперь известны: 1) дешифровка строк; 2) наличие(и использование) функции VMProtectBeginVirtualizationLockByKey(). 2ой признак часто не выявить до самого конца анализа логов вмтрейсера, потому будет неудобным в определении версии. Но и наличие 1ого признака выявить - нужно сначала попасться на антиотладке. У тебя, hors, die детект этой вм сделан на основе первых байт и имён секций, как я смотрел вскользь. Это даёт 100% определения? Для x64 он всё же не определяет версию. Интересует версия 2.13. Вроде бы там dermatolog(он до сих пор, наверное, во главе и возможно с командой), сделал срок действия лицензии. Code:
Не уверен смогу ли найти. Не попадалось никому такое? ----- IZ.RU | Сообщение посчитали полезным: TLN |
|
Создано: 19 ноября 2015 21:23 · Личное сообщение · #29 |
Ранг: 281.8 (наставник), 272thx Активность: 0.25↘0.01 Статус: Участник Destroyer of protectors |
Создано: 23 декабря 2015 05:28 · Личное сообщение · #30 |
. 1 . 2 . 3 . >> |
eXeL@B —› Дневники и блоги —› Блог DenCoder'а |