Сейчас на форуме: bartolomeo, -Sanchez-, morgot (+3 невидимых) |
eXeL@B —› Софт, инструменты —› Дизасм. |
<< . 1 . 2 . 3 . 4 . >> |
Посл.ответ | Сообщение |
|
Создано: 24 октября 2016 12:21 · Поправил: difexacaw · Личное сообщение · #1 Здрасте. Необходим быстрый, очень быстрый дизассемблер x86. Должен уметь определить длину инструкции и размер адресуемой памяти(eg: inc dword [eax] -> 4байта). Есть множество всяких разных, но обычно они весьма толстые, либо не поддерживают определение размера данных. Свой делать пока нет времени. Нужен если не с этой фичей, то хотя бы дизасм длин. Тот который я юзаю не профайл. ----- vx |
|
Создано: 02 ноября 2016 04:54 · Личное сообщение · #2 |
|
Создано: 02 ноября 2016 05:09 · Поправил: dosprog · Личное сообщение · #3 |
|
Создано: 02 ноября 2016 05:28 · Личное сообщение · #4 sen Поток стандартных инструкций обрабатывает норм в общем случае. Смотрите, тест на 50k инструкций не выдал не одной ошибки. Тот же тест на другой версии нт обнаружил ошибку - системный код(ntdll): 0F C7 F6(раскодируйте сами что за инструкция). Вот и результат - анстаб даже на стандартном коде. В аттаче тестовик. f49d_02.11.2016_EXELAB.rU.tgz - lkit.rar ----- vx |
|
Создано: 02 ноября 2016 05:40 · Личное сообщение · #5 |
|
Создано: 02 ноября 2016 05:55 · Личное сообщение · #6 dosprog Как минимум дизасм должен быть стабильным, к примеру тот же virxasm на тестах с рандом буферами крутился днями в поисках ошибок. Но он не раскодирует simd(что не существенно для меня, так как сабж в данном случае необходим для динамики, но так как этот мотор используется в конструкторе, то возникнет ошибка, если встретится такая инструкция, это относится и к тесту выше). ----- vx |
|
Создано: 02 ноября 2016 07:35 · Поправил: dosprog · Личное сообщение · #7 |
|
Создано: 03 ноября 2016 04:05 · Личное сообщение · #8 |
|
Создано: 03 ноября 2016 07:37 · Поправил: dosprog · Личное сообщение · #9 Вообще-то, неверное определение длины не есть гуд, тут дизассемблер должен вести себя как реальный процессор, ведь иначе следующая за неверной инструкцией команда уже будет раскодирована неверно. Впрочем, если использовать библиотеку, то никто не возбраняет, увидев бит bInvalidOpcode, провести дополнительную проверку и определение длины ошибочной инструкции самостоятельно. |
|
Создано: 03 ноября 2016 10:01 · Поправил: awlost · Личное сообщение · #10 VodoleY пишет: У Криса есть статья, взлом через покрытие кода. Там как раз рассматривались внутренние хардварные бряки, которые есть у некоторых интелов. Интересно интересно. Где почитать? Дело в том, что те варианты статьи что выдает гугл, ничего про "внутренние хардварные бряки некоторых интелов" не содержат. ps Технология "через покрытие" чисто академическая Code:
или Code:
(и еще несколько десятков комбинаций) и привет |
|
Создано: 03 ноября 2016 18:16 · Личное сообщение · #11 sen > ты обнаружил что Dila не знает 0FC7F6, хотя она об этом честно сообщает битом bInvalidOpcode, но зачем утруждаться проверкой. Какая разница каким образом мотор сообщил об этом, его же не перезапустишь никак, или быть может есть скрытые возможности и есчо к этому нужно почитать список, необходимых фиксов - такое не годится. Да и профайл у него не фонтан, так что этот не рассматривается. > Там как раз рассматривались внутренние хардварные бряки, которые есть у некоторых интелов. Наверно имеется ввиду раскрытый дебаг механизм в камнях интела. Но подробности я не помню, так как оно не актуально. awlost Опишите подробно, вообще не понятно что вы думаете. ----- vx |
|
Создано: 04 ноября 2016 02:05 · Личное сообщение · #12 |
|
Создано: 04 ноября 2016 02:29 · Личное сообщение · #13 shellstorm Почему, в примере AAA/Jz - ааа не изменяет ZF, только AF & CF. Поэтому это просто отложенное ветвление, так например не всегда следует ветвление за инструкцией, которая изменяет флажки, это например из за оптимизации по профайлу: Code:
С чем в таком случае проблема может возникать не представляю. Если с анализом кода, то дизасм возвращает маски по флагам(изменяемые, используемые), тот же mediana или bea к примеру. Понятие разрыва графа обычно весьма туманно, это например ссылка не на начало инструкции, корреляция в структуре графа, такая проблема возникает из за не корректной его структуры - привязка описателя инструкции не к её началу, а к диапазону адресов. ----- vx |
|
Создано: 04 ноября 2016 03:23 · Поправил: shellstorm · Личное сообщение · #14 difexacaw пишет: Почему, в примере AAA/Jz - ааа не изменяет ZF, только AF & CF. Вы меня не правильно поняли, я не о выше написанном примере писал, а в целом о трейсере Криса, в нем архитектурная проблема была и заключалась в разрыве графа, попросту проскакивал ветви, деталей уже не помню, это было еще во времена когда он в "хакер" писал. К самому "code coverage" в целом не имеет отношения. Сейчас народ начал уже статические инструменты щупать (SBI) начал, а DBI уже давно отточенная и рабочая техника. Правда хорошего и публичного SBI нет, тот же |
|
Создано: 04 ноября 2016 04:26 · Поправил: difexacaw · Личное сообщение · #15 shellstorm В PEBIL юзается udis86, потестим Через эмуляцию трассировка приводит к множеству проблем, к примеру что делать при системном вызове ? - эмулировать его, что ровно сделать не получится, нужно заюзать масштабную вм, типо вайна. - выгрузить контекст в процессор и напрямую исполнить, тогда получается динамическая эмуляция и смысл основной пропадает/становится проблемной по множеству дальнейших причин(тогда придётся и всё ап эмулировать, что коррелирует с прямым исполнением). Ну и основная проблема в таком случае с профайлом, столь толстая обработка не даст приложению вообще работать. К примеру не получится при трассировке гуя напечатать текст - ввода не будет, так как всё будет висеть. ----- vx |
|
Создано: 04 ноября 2016 04:56 · Личное сообщение · #16 difexacaw пишет: к примеру что делать при системном вызове ? Подобное обычно не требуется, посмотрите доки с векторами атак на многострадальный flash player. Вбейте в google: taint analysis flash player, обычно все приличные техники на нем отрабатывают, решето же. Допустим есть function_sample, туда передаются какие то параметры и направляем вектор не на все приложение, а только на эту функцию, закидываем параметры пока условие не выполнится (fuzzing), это один из самых простых юз.кейсов, когда нужны системные вызовы, то пробрасывают мост для обработки в реальной среде или же используют виртуализацию\эмулятор типа qemu. В общем все зависит от задачи, а если кто то забивает гвозди головой, то проблема не в молотке. |
|
Создано: 04 ноября 2016 05:05 · Личное сообщение · #17 |
|
Создано: 04 ноября 2016 05:18 · Поправил: shellstorm · Личное сообщение · #18 difexacaw пишет: Там немного иное, работа с изолированной функцией, а не запуск приложения что бы работало Почему же иное, например в том же pin тупо пробрасывают мост через callback и in\out context. Полный контроль можно получить лишь при полной эмуляции, но скорость будет, как в соседнем треде, запустил и можно заниматься своими делами. Что касается скорости, все зависит от того, как часто запускать, так то можно обогнать реальное исполнение, собственно jit компиляторы это успешно делают за счет кэширования, поэтому софт на c# жрет там много памяти. Небольшой код, там наглядно показан механизм Добавлю еще pdf. |
|
Создано: 04 ноября 2016 10:01 · Поправил: VodoleY · Личное сообщение · #19 awlost пишет: Интересно интересно. Где почитать? блин.. спецом просидел пол часа в гугле.. не смог найти тут статью.. в целом суть этого метода что введены были новые инструкции для дебага.. но естественно что они работают на ринг 0 и из юзер мода недоступны, поэтому там писался кривенький драйвер.. опять же.. на новых осях проблема его подписать или работать в тест моде.. НО .. приемущества которые он дает имхо интересные.. т.е остановка на "разрывах графов" вот поэтому меня чет аналогия с покрытием всплыла.. ЗЫ. я могу ошибаться.. но эти инструкции вроде еще и идут в разреде недокументированных ЗЫЫ дата публикации была гдето год два назад, когда крис представлял взлом оси через баги в процах ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 05 ноября 2016 07:15 · Поправил: dosprog · Личное сообщение · #20 |
|
Создано: 05 ноября 2016 08:20 · Личное сообщение · #21 dosprog практически оно.. точнее да, это от криса, да это про MSR регистры, но вроде была более расширенная статья, и именно использование этих регистров для взлом через покрытия. По крайней мере у меня так в памяти отложилось. ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 07 ноября 2016 18:46 · Поправил: difexacaw · Личное сообщение · #22 VodoleY Вы искали андок механизмы, это интеловская фича, на некоторых ресурсах это обсуждали давно, не давно кто то использовал технологии профайлинга для CFG(снятие лога по выборке из памяти). Почему не используется хадрверное переключение задач - профайл низкий, этот механизм является рудиментарным. Так же вы должны понимать что переключение мода, r3 -> r0 очень медленная операция из за множества проверок безопасности, трансляции адресов и прочих железячных фич. Но после такого переключения выполняется тяжёлый трап процессинг, после чего управление через загрузку контекста и есчо одно переключение мода возвращается на хэндлер ловушек. Такая обработка слишком медленна, динамическая эмуляция быстрее более чем в сто раз. Да и в целом зачем упоминать эти механизмы, если они предназначены для других целей. ----- vx |
|
Создано: 18 декабря 2016 21:36 · Личное сообщение · #23 |
|
Создано: 19 декабря 2016 01:22 · Личное сообщение · #24 |
|
Создано: 26 февраля 2017 07:24 · Личное сообщение · #25 по поводу трассировки только по командам управления в windbg есть даже специальная команда для этого - ph "ph (Step to Next Branching Instruction) The ph command executes the program until any kind of branching instruction is reached, including conditional or unconditional branches, calls, returns, and system calls. " |
|
Создано: 27 февраля 2017 02:25 · Поправил: difexacaw · Личное сообщение · #26 bartolomeo Не знаю какое отношение это имеет к данной теме. LBR механизм интересен как общая идея. Практически же ось данный механизм не поддерживает. Говорили что на какой то новой платформе введены флажки в дебаг регистры(MSR отображаются на DR), которые позволяют запустить из юм данный механизм. Но нужно понимать что это только дебаг механизм, так при обработке ловушки железо выполняет кучу проверок, из за чего тайминг становится крайне низким. Единственное что по этому механизму интересно - как в виндбг именуются команды. Судя по всему это рандом символы и что бы их запомнить все, нужно годами это юзать, ну что бы запилилось в память.. ----- vx |
|
Создано: 27 февраля 2017 03:54 · Личное сообщение · #27 |
|
Создано: 27 февраля 2017 04:02 · Личное сообщение · #28 bartolomeo Данный механизм для этого не пригоден. Включить в км нельзя, можно установить ловушки и выполнить обработку. То что это работает в отладчиках, в том же виндбг - сам механизм ловушек поддерживается полноценно ядром(KDR). Соответственно из этого фильтра можно что угодно обработать. Но опять же это очень медленный механизм. > для выделения базовых блоков - которые можно копировать и строить себе там граф Есть такое понятие как атомы. Это изолированная выборка данных, которую нельзя обработать не из текущей среды(режима), своего рода софтверный анклав. Поэтому для полноценной обработки код должен выполняться в том же моде, что и целевой код. Иначе данные теряются. Поэтому больший уровень привилегий для данной задачи это проблема как не странно. ----- vx |
|
Создано: 25 июля 2017 11:44 · Личное сообщение · #29 |
|
Создано: 01 августа 2017 18:43 · Личное сообщение · #30 |
|
Создано: 02 сентября 2017 08:45 · Личное сообщение · #31 Breaking the x86 Instruction Set реально интересное видео как чел фаззит (ищет) недок. x86 команды, анализирует разные движки дизасма, спеки, доки, еррата процов, что он нашел, баги в камнях, в софте (включая ИДА и VS)... + в конце он накопал проблему типа Pentium 0xF00F (правда деталей не рассказал) https://www.youtube.com/watch?v=KrksBdWcZgQ вещает на аглицком |
<< . 1 . 2 . 3 . 4 . >> |
eXeL@B —› Софт, инструменты —› Дизасм. |
Эта тема закрыта. Ответы больше не принимаются. |