Сейчас на форуме: bartolomeo, -Sanchez-, morgot (+3 невидимых)

 eXeL@B —› Софт, инструменты —› Дизасм.
<< . 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 24 октября 2016 12:21 · Поправил: difexacaw
· Личное сообщение · #1

Здрасте.

Необходим быстрый, очень быстрый дизассемблер x86. Должен уметь определить длину инструкции и размер адресуемой памяти(eg: inc dword [eax] -> 4байта).

Есть множество всяких разных, но обычно они весьма толстые, либо не поддерживают определение размера данных. Свой делать пока нет времени.

Нужен если не с этой фичей, то хотя бы дизасм длин. Тот который я юзаю не профайл.

-----
vx




Ранг: 39.6 (посетитель), 21thx
Активность: 0.020
Статус: Участник

Создано: 02 ноября 2016 04:54
· Личное сообщение · #2

пустые тесты не проходили рандом пространства прочего треша - ок, записал: сурц можите

но что мне надо сделать во-вторых и далее по алфавиту, и какие компили норм - остаюсь в недоумении.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 02 ноября 2016 05:09 · Поправил: dosprog
· Личное сообщение · #3

Тут у hiew серьёзный изъян обнаружился, помимо конпиля.
Рыгает от него пипл - и всё из-за консольного интерфейса.






Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 02 ноября 2016 05:28
· Личное сообщение · #4

sen

Поток стандартных инструкций обрабатывает норм в общем случае. Смотрите, тест на 50k инструкций не выдал не одной ошибки. Тот же тест на другой версии нт обнаружил ошибку - системный код(ntdll): 0F C7 F6(раскодируйте сами что за инструкция).

Вот и результат - анстаб даже на стандартном коде. В аттаче тестовик.

f49d_02.11.2016_EXELAB.rU.tgz - lkit.rar

-----
vx




Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 02 ноября 2016 05:40
· Личное сообщение · #5

difexacaw пишет:
0F C7 F6


Ну, это есть такое, да. Хавает только два байта из трёх.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 02 ноября 2016 05:55
· Личное сообщение · #6

dosprog

Как минимум дизасм должен быть стабильным, к примеру тот же virxasm на тестах с рандом буферами крутился днями в поисках ошибок. Но он не раскодирует simd(что не существенно для меня, так как сабж в данном случае необходим для динамики, но так как этот мотор используется в конструкторе, то возникнет ошибка, если встретится такая инструкция, это относится и к тесту выше).

-----
vx




Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 02 ноября 2016 07:35 · Поправил: dosprog
· Личное сообщение · #7

) Чуваг, ты никого ничем не удивишь, пока будешь пытаться взгромоздиться на чужой мотороллер.
Запиши себе где-то на память, чтоб не забыть.





Ранг: 39.6 (посетитель), 21thx
Активность: 0.020
Статус: Участник

Создано: 03 ноября 2016 04:05
· Личное сообщение · #8

difexacaw, поздравляю!
ты обнаружил что Dila не знает 0FC7F6, хотя она об этом честно сообщает битом bInvalidOpcode, но зачем утруждаться проверкой.

по итогу: кривой поделкой оказался тест который проверяет только длину команды, впрочем даже это он делает дваждыкриво.



Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 03 ноября 2016 07:37 · Поправил: dosprog
· Личное сообщение · #9

Вообще-то, неверное определение длины не есть гуд, тут дизассемблер должен вести себя как реальный процессор, ведь иначе следующая за неверной инструкцией команда уже будет раскодирована неверно.
Впрочем, если использовать библиотеку, то никто не возбраняет, увидев бит bInvalidOpcode, провести дополнительную проверку и определение длины ошибочной инструкции самостоятельно.



Ранг: 33.8 (посетитель), 11thx
Активность: 0.020.01
Статус: Участник

Создано: 03 ноября 2016 10:01 · Поправил: awlost
· Личное сообщение · #10

VodoleY пишет:
У Криса есть статья, взлом через покрытие кода. Там как раз рассматривались внутренние хардварные бряки, которые есть у некоторых интелов.

Интересно интересно.
Где почитать?
Дело в том, что те варианты статьи что выдает гугл, ничего про "внутренние хардварные бряки некоторых интелов" не содержат.

ps
Технология "через покрытие" чисто академическая
Code:
  1. AAA
  2. JZ

или
Code:
  1. MUL
  2. JPO

(и еще несколько десятков комбинаций)
и привет




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 03 ноября 2016 18:16
· Личное сообщение · #11

sen

> ты обнаружил что Dila не знает 0FC7F6, хотя она об этом честно сообщает битом bInvalidOpcode, но зачем утруждаться проверкой.

Какая разница каким образом мотор сообщил об этом, его же не перезапустишь никак, или быть может есть скрытые возможности и есчо к этому нужно почитать список, необходимых фиксов - такое не годится.

Да и профайл у него не фонтан, так что этот не рассматривается.

