Сейчас на форуме: (+9 невидимых) |
eXeL@B —› Протекторы —› Декомпилятор ВМ |
<< 1 ... 18 . 19 . 20 . 21 . 22 . 23 . 24 . >> |
Посл.ответ | Сообщение |
|
Создано: 03 марта 2010 12:33 · Личное сообщение · #1 Вашему вниманию предлагаются наработки по декомпиляции ВМ. Проект на сегодняшний день для меня завершен, но жаль если результат "ляжет на полку", может кому-нибудь и пригодится. Предлагаю сначала ознакомиться с обзором, и если будет интерес то могу выложить и сам плагин, или здесь или в личку заинтересованным лицам, каким образом, пока ещё не решил... Но если кто-либо ожидает увидеть "автоматическое чудо", то сразу скажу - его нет. Для того чтобы получить результат нужна ручная предварительная работа: - с исследуемой программы должна быть снята упаковка - точки входа в ВМ находятся вручную - возможно неоднократное "жамкание" клавиш в OllyDbg, а возможно и модификация кода, чтобы попасть в нужное место, в зависимости от защищенной функции - необходимо вручную прицепить к программе требуемый секцию - запись результатов в файл это тоже ручная работа, но уже более приятная Не всё гладко обстоит с определением реализаций ВМ, на сегодняшний день примерно каждая третья реализация автоматом не определяется, приходится под неё модернизировать плагин, т.к. не могу сразу предусмотреть все случаи "издевательств" ВМ с кодом примитивов. Лучше дела с восстановлением "исходного" кода защищенных функций - 70% нормально восстанавливается, хотя во многом это зависит от самой структуры функции. Таким образом, если будет заинтересованность и помощь в нахождении подобных ситуаций, то проект может быть доведен до релизной стадии. ЗЫ: Речь идет об Ореановских машинах. Нигде специально не упоминал. 9c41_03.03.2010_CRACKLAB.rU.tgz - VMSweeperLst.rar ----- Everything is relative... |
|
Создано: 25 декабря 2017 16:19 · Поправил: deniskore · Личное сообщение · #2 shellstorm пишет: Остается мусор и избыточность, а у снежка довольно жесткие паттерны для asm конструкций и на таком коде выхлоп оставляет желать лучшего, он и на чистом коде не особо впечатляет. Проще переписать плагин: https://github.com/avast-tl/retdec-idaplugin под x64dbg, тем более кода там всего ничего, довольно качественный декомпилятор и от разработчиков отлик нормальный, можно озадачивать неправильной декомпиляцией или ошибками. Само ядро незачем тянуть в плагин, после постоянно догонять разработчиков, пусть у них голова болит со сборкой, для активного проекта клиент\сервер лучший вариант. Вы видимо не использовали RetDec, он работает тока с 32битным кодом. Vamit указал в своем сообщении, что поддержка х64 кода необходима. |
|
Создано: 25 декабря 2017 16:34 · Личное сообщение · #3 deniskore пишет: Вы видимо не использовали RetDec, он декомпилит тока 32битный код. В roadmap x64 есть и думаю в скором времени появится, все равно ТС за один день не портирует проект, к тому времени уже может появится x64 версия, а так, рельсам на данный момент нет альтернативы для x64. Я не только использовал, а еще немного разобрался в исходном коде, в ближайшее время обещают генерацию *.dsm, *.ll, а это бесплатный оптимизатор. |
|
Создано: 25 декабря 2017 16:36 · Поправил: Vamit · Личное сообщение · #4 для кьютовского гуя нечего нет В принципе не особо и нужен, пару окошек можно и самому сделать. скриптовое двигло можно наращивать своим функционалом Скрипты свипером не используются. Капстоновская структура диза очень хороша Главное для свипера это дизасм, если тут он полный как для х32, так и для х64 то это большой плюс. асм двиги слабое место Да, их тут несколько, но от него требуется только ассемблировать восстановленный свипером код функции с релокацией в исходное место, желательно с оптимизацией по размеру. В принципе асм в Ольке тоже не фонтан, все новые инструкции не знает, но всегда работает через db хх-хх, так что пропусков инструкций быть не должно. Ещё от дебагера требуется распознавание апишек по адресу (модуль и имя), а всё остальное у свипера своё. Добавлено спустя 13 минут Bronco, а такой момент, как апдейт существующих окон после изменения кода в SDK имеется? А так же вызов менюшных функций или по хоткею. ----- Everything is relative... |
|
Создано: 25 декабря 2017 17:01 · Поправил: Bronco · Личное сообщение · #5 Vamit пишет: если тут он полный как для х32, так и для х64 то это большой плюс. разрядность кажется только значима для инстр с указателями, в х32 нет ip и disp, поэтому поля в структуре х86, для операндов, при дизе заполняют по разному. вывод в лог (если необходим), лучше свой, встроенный после 20000 строк, ничинает "плавать", после 100000, может положить. Vamit пишет: Да, их тут несколько пока 3, хотя в фейсе 2, но все с "характером". на мой взгляд, лучший из трёх это XED Vamit пишет: или по хоткею. угу...дескрипторы окон_вкладок(виджеты мать их) хз как достать, пока только так: Code:
Vamit пишет: как апдейт существующих окон после изменения кода имеется. для каждой клиентской области. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 25 декабря 2017 18:56 · Личное сообщение · #6 Bronco пишет: для кьютовского гуя нечего нет А этого что мало? Создаешь свой виджет или по-русски любое окно и пихаешь как тав вкладку. BRIDGE_IMPEXP void GuiAddQWidgetTab(void* qWidget); BRIDGE_IMPEXP void GuiShowQWidgetTab(void* qWidget); BRIDGE_IMPEXP void GuiCloseQWidgetTab(void* qWidget); BRIDGE_IMPEXP void GuiExecuteOnGuiThread(GUICALLBACK cbGuiThread); Так же есть функции прямого доступа ко всем встроенным в дебаггер табам. ----- Everything is relative... |
|
Создано: 25 декабря 2017 19:16 · Поправил: Bronco · Личное сообщение · #7 |
|
Создано: 26 декабря 2017 11:40 · Личное сообщение · #8 Сделал несколько тестов и пришел к выводу, что Свипер правильно девиртуализовать некоторые функции на восстановленном дампе не может. Причина разрушение тела вм после восстановления импорта, т.к. вместо пожранного протом импорта он в эту область может поместить свои данные, а дамп без восстановленного импорта неинформативен и без него невозможно определить многие АПИ функции. Отсюда следует, что вариант 2 с декомпиляцией дампа в Ида отпадает и остается один вариант реализации нового Свипера под х32/64dbg. ----- Everything is relative... |
|
Создано: 26 декабря 2017 13:36 · Личное сообщение · #9 Vamit пишет: декомпиляцией дампа в Ида отпадает и остается один вариант реализации нового Свипера Как вариант, может выкатить core свипера в dll (чтоб не рипали и не нарушали авторские права) и header к нему, а страждущие пусть биндят к python и пользуются хоть в ida\radare\ninja\etc. | Сообщение посчитали полезным: sendersu |
|
Создано: 26 декабря 2017 14:16 · Личное сообщение · #10 |
|
Создано: 26 декабря 2017 14:20 · Личное сообщение · #11 Vamit пишет: В принципе возможно сделать для Свипера SDK, но это долго и навряд ли будет эффективно, т.к. собственных асма/дизасма у него нет В python можно подключить практически любой популярный или сделать для него бинд, диз\asm это не проблема ядра, сделать необходимый интерфейс и пусть себе делают бриджи под необходимую структуру, интерфейс можно выдрать и из x64dbg. |
|
Создано: 26 декабря 2017 19:56 · Поправил: Bronco · Личное сообщение · #12 shellstorm пишет: а страждущие пусть биндят к python упс...не уверен что страждущих это вообще коснётся, и не понятна роль питона, если для загрузчика_пакера нужны только хайды, и этот код идёт лесом, а для статик разбора остального (после оеп) нужен тупо рабочий дамп на одну сессию пк. Vamit пишет: а дамп без восстановленного импорта неинформативен можно перенести табличку в другую область образа, для этого есть WannabeUIF, он опен сорс, пока заточен под х64,но сделать под обе архитектуры не проблема. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 26 декабря 2017 20:18 · Личное сообщение · #13 Bronco пишет: упс...не уверен что страждущих это вообще коснётся, и не понятна роль питона У всех перечисленных инструментов есть скриптовый движок, через него проще подключить core чем компилировать плагины, тем более если структура core будет завязана на конкретный дизасм. Тем более самому автору ничего делать ненужно, выкатить SDK, а его уже любой может забиндить через swig.) |
|
Создано: 26 декабря 2017 20:33 · Поправил: Vamit · Личное сообщение · #14 Bronco пишет: можно перенести табличку в другую область образа Я имел в виду не только IAT, но и сами вызовы АПИ из чистого кода сожранные вмпротом, вместо call [xxxxx]; модуль:имя функи мы увидим мусор. И ещё одно соображение, до полного автоматизма декомпиляции всех фунок и срезания протектора с файла далеко, местами требуется ручная работа, а куда записывать чистый код восстановленной функи? На её родное место нельзя, там может быть ещё не декомпилированный код другой функи, поэтому выход пока один - в дамп с восстановленным импортом, для этой цели очень подходит Ида, да и плагин для неё есть по изменению больших кусков кода. ----- Everything is relative... |
|
Создано: 26 декабря 2017 20:35 · Поправил: Bronco · Личное сообщение · #15 shellstorm, если есть решение паблить, это одно, но такого решения нет, и как ни странно именно с этим я согласен полностью. В частных диалогах ограничения нет, доки пишут, если заинтересуют таргетом, могут помочь декомпильнуть. // я не злоупотреблял, но такие случаи знаю Этого вполне достаточно, чтобы не было новых гонок по вертикали. На проект угухали больше 12 лет, и он всё равно допиливается, то есть бетка. Служебный код паблить надо, антидебаг паблить надо, это даёт вполне весомую возможность изучать остальное. Добавлено спустя 3 минуты Vamit пишет: но и сами вызовы АПИ из чистого кода сожранные вмпротом, ну так все переходники находят и указатели правят на новую область, для новой иат. Если родное место иат прот юзает, его можно забекапить, а после переноса иат, восстановить. я могу скинуть в личку свой плаг, в нём уиф под обе архитектуры, побалуетесь с таргетами. там только переходники, и сама табличка, остальное та же сцилка_импорт допишет. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. | Сообщение посчитали полезным: mak |
|
Создано: 26 декабря 2017 20:56 · Личное сообщение · #16 Bronco пишет: shellstorm, если есть решение паблить, это одно, но такого решения нет, и как ни странно именно с этим я согласен полностью. Vamit пишет: В принципе возможно сделать для Свипера SDK, но это долго и навряд ли будет эффективно, т.к. собственных асма/дизасма у него нет, а тянуть его из разных дебагеров не выход. Никто и не говорит об открытие исходников, а речь о dll которую можно использовать в любом вменяемом инструменте. Тот же диз, банально import capstone и выхлоп передавать в бридж декомпилятора vmp, тем более нормальные инструменты позволяют использовать сторонний диз. Проблема плагина, что он прибит к одному инструменту. | Сообщение посчитали полезным: Bronco |
|
Создано: 27 декабря 2017 00:17 · Личное сообщение · #17 |
|
Создано: 27 декабря 2017 09:40 · Личное сообщение · #18 r99 пишет: проверено? Да и неоднократно, на любое сожранное место вмпрот может поместить что угодно (обработчики примитивов, обфусцированные куски других функций, кодированный вызов АПИ и т.д.), а так как у него любой функциональный блок тела порублен на мелкие куски (через jmp и call), то вместо любого сожранного кода может находиться несколько кусков тела прота разной функциональности. Пока я только не встречал (а может не помню), нахождение ленты пикода в сожранной области, она у него всё-таки в определенной степени линейна для функции. ----- Everything is relative... |
|
Создано: 10 января 2018 15:06 · Поправил: Vamit · Личное сообщение · #19 Прошу откликнуться в личку у кого есть вмпротект v3.1 или выше. Попрошу только завиртуализовать тестовый файлик. Заранее спасибо. ----- Everything is relative... | Сообщение посчитали полезным: 4kusNick |
|
Создано: 29 июля 2018 12:24 · Личное сообщение · #20 |
|
Создано: 29 июля 2018 12:55 · Поправил: Bronco · Личное сообщение · #21 |
|
Создано: 29 июля 2018 13:47 · Личное сообщение · #22 |
|
Создано: 29 июля 2018 14:36 · Поправил: Bronco · Личное сообщение · #23 Vamit пишет: сам пакер вмпрота не смотрел так посмотри, интересно же. киюзердиспатчер сцила не перекрывает, а эти черти на сингл степ, стали читать контекст. ты же для свипа аппаратные юзаешь. а сиськи это ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 15 сентября 2018 07:26 · Поправил: ClockMan · Личное сообщение · #24 |
|
Создано: 16 сентября 2018 16:25 · Личное сообщение · #25 ClockMan пишет: под вм запихнул ZwQueryInformationProcess ZwSetInformationThread тут два выхода либо писать драйвер либо использовать уловку так как vmprot запихнул даже вызов KiFastSystemCall можно конечно разобрать вм либо искать в коде команду SYSENTER и надеятся из 100 найти 2 заветных вызова, а можно пойти на хитрость в windows можно отключить SYSENTER, да да вы не ослышались , идём в ветку реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel и создаём новый параметр DWORD FastSystemCallDisable со значением 1 и пере-загружаемся для внесения изменений ,команда SYSENTER будет вызывать исключения, но есть одно но, vmprot не обрабатывает эти исключения и программа будет крашится, нам придётся помимо того чекать вызова сервиса так ещё и обработать правильно исключения и за паранои создателя vmprota Также vmprot чекает список загруженных драйверов , если кто напишет драйвер на паблик то готовитесь что создатель vmprota внесёт его в чёрный список)) ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: DenCoder, plutos, hash87szf |
|
Создано: 16 сентября 2018 16:38 · Поправил: difexacaw · Личное сообщение · #26 ClockMan Мисье тоже знает толк в нэйтив извратах Не знаю вашу задачу, но по описанию выше у вас там полная засада. Если вы откючите быстрые вызовы, то система перейдёт на прерывания(int 2e), никакие ловушки не будут срабатывать. Фолт возникнет если будет прямой вызов заблокированной инструкции, но это никогда не используется из за плавающих сервисных номеров. Шлюзы фиксированы в памяти и расположены рядом. А даже если и есть быстрый вызов, то его можно мониторить - не зависимо от адреса входа(senter) адрес выхода(Kiexit) фиксирован, там можно пропатчить и все вызовы мониторить, в отличие от int, где возврат на следующую инструкцию. ----- vx |
|
Создано: 17 сентября 2018 00:13 · Личное сообщение · #27 |
|
Создано: 17 сентября 2018 21:08 · Поправил: difexacaw · Личное сообщение · #28 ClockMan Но так ведь KiRet() вызывается после отработки сервиса. Хотя поточные параметры можно изменять многократно, так что это не важно. Да и вмп раньше самые примитивные способы использовал антиотладки, поэтому плагины и работали, не знаю как сейчас, врядле что то поменялось. Если бы это была сложная задача, то следовало бы вообще отказаться от использования обычного отладчика, так как его невозможно скрыть принципиально. Но так как детекты примитивны, то такие простые заглушки" годятся. Если можно за минуты заколхозить, то нет смысла использовать тяжёлые инструменты или способы(техники). ----- vx |
|
Создано: 18 сентября 2018 11:24 · Поправил: ClockMan · Личное сообщение · #29 difexacaw пишет: не знаю как сейчас, врядле что то поменялось Всё тоже самое кроме двух фунок которые он запихнул под свою обновлённую вм а так да антиотладка страрая Code:
тратить время на разборку стартого вм как то оно и не нужно главное добратся до сердца программы ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. | Сообщение посчитали полезным: difexacaw |
|
Создано: 18 сентября 2018 13:43 · Личное сообщение · #30 |
|
Создано: 18 сентября 2018 20:26 · Поправил: difexacaw · Личное сообщение · #31 ClockMan Ну как это можно назвать антиотладкой, да стыдно это видеть. plutos > Шлюзы == gates? Переходники между модами. Это сервисный вызов. Кстате не понимаю что там можно смотреть отладчиком. Эту лапшу нужно сворачивать автоматикой, зачем это отладчиком открывать хз. Насмотрятся какой то хрени видео на ютубе а потом ковыряют это дебагом, не понимая что это бессмысленно. ----- vx |
<< 1 ... 18 . 19 . 20 . 21 . 22 . 23 . 24 . >> |
eXeL@B —› Протекторы —› Декомпилятор ВМ |