Сейчас на форуме: hgdagon (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› Аппаратная виртуализация |
. 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 29 июля 2007 15:10 · Личное сообщение · #1 На новых процах есть такая тема, на атлонах пасифика, на интелах вандерпул, вроде. Хотел узнать, кто что может посоветовать почитать на эту тему. Отлаживать с этой фиговиной просто рай, никто ничего не запалит в принципе, бряки, смещения времени, ничего не запалить. Было у меня в далёких планах перевести QuickUnpack на это дело. Но чего-то не нашёл ничего на эту тему, кроме мануалов интеловских, а там чёрт ногу сломит. Рано ещё этим интересоваться, только пришло это дело, но вдруг у кого что есть, только весьма желательно чо-нить внятное, может примеры. В общем, чо-нить полезное. Заранее всем спасибо. ![]() ![]() |
|
Создано: 29 июля 2007 16:24 · Личное сообщение · #2 |
|
Создано: 29 июля 2007 18:14 · Личное сообщение · #3 |
|
Создано: 29 июля 2007 19:00 · Личное сообщение · #4 Sly Ass Скажу честно, я не гуру в этом деле и не знаю её как свои 5 пальцев, но насколько мне известно, она аппаратно делалась как раз с тем прицелом, чтобы программы даже не догадывались, что работают в паре с чем-то ещё. n0name Если будет хороший пример, будет огромный респект, ибо эта виртуализация весьма перспективное для ревёрсинга дела и хотел её осваивать. А насчёт доков, может и хватает, но надо сидеть и курить их, а они немаленькие, времени нужно немало, чтобы их поднять, хотел как-то ускорить этот процесс. ![]() ![]() |
|
Создано: 29 июля 2007 20:56 · Личное сообщение · #5 |
|
Создано: 29 июля 2007 20:59 · Личное сообщение · #6 |
|
Создано: 29 июля 2007 21:03 · Личное сообщение · #7 |
|
Создано: 29 июля 2007 21:20 · Поправил: Archer · Личное сообщение · #8 |
|
Создано: 29 июля 2007 21:37 · Личное сообщение · #9 |
|
Создано: 29 июля 2007 21:47 · Личное сообщение · #10 |
|
Создано: 29 июля 2007 22:01 · Личное сообщение · #11 |
|
Создано: 29 июля 2007 22:26 · Личное сообщение · #12 |
|
Создано: 30 июля 2007 01:56 · Личное сообщение · #13 |
|
Создано: 30 июля 2007 03:25 · Личное сообщение · #14 Gideon Vi пишет: не верится. не представляю себе принцип такого метода, которому бы нельзя было эффективно противодействовать имея под рукой сабж Способ номер раз - обнаружение прерываний виртуализатора: Код виртуализатора имеет ненулевой размер. Он должен обязательно обрабатывать некоторые события (такие как чтение EFER MSR). Обработка таких событий прерывает исполнение guest кода, и код гипервизора вытесняет код гвеста из кеша процессора, что приводит в изменениям таймингов исполнения которые НЕВОЗМОЖНО корректно подправить, даже имея возможность перехвата rdtsc. Способ номер два - обнаружение перехвата rdtsc: При перехвате rdtsc гипервизор может корректировать тайминги так, чтобы удалить из них время исполнения сквоего кода, но есть ситуации когда правильно изменить тайминги невозможно. К примеру, у меня выполняется последовательность комманд которая хорошо параллелиться процессором. В этом случае время исполнения последовательности целиком будет меньше суммы времен исполнения ее комманд по отдельности. Если это время померять с помощью rdtsc, то при его перехвате произойдет сброс конвеера процессора и время выполнения измениться. Гипервизор исправить это не может принципиально, потому что невозможно определить, на какую величину надо корректировать результаты. ![]() |
|
Создано: 30 июля 2007 11:50 · Личное сообщение · #15 |
|
Создано: 30 июля 2007 12:52 · Личное сообщение · #16 Нашёл неплохую статейку и в тему rootkit.com/newsread.php?newsid=758 Только там написано, что паблик релиз покоцаный. Отсюда вопрос, кто-нибудь там зареган и имеет ли доступ глянуть, есть ли там где-нить непокоцаный релиз. И второе, даже этот покоцаный я не нашёл, где слить с сорцами. ![]() ![]() |
|
Создано: 30 июля 2007 13:04 · Личное сообщение · #17 Sly Ass, а реализовать? ViSoR правильно отметил: ViSoR пишет: это эмпирический вариант, причём зависящий от процессора, то есть он может давать ложные срабатывания и эти ложные срабатывания обязательно будут. Знаешь, как далеко пошлют автора такого прота? Посмотри на экзекриптор: кол-во софта под ним и его среднюю цену. ![]() |
|
Создано: 30 июля 2007 14:27 · Личное сообщение · #18 Gideon Vi пишет: ложные срабатывания Ложные срабатывания зависят от кривости реализации. А идея неплохая ![]() ЗЫ: аттач с руткиткома: ![]() ----- Research is my purpose ![]() |
|
Создано: 30 июля 2007 16:01 · Личное сообщение · #19 |
|
Создано: 30 июля 2007 16:27 · Поправил: Error_Log · Личное сообщение · #20 Gideon Vi пишет: а вот как противодействовать - голая теория. Хорошо оттестить методику детекта. Ну а противодействовать просто - делаем force reboot из драйвера и все ![]() ![]() Gideon Vi пишет: реализуй так, чтобы небыло ложных срабатываний я протами не занимаюсь, ну а в руткитах такое в ближайшее время врядли появится, поскольку процессоры с поддержкой даных фич еще не очень распространены. ----- Research is my purpose ![]() |
|
Создано: 30 июля 2007 17:11 · Поправил: W[4Fh]LF · Личное сообщение · #21 Sly Ass пишет: НЕВОЗМОЖНО корректно подправить, даже имея возможность перехвата rdtsc. Sly Ass пишет: потому что невозможно определить, на какую величину надо корректировать результаты. Стало быть и замерить корректно невозможно. Ну даже если ты установишь рамки таймингов с большой точностью для всех процессоров, то столкнувшись с такой защитой по случаю, можно легко её обойти(ну стяну я таблицу таймингов из твоего приложения, перехвачу rdtsc и буду править резалты в соотв. с твоими данными) имея такой инструмент в руках, как Hardware Virtualization. ![]() |
|
Создано: 30 июля 2007 18:23 · Личное сообщение · #22 W[4Fh]LF пишет: Стало быть и замерить корректно невозможно. Ну даже если ты установишь рамки таймингов с большой точностью для всех процессоров, то столкнувшись с такой защитой по случаю, можно легко её обойти(ну стяну я таблицу таймингов из твоего приложения, перехвачу rdtsc и буду править резалты в соотв. с твоими данными) имея такой инструмент в руках, как Hardware Virtualization. А ты сначала стяни, если код хорошо заметаморфлен. З.Ы. в плане отладки юзермодных приложений виртуализация не предоствляет постуни никаких кардинально новых возможностей. Обойти все существующие средства антиотладки единим и универсальным способом можно и без нее. ![]() |
|
Создано: 30 июля 2007 18:34 · Поправил: tnt17 · Личное сообщение · #23 Sly Ass пишет: К примеру, у меня выполняется последовательность комманд которая хорошо параллелиться процессором Можно явно указать процессор, на котором должен выполняться код, и в этом случае никакого распаралелливания не будет. ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... ![]() |
|
Создано: 30 июля 2007 19:04 · Личное сообщение · #24 tnt17 пишет: Можно явно указать процессор, на котором должен выполняться код, и в этом случае никакого распаралелливания не будет. насколько я понял, речь идёт о суперскалярности. Sly Ass пишет: А ты сначала стяни, если код хорошо заметаморфлен. Да кого это остановит при большой необходимости. Это не аргумент. К тому же, я не знаю всех особенностей, может и метод твой не рабочий. В теории оно ещё более или менее сносным выглядит. А на практике будет миллион костылей. А к кому побегут юзеры с разогнанными процессорами или с теми, которых в твоей базе не будет? Нет, этот метод может работать, но практического применения для детекта не получит, слишком много условностей. Имхо. ![]() |
|
Создано: 30 июля 2007 19:06 · Личное сообщение · #25 Sly Ass пишет: З.Ы. в плане отладки юзермодных приложений виртуализация не предоствляет постуни никаких кардинально новых возможностей. Обойти все существующие средства антиотладки единим и универсальным способом можно и без нее. И способ этот работает пока недокументирован или это концептуальная идея? ![]() |
|
Создано: 30 июля 2007 19:30 · Личное сообщение · #26 W[4Fh]LF пишет: Да кого это остановит при большой необходимости. Это не аргумент. Хороший метаморф почти кого угодно остановит. Если так уверен что не остановит, могу тебе сделать крякми ![]() W[4Fh]LF пишет: к кому побегут юзеры с разогнанными процессорами При разгоне процессора число тиков на команду не меняется. W[4Fh]LF пишет: Нет, этот метод может работать, но практического применения для детекта не получит, слишком много условностей. Имхо. Думаете это единственный метод? Хрен то там. W[4Fh]LF пишет: И способ этот работает пока недокументирован или это концептуальная идея? Кому надо, про эту идею знают, так что на паблик распостраняться не буду. З.Ы. еще один пиздатый способ наебать виртуализацию - при метаморфинге кода вставлять дофига инструкций которые гипервизор обязан эмулить. При нормальном исполнении кода все будет работать быстро, а под виртуализатором просто помрет от тормозов нахрен. ![]() |
|
Создано: 30 июля 2007 19:37 · Личное сообщение · #27 |
|
Создано: 30 июля 2007 19:49 · Поправил: W[4Fh]LF · Личное сообщение · #28 Sly Ass пишет: Хороший метаморф почти кого угодно остановит. Если так уверен что не остановит, могу тебе сделать крякми ) Одно дело, когда ты мне сделаешь крякми, а другое дело, когда в этом будет заинтересовано(материально в том числе) всё сообщество. Если эти значения будет сложно выдрать их можно будет подобрать. Ты же прекрасно понимаешь, что это всего навсего оттянет время. На полноценный способ детекта не тянет. Sly Ass пишет: При разгоне процессора число тиков на команду не меняется. Да, здесь я погорячился ![]() Sly Ass пишет: Думаете это единственный метод? Хрен то там. Думаю, что все эти методы ничего не стоят. Ибо VMM прицнипиально работает на другом уровне. Но это в теории, опять же, вероятно на практике что-нибудь будет придумано. Sly Ass пишет: З.Ы. еще один пиздатый способ наебать виртуализацию - при метаморфинге кода вставлять дофига инструкций которые гипервизор обязан эмулить. При нормальном исполнении кода все будет работать быстро, а под виртуализатором просто помрет от тормозов нахрен. Это уже не метод детекта. ![]() |
|
Создано: 30 июля 2007 21:35 · Поправил: BlindChaos · Личное сообщение · #29 Код виртуализатора имеет ненулевой размер. Он должен обязательно обрабатывать некоторые события (такие как чтение EFER MSR). Обработка таких событий прерывает исполнение guest кода, и код гипервизора вытесняет код гвеста из кеша процессора, что приводит в изменениям таймингов исполнения которые НЕВОЗМОЖНО корректно подправить, даже имея возможность перехвата rdtsc. это нежизнеспособный способ, из-за того, что неизвестно, как точно реализован кэш в конкретном проце. Алгоритмы выборки ячеек кэша при замещении по идее аппаратно-зависимы и с очень большой вероятностью могут быть кардинально изменены в будущих процах. Даже на конкретной системе это может быть головной болью в заднице, особенно учитывая многоуровневость кэша и то, что многое о его реализации неизвестно. Вот еще 2 ситуации на рассмотрение: - кэш целиком и полностью выключен (помнится, раньше можно было прямо в биосовском сетапе вырубать) - VMM вместе со всем говном располагается в некэшируемой памяти и не вызывает никаких замещений строк кэша При перехвате rdtsc гипервизор может корректировать тайминги так, чтобы удалить из них время исполнения сквоего кода, но есть ситуации когда правильно изменить тайминги невозможно. К примеру, у меня выполняется последовательность комманд которая хорошо параллелиться процессором. В этом случае время исполнения последовательности целиком будет меньше суммы времен исполнения ее комманд по отдельности. Если это время померять с помощью rdtsc, то при его перехвате произойдет сброс конвеера процессора и время выполнения измениться. Гипервизор исправить это не может принципиально, потому что невозможно определить, на какую величину надо корректировать результаты. этот способ еще менее жизнеспособнее, чем вариант с кэшем, т.к., во-первых, реализация конвейеров в разных процах тоже сильно отличается друг от друга и 100% будет отличаться в будущем, во-вторых, даже в отдельно взятой реализации код выполняется довольно непредсказуемо, плохо сгруппированные команды из-за нюансов конвейеризации в некоторых ситуациях могут вообще выполняться дольше по времени, чем соответствующие одиночные. Особенно на каких-нибудь P4 с их длинными конвеерами, реплеями и прочими побочными эффектами несбывшихся надежд. их Этот метод еще требует перемежать код вызывающими VMM командами, а большинство команд, которые ему имеет смысл хукать - serializing instructions (mov crX, mov drX, cpuid, etc.). Эти методы могли использоваться еще хз сколько лет назад, в качестве, например, противодействия трейсеру в протах, но никто их никогда даже и не пытался использовать, что тоже не говорит в их пользу... ![]() |
|
Создано: 30 июля 2007 23:58 · Поправил: Sly Ass · Личное сообщение · #30 W[4Fh]LF пишет: Одно дело, когда ты мне сделаешь крякми, а другое дело, когда в этом будет заинтересовано(материально в том числе) всё сообщество. Если эти значения будет сложно выдрать их можно будет подобрать. Ты же прекрасно понимаешь, что это всего навсего оттянет время. На полноценный способ детекта не тянет. А хуй ты их подберешь если сделать по уму. К примеру производиться более 1000 замеров в случайном порядке. Ну а защита кода от реверсинга - необходимое условие существования любого протектора. Практика показывает, что протекторы не пренебрегающие этим условием никто так нормально и не сломал. Хотя собственно таких протекторов всего два... BlindChaos пишет: это нежизнеспособный способ, из-за того, что неизвестно, как точно реализован кэш в конкретном проце. Конкретных процев с виртуализацией сущствует всего 2 типа. Не так уж и много. W[4Fh]LF пишет: Думаю, что все эти методы ничего не стоят. Ибо VMM прицнипиально работает на другом уровне. Плохо думаешь. Вкурсе что кроме собственно процессора есть еще и железо, в котором дожеппы напихано всяких там таймеров? Начиная от системного таймера, и заканчивая таймером по которому шлет прерывания звуковуха. Вот тебе и методы измерения правильных таймингов. Только не надо ля-ля что их все можно проэмулить. Хуй то там, есть различные hardvare specific хреновины. BlindChaos пишет: - VMM вместе со всем говном располагается в некэшируемой памяти и не вызывает никаких замещений строк кэша Заебись же это все будет тормозить... W[4Fh]LF пишет: Это уже не метод детекта. А похуй. Если под отладчиком запуска проги надо будет ждать час, то это знаешь ли очень и очень обидно ![]() ![]() |
. 1 . 2 . 3 . >> |
![]() |
eXeL@B —› Программирование —› Аппаратная виртуализация |