> Там как раз рассматривались внутренние хардварные бряки, которые есть у некоторых интелов.

Наверно имеется ввиду раскрытый дебаг механизм в камнях интела. Но подробности я не помню, так как оно не актуально.

awlost

Опишите подробно, вообще не понятно что вы думаете.

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 04 ноября 2016 02:05
· Личное сообщение · #12

difexacaw пишет: Опишите подробно, вообще не понятно что вы думаете

Граф рвется, собственно подобные недостатки описывает и сам Крис.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 04 ноября 2016 02:29
· Личное сообщение · #13

shellstorm

Почему, в примере AAA/Jz - ааа не изменяет ZF, только AF & CF. Поэтому это просто отложенное ветвление, так например не всегда следует ветвление за инструкцией, которая изменяет флажки, это например из за оптимизации по профайлу:

Code:
  1.          mov Ra,N
  2.          test Rb,Rb
  3.          jz
  4.  
  5.          test Rb,Rb
  6.          mov Ra,N
  7.          jz


С чем в таком случае проблема может возникать не представляю. Если с анализом кода, то дизасм возвращает маски по флагам(изменяемые, используемые), тот же mediana или bea к примеру.

Понятие разрыва графа обычно весьма туманно, это например ссылка не на начало инструкции, корреляция в структуре графа, такая проблема возникает из за не корректной его структуры - привязка описателя инструкции не к её началу, а к диапазону адресов.

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 04 ноября 2016 03:23 · Поправил: shellstorm
· Личное сообщение · #14

difexacaw пишет: Почему, в примере AAA/Jz - ааа не изменяет ZF, только AF & CF.

Вы меня не правильно поняли, я не о выше написанном примере писал, а в целом о трейсере Криса, в нем архитектурная проблема была и заключалась в разрыве графа, попросту проскакивал ветви, деталей уже не помню, это было еще во времена когда он в "хакер" писал. К самому "code coverage" в целом не имеет отношения.
Сейчас народ начал уже статические инструменты щупать (SBI) начал, а DBI уже давно отточенная и рабочая техника.
Правда хорошего и публичного SBI нет, тот же PEBIL скорее игрушка.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 04 ноября 2016 04:26 · Поправил: difexacaw
· Личное сообщение · #15

shellstorm

В PEBIL юзается udis86, потестим

Через эмуляцию трассировка приводит к множеству проблем, к примеру что делать при системном вызове ?

- эмулировать его, что ровно сделать не получится, нужно заюзать масштабную вм, типо вайна.
- выгрузить контекст в процессор и напрямую исполнить, тогда получается динамическая эмуляция и смысл основной пропадает/становится проблемной по множеству дальнейших причин(тогда придётся и всё ап эмулировать, что коррелирует с прямым исполнением).

Ну и основная проблема в таком случае с профайлом, столь толстая обработка не даст приложению вообще работать. К примеру не получится при трассировке гуя напечатать текст - ввода не будет, так как всё будет висеть.

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 04 ноября 2016 04:56
· Личное сообщение · #16

difexacaw пишет: к примеру что делать при системном вызове ?

Подобное обычно не требуется, посмотрите доки с векторами атак на многострадальный flash player.
Вбейте в google: taint analysis flash player, обычно все приличные техники на нем отрабатывают, решето же.
Допустим есть function_sample, туда передаются какие то параметры и направляем вектор не на все приложение, а только на эту функцию, закидываем параметры пока условие не выполнится (fuzzing), это один из самых простых юз.кейсов, когда нужны системные вызовы, то пробрасывают мост для обработки в реальной среде или же используют виртуализацию\эмулятор типа qemu. В общем все зависит от задачи, а если кто то забивает гвозди головой, то проблема не в молотке.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 04 ноября 2016 05:05
· Личное сообщение · #17

shellstorm

Там немного иное, работа с изолированной функцией, а не запуск приложения что бы работало. Тогда понятия профайла не существует.

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 04 ноября 2016 05:18 · Поправил: shellstorm
· Личное сообщение · #18

difexacaw пишет: Там немного иное, работа с изолированной функцией, а не запуск приложения что бы работало

Почему же иное, например в том же pin тупо пробрасывают мост через callback и in\out context.
Полный контроль можно получить лишь при полной эмуляции, но скорость будет, как в соседнем треде, запустил и можно заниматься своими делами.
Что касается скорости, все зависит от того, как часто запускать, так то можно обогнать реальное исполнение, собственно jit компиляторы это успешно делают за счет кэширования, поэтому софт на c# жрет там много памяти.
Небольшой код, там наглядно показан механизм PoC
Добавлю еще pdf. Dynamic Program Analysis of Microsoft Windows Application



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 04 ноября 2016 10:01 · Поправил: VodoleY
· Личное сообщение · #19

awlost пишет:
Интересно интересно.
Где почитать?

