eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: strannyi, alexsey007
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

Ранг: 255.4 (наставник)
Статус: Участник

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

Здрасте.

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

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

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

Ранг: 39.4 (посетитель)
Статус: Участник

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

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

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

Ранг: 392.6 (мудрец)
Статус: Участник

Создано: 2 ноября 2016 05:09 · Поправил: 2 ноября 2016 05:22 dosprog New!
Цитата · Личное сообщение · #3

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


Ранг: 255.4 (наставник)
Статус: Участник

Создано: 2 ноября 2016 05:28 New!
Цитата · Личное сообщение · #4

sen

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

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

{ Атач доступен только для участников форума } - lkit.rar

Ранг: 392.6 (мудрец)
Статус: Участник

Создано: 2 ноября 2016 05:40 New!
Цитата · Личное сообщение · #5

difexacaw пишет:
0F C7 F6


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

Ранг: 255.4 (наставник)
Статус: Участник

Создано: 2 ноября 2016 05:55 New!
Цитата · Личное сообщение · #6

dosprog

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

Ранг: 392.6 (мудрец)
Статус: Участник

Создано: 2 ноября 2016 07:35 · Поправил: 2 ноября 2016 07:36 dosprog New!
Цитата · Личное сообщение · #7

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


Ранг: 39.4 (посетитель)
Статус: Участник

Создано: 3 ноября 2016 04:05 New!
Цитата · Личное сообщение · #8

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

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

Ранг: 392.6 (мудрец)
Статус: Участник

Создано: 3 ноября 2016 07:37 · Поправил: 3 ноября 2016 07:53 dosprog New!
Цитата · Личное сообщение · #9

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

Ранг: 30.5 (посетитель)
Статус: Участник

Создано: 3 ноября 2016 10:01 · Поправил: 3 ноября 2016 11:42 awlost New!
Цитата · Личное сообщение · #10

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

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

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

или
Code:
  1. MUL
  2. JPO

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

Ранг: 255.4 (наставник)
Статус: Участник

Создано: 3 ноября 2016 18:16 New!
Цитата · Личное сообщение · #11

sen

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

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

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

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

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

awlost

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

Ранг: 0.0 (гость)
Статус: Участник

Создано: 4 ноября 2016 02:05 New!
Цитата · Личное сообщение · #12

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

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

Ранг: 255.4 (наставник)
Статус: Участник

Создано: 4 ноября 2016 02:29 New!
Цитата · Личное сообщение · #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 к примеру.

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

Ранг: 0.0 (гость)
Статус: Участник

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

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

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

Ранг: 255.4 (наставник)
Статус: Участник

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

shellstorm

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

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

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

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

Ранг: 0.0 (гость)
Статус: Участник

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

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

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

Ранг: 255.4 (наставник)
Статус: Участник

Создано: 4 ноября 2016 05:05 New!
Цитата · Личное сообщение · #17

shellstorm

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

Ранг: 0.0 (гость)
Статус: Участник

Создано: 4 ноября 2016 05:18 · Поправил: 4 ноября 2016 05:47 shellstorm New!
Цитата · Личное сообщение · #18

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

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

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 4 ноября 2016 10:01 · Поправил: 4 ноября 2016 10:02 VodoleY New!
Цитата · Личное сообщение · #19

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

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

Ранг: 392.6 (мудрец)
Статус: Участник

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

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

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


Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 5 ноября 2016 08:20 New!
Цитата · Личное сообщение · #21

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

Ранг: 255.4 (наставник)
Статус: Участник

Создано: 7 ноября 2016 18:46 · Поправил: 7 ноября 2016 18:47 difexacaw New!
Цитата · Личное сообщение · #22

VodoleY

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

Ранг: 33.3 (посетитель)
Статус: Участник

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

__https://intelxed.github.io

Ранг: 255.4 (наставник)
Статус: Участник

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

redlord

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

Ранг: 25.7 (посетитель)
Статус: Участник

Создано: 26 февраля 2017 07:24 New!
Цитата · Личное сообщение · #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. "

Ранг: 255.4 (наставник)
Статус: Участник

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

bartolomeo

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

Ранг: 25.7 (посетитель)
Статус: Участник

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

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

Ранг: 255.4 (наставник)
Статус: Участник

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

bartolomeo

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

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

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

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

Ранг: 300.0 (мудрец)
Статус: Участник

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

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

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


Ранг: 255.4 (наставник)
Статус: Участник

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

Veliant

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

Ранг: 507.2 (!)
Статус: Модератор

Создано: 2 сентября 2017 08:45 New!
Цитата · Личное сообщение · #31

Breaking the x86 Instruction Set

реально интересное видео как чел фаззит (ищет) недок. x86 команды, анализирует разные движки дизасма,
спеки, доки, еррата процов,
что он нашел, баги в камнях, в софте (включая ИДА и VS)... + в конце он накопал проблему типа Pentium 0xF00F (правда деталей не рассказал)

https://www.youtube.com/watch?v=KrksBdWcZgQ
вещает на аглицком
<< . 1 . 2 . 3 . 4 . >>
 eXeL@B —› Софт, инструменты —› Дизасм.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS