herm1t LIVE!ng room - LDE на исключениях [entries|archive|friends|userinfo]
herm1t

[ website | twilight corner in the herm1t's cave ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

LDE на исключениях [Oct. 20th, 2011|12:46 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
LinkLeave a comment

Comments:
From:(Anonymous)
Date:November 1st, 2011 - 07:07 am
(Link)
Нужно абсолютные оффсеты в опкодах (например mov [ds:100000h], eax) менять при переносе, то есть добавлять тот же дизассемблер.

Побочные эффекты от исполнения "хитрых" опкодов (STD, CALL, LEAVE, INTO, ...) сводят преимущества метода на нет.

Проще сделать обычный дизассемблер длин.
[User Picture]
From:[info]herm1t
Date:November 1st, 2011 - 08:23 am
(Link)
оффсеты не нужно, нужно пошаманить с сегментными регистрами и включить TF, зайдите на руткитс, там Инди подробно объясняет, что и как нужно делать. но мне действительно проще с обычным дизассемблером, хотя идея с исключениями не лишена своеобразной красоты.
From:(Anonymous)
Date:November 1st, 2011 - 06:58 pm
(Link)
> Нужно абсолютные оффсеты в опкодах (например mov [ds:100000h], eax) менять при переносе, то есть добавлять тот же дизассемблер.

Для чего, если селекторы нулевые и каждое обращение к памяти приводит к #AV ?

> Проще сделать обычный дизассемблер длин.

Не проще. В добавок кроме этого движка больше нет способа тестить ваш.
From:(Anonymous)
Date:November 1st, 2011 - 07:01 pm
(Link)
> Побочные эффекты от исполнения "хитрых" опкодов (STD

Они нормально обрабатываются, только инструкции изменяющие Ss и Esp отдельно обрабатываются, изза немного кривого ядра(нет механизма восстановления стека). В ядре такая обработка не нужна.

> Потому, что переключения контекста.

Этого вы не замечаете, в секунду поток свопится сотни раз(примерно 10%13 прерываний на квант).
[User Picture]
From:[info]herm1t
Date:November 2nd, 2011 - 12:24 pm
(Link)
> Этого вы не замечаете, в секунду поток свопится сотни раз(примерно 10%13
> прерываний на квант).

Возможно, что под пингвином доставка сигналов более тяжелый процесс, я _вижу_, как оно тормозит, но это опять-таки не суть. Я готов стать (не на долго) на вашу точку зрения и признать, что это самый крутой способ дизассемблирования (мне это не очень сложно, потому что я охотно признаю преимущества данного метода, и когда я писал свой YAD, часть инструкций проверял именно так - исполнял и ловил сигналы), но вообще, меня больше интересует другой вопрос: что и как делать с выхлопом дизассемблера, особенно вопросы оптимизации, а не дизасм сам по себе. Как хозяин бложека, я настоятельно рекомендую всем анонимам переместиться с темой дизасма, предложенного Indy, на rootkits.su.
From:(Anonymous)
Date:November 2nd, 2011 - 07:28 pm
(Link)
> Как хозяин бложека, я настоятельно рекомендую всем анонимам переместиться с темой дизасма, предложенного Indy, на rootkits.su

Это мой сайт, я туда давно переместился, но вас там не видно и мой ответ проигнорирован. Значит будем тут обсуждать.

> > прерываний на квант).

На квант. Это значит что в секунду сотни квантов и это в юзермоде нельзя контролировать, так что говорить про эффективность бессмысленно. Это имеет смысл если миллиарды инструкций будут обрабатываться. Реально это ником не нужно, конечно если вы не иду пишите :)
Этот вопрос рассмотрен подробно на аверлабе когдато был, все понли что вся оптимизация закончится на вызове какой либо апи, ибо таже LoadLibrary() будет работать много дольше чем ваш код. Кто не понял выпали в осадок.

> меня больше интересует другой вопрос: что и как делать с выхлопом дизассемблера, особенно вопросы оптимизации

Делать - зарегать в ядре стаб, например KiDebugRoutine, создать пользовательский тред и юзать лде. Это кода почти ничего, если вас интересует оптимизация по размеру. Нет прав - дык без прав и нет малварки.

Дайте конкретный результат профайлинга, без этого утверждать чтолибо глупо. Вы должны понять, что отладочный порт замедляет обработку исключений в дестки тысяч раз, посему сравнивать производительность под отладчиком бессмысленно.
[User Picture]
From:[info]herm1t
Date:November 3rd, 2011 - 09:01 am
(Link)
> но вас там не видно и мой ответ проигнорирован.

я не стал участвовать в обсуждении, но, afair, я вас поблагодарил и принял ваши рекомендации к сведению. у меня просто сейчас довольно много дел.

> Дайте конкретный результат профайлинга

Если вы настаиваете, то я сделаю тест, но как тут подсказывает другой аноним (и это совпадает с моими субъективными ощущениями), SEH работает быстрее, чем signal delivery.

> если вас интересует оптимизация по размеру

не интересует. меня интересует статический анализ, декомпиляция и ре-компиляция, преобразование дизасма во что-то осмысленное, с чем в дальнейшем можно было бы работать. я знаю, как это делается, но хотелось бы все тщательно обдумать, чтобы не сфейлить.
From:(Anonymous)
Date:November 3rd, 2011 - 12:41 pm
(Link)
> Если вы настаиваете, то я сделаю тест

Я не настаиваю, просто интересен результат. У меня получилось следующее(Ip/s - инструкций в секунду):
Без отладчика, дефолтный приоритет, аффинитет 11B, P4/XP: ~28850 Ip/s.
Под олли v1.10: 20 Ip/s.

Для VirxAsm32b тест: 551250 Ip/s, это в ~19 раз быстрее чем через фолты.
[User Picture]
From:[info]herm1t
Date:November 3rd, 2011 - 01:06 pm
(Link)
Под Линуксом (в юзерспейсе) получается полный П (мегабайт нопов):
(сигналы)
real 0m4.711s
user 0m0.667s
sys 0m2.517s
(YAD)
real 0m0.261s
user 0m0.202s
sys 0m0.008s
И это при том, что YAD тяжелее, чем LDE и вариант с сигналами реализован не полностью, если добавить обработку TF и работу с сегментами, то будет совсем плохо.
[User Picture]
From:[info]herm1t
Date:November 3rd, 2011 - 01:09 pm
(Link)
P.S. обратите внимание на "sys"
P.P.S. естественно вызовы mmap, mprotect и signal вызывались однократно.
From:(Anonymous)
Date:November 3rd, 2011 - 01:37 pm
(Link)
А вы посмотрите на __send_signal. Там сплошные спинлоки, аллокаторы, шедулинг и прочий пиздец. И сравните с обработчиками исключений в винде. Которые просто устанавливают нужный контекст для обработки SEH.
From:(Anonymous)
Date:November 3rd, 2011 - 06:36 pm
(Link)
Что вы анон всё про сех. Это юзермодный механизм, фолт же ядро хэндлит. Формирует т-фрейм, вызывает дебуггер(если есть), иначе сразу возвращает управление. Как в линупсах никому не известно.
From:(Anonymous)
Date:November 4th, 2011 - 08:50 am
(Link)
> Это юзермодный механизм, фолт же ядро хэндлит.
Вы сами себе противоречите.

> Как в линупсах никому не известно.
Только тем, кто не может заглянуть в исходники ядра.
From:(Anonymous)
Date:November 3rd, 2011 - 06:34 pm
(Link)
> мегабайт нопов

Скорость обработки нопов: ~591450 Ip/s. VirXasm32 - 8.4M Ip/s.

По мойму линупс дерьмо. Вообще зачем там лде, если есть сурс ?
[User Picture]
From:[info]herm1t
Date:November 4th, 2011 - 09:23 am
(Link)
> По мойму линупс дерьмо. Вообще зачем там лде, если есть сурс ?

Давайте не будем устраивать холивор на ровном месте. К примеру, для меня альтернатива юниксам - это совсем не Windows, а что-то еще более экзотическое. Если я в винде даже 802.1q не могу поднять, то как мне там вообще работать? Поэтому и прочие увлечения у меня связаны с юниксами. Зачем LDE? Опять-таки, поймите, мир он большой и интересный, помимо ядра винды и руткитов есть еще множество задач. Меня интересует не копание в ядре (от него действительно есть сурс, и есть даже небольшой опыт его переписывания), а автоматическое преобразование уже скомпилированных программ. В самом общем виде эта задача не имеет отношения не только к ядру, но и к аппаратуре. Поэтому линуксовый юзермод меня вполне устраивает. А LDE? Отчего бы не попробовать красивую идею? Для моих же целей LDE не нужен, нужен парсер инструкций и он у меня давно имеется.
From:(Anonymous)
Date:December 3rd, 2011 - 12:35 pm
(Link)
> для меня альтернатива юниксам - это совсем не Windows

NT альтернативы не имеет. Все левые поделки, дырявые линупсы, маки, солярки етц. созданы школьниками. Там нет архитектуры. Это набор костылей(с сигналами вы уже знакомы). Чемто напоминает КФ, такойже несуразный бред, причина которого портабельность. На данный момент человечество не создала более кошерную ось чем NT.

> автоматическое преобразование уже скомпилированных программ

ARCE, вам необходим декомпилятор. Но далее возникает вопрос - имея декомпилятор, что вы с ним будите делать ?

> Для моих же целей LDE не нужен, нужен парсер инструкций и он у меня давно имеется.

Базовый граф создаётся посредством лде. Что то более сложное требует полноценного дизасма. Базовый граф позволяет решать сложные задачи, например на руткитсах NXSEH. Иным путём сие не решается. У инде сейчас по сути задача одна - ARCE для поиска уязвимостей в ядре и атоматической генерации сплоита.
[User Picture]
From:[info]herm1t
Date:December 3rd, 2011 - 06:42 pm
(Link)
> NT альтернативы не имеет

Толсто. :-) Я бы даже объяснил, почему я не могу (и не хочу) использовать виндовс, но вы ведь все равно не станете меня слушать. Респект вам за упорство, но иногда упорство переходит в упертость.

> что вы с ним будите делать ?

Менять программу и компилировать ее заново.

> Базовый граф позволяет решать сложные задачи

Которые пытаетесь решить вы, а не я.
From:(Anonymous)
Date:November 2nd, 2011 - 08:44 pm
(Link)
Тормозит из-за медленности доставки сигналов в Linux. Винда с ее SEH доставляет исключения быстрее.