блин.. спецом просидел пол часа в гугле.. не смог найти тут статью..
в целом суть этого метода что введены были новые инструкции для дебага.. но естественно что они работают на ринг 0 и из юзер мода недоступны, поэтому там писался кривенький драйвер.. опять же.. на новых осях проблема его подписать или работать в тест моде.. НО .. приемущества которые он дает имхо интересные.. т.е остановка на "разрывах графов" вот поэтому меня чет аналогия с покрытием всплыла..
ЗЫ. я могу ошибаться.. но эти инструкции вроде еще и идут в разреде недокументированных
ЗЫЫ дата публикации была гдето год два назад, когда крис представлял взлом оси через баги в процах

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 431.7 (мудрец), 391thx
Активность: 0.730.32
Статус: Участник

Создано: 05 ноября 2016 07:15 · Поправил: dosprog
· Личное сообщение · #20

--> Не оно? <--

| Сообщение посчитали полезным: awlost, VodoleY, Gideon Vi, DenCoder

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 05 ноября 2016 08:20
· Личное сообщение · #21

dosprog практически оно.. точнее да, это от криса, да это про MSR регистры, но вроде была более расширенная статья, и именно использование этих регистров для взлом через покрытия. По крайней мере у меня так в памяти отложилось.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 07 ноября 2016 18:46 · Поправил: difexacaw
· Личное сообщение · #22

VodoleY

Вы искали андок механизмы, это интеловская фича, на некоторых ресурсах это обсуждали давно, не давно кто то использовал технологии профайлинга для CFG(снятие лога по выборке из памяти).
Почему не используется хадрверное переключение задач - профайл низкий, этот механизм является рудиментарным. Так же вы должны понимать что переключение мода, r3 -> r0 очень медленная операция из за множества проверок безопасности, трансляции адресов и прочих железячных фич. Но после такого переключения выполняется тяжёлый трап процессинг, после чего управление через загрузку контекста и есчо одно переключение мода возвращается на хэндлер ловушек. Такая обработка слишком медленна, динамическая эмуляция быстрее более чем в сто раз. Да и в целом зачем упоминать эти механизмы, если они предназначены для других целей.

-----
vx




Ранг: 33.4 (посетитель), 24thx
Активность: 0.020
Статус: Участник

Создано: 18 декабря 2016 21:36
· Личное сообщение · #23

__https://intelxed.github.io




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 19 декабря 2016 01:22
· Личное сообщение · #24

redlord

Уже тестил --> Link <--

-----
vx




Ранг: 42.8 (посетитель), 16thx
Активность: 0.020.06
Статус: Участник

Создано: 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. "




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 27 февраля 2017 02:25 · Поправил: difexacaw
· Личное сообщение · #26

bartolomeo

Не знаю какое отношение это имеет к данной теме. LBR механизм интересен как общая идея. Практически же ось данный механизм не поддерживает. Говорили что на какой то новой платформе введены флажки в дебаг регистры(MSR отображаются на DR), которые позволяют запустить из юм данный механизм. Но нужно понимать что это только дебаг механизм, так при обработке ловушки железо выполняет кучу проверок, из за чего тайминг становится крайне низким.
Единственное что по этому механизму интересно - как в виндбг именуются команды. Судя по всему это рандом символы и что бы их запомнить все, нужно годами это юзать, ну что бы запилилось в память..

-----
vx




Ранг: 42.8 (посетитель), 16thx
Активность: 0.020.06
Статус: Участник

Создано: 27 февраля 2017 03:54
· Личное сообщение · #27

это можно использовать и в юзермоде - просто чтоб включить его нужно в ринг0 спуститься.
используется как я полагаю для выделения базовых блоков - которые можно копировать и строить себе там граф потока и оптимизировать ББ.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 27 февраля 2017 04:02
· Личное сообщение · #28

bartolomeo

Данный механизм для этого не пригоден.

Включить в км нельзя, можно установить ловушки и выполнить обработку. То что это работает в отладчиках, в том же виндбг - сам механизм ловушек поддерживается полноценно ядром(KDR). Соответственно из этого фильтра можно что угодно обработать. Но опять же это очень медленный механизм.

> для выделения базовых блоков - которые можно копировать и строить себе там граф

Есть такое понятие как атомы. Это изолированная выборка данных, которую нельзя обработать не из текущей среды(режима), своего рода софтверный анклав. Поэтому для полноценной обработки код должен выполняться в том же моде, что и целевой код. Иначе данные теряются. Поэтому больший уровень привилегий для данной задачи это проблема как не странно.

-----
vx




Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 25 июля 2017 11:44
· Личное сообщение · #29

Подниму немного тему.
https://github.com/zyantific/zydis
Кто-нибудь этот дизасм пробовал?

| Сообщение посчитали полезным: kampaster, difexacaw


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 августа 2017 18:43
· Личное сообщение · #30

Veliant

Посмотрю, спасибо. Я использовал связку диза и ксед для раскодировки расширений.

-----
vx




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 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 —› Софт, инструменты —› Дизасм.
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати