Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Протекторы —› Статическая трассировка кода |
<< . 1 . 2 . 3 . 4 . 5 . 6 . >> |
Посл.ответ | Сообщение |
|
Создано: 11 декабря 2017 18:39 · Поправил: Boostyq · Личное сообщение · #1 Всем привет, Изучаю x86 драйвер, он защищен с помощью vmp Случай достаточно простой, только некоторые функции мутированы (обфусцированы?), даже нет внешней упаковки Для того чтобы посмотреть обфускацию целиком, нужна трасса от и до Дебажить его у меня нет возможности, да и вообще хочу попробовать сделать это статически Возможно идея глупая, но что если написать упрощенный процессор с обработкой нужных инструкций (операции стека, прыжки, вызовы), который бы "выполнял" код до тех пор пока не встретиться выход из функции Правда не ясно что делать c вызовами API, stdcall мы же очищаем стек, но вот с другими соглашениями? Дело даже не в проте, а вообще в целом Я пыталась делать парсер конкретных команд под конкретный прот, но дело в том, что это не возможно реализовать, ибо число нелогичных приемов может быть очень большое, поэтому нужно спуститься на самый нижний уровень, для того чтобы выполнять код как сам процессор это делает Возможно кто-то даст дельный совет, может кто-то уже делал подобное? Так же я пыталась найти псевдо-код, как процессор выполняет команды, т.к. вмпрот любит использовать редкие команды, может у кого то есть линки? Спасибо ----- В облачке многоточия |
|
Создано: 16 декабря 2017 20:14 · Личное сообщение · #2 |
|
Создано: 16 декабря 2017 20:16 · Личное сообщение · #3 SegFault Я не даун. Почему вы меня так называете. Я не побежал стучать", а отписал об вашем удалении. Вы тут помеха в серьёзной теме, клоун если прямо сказать. Меня не приняли в модеры, поэтому я не могу провести чистку. Это должны сделать другие люди. Добавлено спустя 3 минуты shellstorm Я ответил тс в виде совета и привёл пример. Дальше начались не нормальные вопросы про профайл. Но это не решает задачу. Всё равно остаётся вопрос стабильности. А главное сама архитектура - зачем эмулить каждую инструкцию, если это может сделать cpu ? ----- vx |
|
Создано: 16 декабря 2017 20:25 · Личное сообщение · #4 difexacawdifexacaw пишет: Я не даун. Почему вы меня так называете. потому что уровень интеллекта такой, вероятно воздействие норкотеков или других препаратов сказалось, вы же на них сидели одно время ( а стало быть и по сей день ) difexacaw пишет: Всё равно остаётся вопрос стабильности. А главное сама архитектура - зачем эмулить каждую инструкцию, если это может сделать cpu ? затем что vm любая затрудняет понимание логики программы, и этот ты клоун влез сюда со своим визором и начал нести херню не по теме. Все что нужно ТС это взять нормальный фреймворк, позволяющий делать анализ и свертку кода ( symbolic execution + jitter (эмулятор) ), ознакомиться с примерами и снять обфускацию. Скорее всего даже солвера хватит для этого. Свои инструменты мб тоже можно пописать, чисто для самообразования, в этом ничего плохого нет. |
|
Создано: 16 декабря 2017 20:29 · Личное сообщение · #5 shellstorm пишет: Все замечательно, только ТС не упоминал rtime от слова совсем, в данный момент задача в анализе блоков, а в этой задаче rtime не требуется. Угу, я говорю именно про то, чтобы сделать это статически difexacaw пишет: Я ответил тс в виде совета и привёл пример. Дальше начались не нормальные вопросы про профайл. Но это не решает задачу. Всё равно остаётся вопрос стабильности. А главное сама архитектура - зачем эмулить каждую инструкцию, если это может сделать cpu ? Спасибо вам за ответы, почитав вики, я поняла что больше всего подходит термин символическое исполнение, но я эмулирую инструкции, чтобы вычислять адреса обфусцированных прыжков и фальшивых условных прыжков, так же это подойдет например чтобы выполнять какие-то простые функции прямо из иды ----- В облачке многоточия |
|
Создано: 16 декабря 2017 20:29 · Личное сообщение · #6 |
|
Создано: 16 декабря 2017 20:32 · Личное сообщение · #7 difexacaw ты слился, несите следующего Boostyq Всё так, попробуйте https://github.com/cea-sec/miasm, там есть и SE и эмуляция, а также куча примеров. Думаю, это сэкономит не мало времени на собственную реализацию эмуля | Сообщение посчитали полезным: Boostyq |
|
Создано: 16 декабря 2017 20:35 · Личное сообщение · #8 |
|
Создано: 16 декабря 2017 20:37 · Личное сообщение · #9 |
|
Создано: 16 декабря 2017 20:38 · Поправил: difexacaw · Личное сообщение · #10 Boostyq Нет, вы не понимаете. Давайте тогда обьясню на примере. В потоке выбирается произвольная инструкция. Как получить следующую ? - раскодировать и эмулировать. - включить машинную трассировку, что долго. - определить размер инструкции и напрямую выполнить. В третьем случае профайл максимален, вероятность ошибки минимальна. В первом случае профайл не фонтан", ошибок овер 9к". Во втором случае профайл просаживается невероятно, за квант треда при использовании того же dye не происходит транзитных операций. Во втором случае каждая инструкция вызывает транзакцию. Эмуляция не оптимальное решение и сложное. ----- vx |
|
Создано: 16 декабря 2017 20:39 · Личное сообщение · #11 |
|
Создано: 16 декабря 2017 20:42 · Личное сообщение · #12 |
|
Создано: 16 декабря 2017 20:46 · Поправил: difexacaw · Личное сообщение · #13 |
|
Создано: 16 декабря 2017 20:59 · Личное сообщение · #14 SegFault пишет: Ссылкой не поделитесь? в доках пишут что он full ruby Оригинал да, а порт, хз, я название не помню, автор свое придумал, в крайнем случае есть бридж который позволяет использовать ruby библиотеки в python, правда на счет его стабильности не знаю, никогда не пользовался, приходилось только java бриджем пользоваться. |
|
Создано: 16 декабря 2017 21:04 · Личное сообщение · #15 difexacaw пишет: Это мощная техника, но в вашей задаче она не нужна. Это глубокое абстрагирование от кода, связывание потока данных и их свёртка. Не туда смотрите дибил это тебя забанить надо за тупые советы, все VM разбираются в настоящее время через SE(тот же вмпрот), а не твоим визором глючным Добавлено спустя 2 минуты SSTIC2017_Deobfuscation_of_VM_based_software_protection.pdf вот дока в качестве подтвержения тебе крелк, а дибил это не оскорбление, это совокупность выводов о тебе, знаешь как нейросеть, собирая признаки выдает вердикт, вот это и есть вердикт |
|
Создано: 16 декабря 2017 21:23 · Личное сообщение · #16 |
|
Создано: 16 декабря 2017 23:59 · Поправил: Boostyq · Личное сообщение · #17 SegFault пишет: все VM разбираются в настоящее время через SE Там даже видео есть Правда ничего практического оттуда черпнуть нельзя, все, что ясно - надо изолировать код из функции и затем его прогнать через оптимизацию При этом информации на русском одна статья, и та переведенная... Кстати что такое вообще этот визор? ----- В облачке многоточия |
|
Создано: 17 декабря 2017 01:03 · Личное сообщение · #18 Boostyq пишет: Там даже видео есть у автора есть хаб на github и там есть проект атаки на vm. Boostyq пишет: Кстати что такое вообще этот визор? Забрало у шлема, у не курильщиков это монитор виртуальных машин\софта. | Сообщение посчитали полезным: Boostyq |
|
Создано: 17 декабря 2017 02:43 · Поправил: ClockMan · Личное сообщение · #19 difexacaw пишет: зачем эмулить каждую инструкцию, если это может сделать cpu ? + Нормальный эмуль так и работает получил размер выполнил инструкцию на CPU, записал данные в эмуль,быстро и надёжно а тупо эмулировать каждую инструкцию это жесть если там будет куча VRNDSCALEPD и т.д то обосра*ся можно ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 17 декабря 2017 04:09 · Личное сообщение · #20 |
|
Создано: 17 декабря 2017 04:55 · Личное сообщение · #21 ClockMan пишет: Нормальный эмуль так и работает получил размер выполнил инструкцию на CPU pop word [rsp+rcx*4-0xFF345678] ? Раскодировать ModR/M + SIB (согласно докам так называется) таки придется, чтоб колбэк слать: намечается доступ - нужен фэйковый/реальный адрес, но сначала вычислить нужно и вообще это из памяти в память - 2 адреса уже. Т.е. надо какую-нибудь фичу сигнальную в железе. Тут ещё смысл в том, чтобы побрутфорсить код или vm-ленту, сделать компактные undo/redo, зная куда записано было. |
|
Создано: 17 декабря 2017 05:53 · Поправил: difexacaw · Личное сообщение · #22 bizkitlimp > pop word [rsp+rcx*4-0xFF345678] MRM раскодируется общим способом для всех инструкций. Таким же общим способом может быть изменена адресная компонента и инструкция или их массив отправлена в процессор на выполнение. А эмулировать каждую как то глупо. Добавлено спустя 5 минут Code:
----- vx |
|
Создано: 17 декабря 2017 07:17 · Личное сообщение · #23 И после коррекции инструкции, которая с памятью, она внезапно запишет куда-то во внутренний сторадж. Я так понял, ассоциация типа map<uint64, uint64> (значение памяти/реальный источник). Так-то да, для тем более пакетного исполнения конечно unicorn там взять, готовое. Эмуляция доступней как быстрокостыль: кода немного или понять хоть что-то в начале (если самому делать). Медленно / куча своих же ошибок эт 100%. |
|
Создано: 17 декабря 2017 12:36 · Поправил: Boostyq · Личное сообщение · #24 ClockMan пишет: + Нормальный эмуль так и работает получил размер выполнил инструкцию на CPU, записал данные в эмуль,быстро и надёжно а тупо эмулировать каждую инструкцию это жесть если там будет куча VRNDSCALEPD и т.д то обосра*ся можно Я понимаю, у меня нет пока проблем с эмуляцией, магические прыжки он вычисляет, фиктивные может пропускать, стек эмулирует, при вызове апи выравнивает стек Я не спорю, ошибок там миллион, так как что-то портировалось с си на питон, что-то по докам, которые не всегда верные Все застряло на анализе веток, оказалось что анализировать ветку лишь однажды вовсе неверно, тут нужен более умный анализ, который закончит экстракцию кода, уже потом можно думать о сворачивании ----- В облачке многоточия |
|
Создано: 17 декабря 2017 12:57 · Поправил: Bronco · Личное сообщение · #25 |
|
Создано: 17 декабря 2017 14:43 · Поправил: difexacaw · Личное сообщение · #26 Boostyq Для построения графа, те описания всего кода от изначальной точки используется конструктор. Он проходит по всем ветвям, выделяя таким образом весь код. Проблемой может быть выделение массива векторов(case-конструкции). Для выделения кода, который выполняет визор нужен кэш инструкций. Это битовая карта, которая отображается на всё ап, причём она должна расширяться для экономии памяти, так как имеет большой размер. Каждая инструкция(адрес) помечается в этой карте, так же там может сохраняться инфа декодера, что бы повторно не раскодировать Ip. Далее на основе этих адресов(битмапы) начинается сборка графа конструктором. Уже описанные адреса конструктор не обрабатывает. Для таких манипуляций нужно использовать AVL деревья, иначе будут большие тормоза. Я использовал следующую модель кэша: Кстате может показаться странным, сохранение инфы декодера в битовой карте(использование её) почти не влияет на профайл. ----- vx |
|
Создано: 17 декабря 2017 15:01 · Личное сообщение · #27 plutos пишет: Пожалуйста, ссылку можно? https://github.com/JonathanSalwan/Tigress_protection | Сообщение посчитали полезным: plutos |
|
Создано: 17 декабря 2017 23:37 · Личное сообщение · #28 difexacaw пишет: Для построения графа, те описания всего кода от изначальной точки используется конструктор. вопрос уже задавался.. но всеже.. как же декодить типа jmp eax и тому подобные вещи? для такого нужна трассировка.. или статическая, или динамическая не важно. иначе будут необработанные ветки ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 17 декабря 2017 23:50 · Личное сообщение · #29 VodoleY, задача ТС собрать промежуточный код, фильтруя "хвосты" примитивов гавнопрота. но в прежних билдах активно юзалась стрела пирса., отсюда ветвления. для статичесого сбора. надо знать структуру и обработку ленты, для динамики выходом из цикла только передача управления с ресторе контекста цпу. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 18 декабря 2017 00:06 · Поправил: Boostyq · Личное сообщение · #30 Bronco пишет: VodoleY, задача ТС собрать промежуточный код, фильтруя "хвосты" примитивов гавнопрота. но в прежних билдах активно юзалась стрела пирса., отсюда ветвления. для статичесого сбора. надо знать структуру и обработку ленты, для динамики выходом из цикла только передача управления с ресторе контекста цпу. На данный момент удалось дойти до конца, трейсер прошел все ветви Нет уверенности, что все верно, так же видно и очевидные ошибки Получилось около 50.000 строк ассемблера, при это всего 5 вызовов апи внутри, при этом известные мне приемы занимают всего около 8.000 строк Некоторые приемы обфускации понятны, убрать все руками реально Но такой большой объем всего для одной функции, слишком дорого делать вручную Пока не знаю, что дальше делать ----- В облачке многоточия |
|
Создано: 18 декабря 2017 00:58 · Поправил: dosprog · Личное сообщение · #31 |
<< . 1 . 2 . 3 . 4 . 5 . 6 . >> |
eXeL@B —› Протекторы —› Статическая трассировка кода |