![]() |
eXeL@B —› Программирование —› ring0 трассировщик и методы реализации |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 23 марта 2009 15:07 · Личное сообщение · #1 Вопрос состогит в следующем: нужно выполнить отладку кода, которыйвыполняется в третьем кольце. Но делать это не стандартными Debug API-функциями, а реализовать драйвер, чтоб задействовать всякие левые, например, зарезервированные, прерывания или редкоиспользуемые, например, всякие int 2Dh и другие (это упоминается как пример - не обязательно его). Так вот, чисто в теории, чтоб отлаживать приложение с помощью таких прерываний, нужно расположить в коде жертвы опкоды этих самых прерываний, далее изменить DPL этого прерывания на троечку, чтоб не генерировался эксепшн, далее выполнить перехват этого прерывания на свой обработчик в дровине, и, когда происходит это прерывание, выполнять нужные действия: дамп, правку жертвы в памяти, или же просто лог вести. Но вот в чём проблема - можно ли это делать с зарезервированными прерываниями? Если можно, то после перехвата и обработки данных моим фильтром куда передавать управление? И если мой олбработчик срабатывает, то в контексте какого процесса: процесса-жертвы или System? ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 28 марта 2009 10:50 · Поправил: Demon666 · Личное сообщение · #2 Archer пишет: Ну и стоить иметь в виду многоядерные/многопроцессорные тачки, тут код поменяется мало. И про х64-а тут вообще работать не будет. Просто лично я не вижу особого смысла писать софт под медленно, но верно подыхающую платформу. Зачетная мессага +500 ЗЫ: сейчас натив на прямую(через "int..") юзать(не зная для [..] кодов) вместо win32 – это вообще жесть, натив был актуален для злавредов в прошлом веке, а сейчас это вообще просто учебное пособие %)) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 28 марта 2009 11:16 · Личное сообщение · #3 |
|
Создано: 28 марта 2009 12:41 · Личное сообщение · #4 Clerk Гы-гы, ты обиделся чтоле? Я ж подколол просто ;) Я вот просто не пойму(думаю что и многие тоже - ИМХО) че ты с этим нативом возишься Оно то бесспорно интересно, но нелогично пипец как.. у тебя все как-то кусками сделано(теряеццо среди мяса), сделай чтоле библу типа как ntpatch – было же гуд(всем нравилось), че бросил идею непонятно.. ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 28 марта 2009 13:17 · Поправил: Clerk · Личное сообщение · #5 Demon666 Чёго мне обижаццо то ? Одного не пойму, зачем ты этот комент впёр, точно подкалоть наверно.. И про нэйтив вроде тут ничего не скозал. А насчёт нэйтив - это родной для системы интерфейс, тут недавно про псапи топик был, предложили грузить psapi.dll Но передать управление LoadLibrary() это значит передать управление вникуда. И только чтоб какойто сервис заюзоть, который напрямую вызвать можно. Винапи это высокоуровневая оболочка, крайне нестабильная разбухшая и не удобная. > у тебя все как-то кусками сделано(теряеццо среди мяса) Ты это про что ? Я уже не пишу ничего, что требует какието сторонние модуля, самодостаточный пикод, даже там где это не нужно. Выработался стиль, очень гибкий и удобный. К импортам какоето отвращение.. Но это не с пустого места возникло, выполняя различные хитрые манипуляции с системой, чтобы чтото обойти, направить обработку данных по пути отличному от нормального и пр. неизбежно подобный стиль будет выработан, иначе многие задачи не решить, либо они решаются черезжопными способами. Как пример кряки мэмберов этого форума - какаято элементарно обходимая защита, антитрейс взятый из какогото мана, писанного человеком, который и сути антиотладки не понял, ибо не знает поведение системы глубже чем необходимо. А данный топик - мышление автора, тоесть его подход к задаче в корне не верный. И вообще причём тут я не понятно, вроде дебаггер обсуждали. ![]() |
|
Создано: 28 марта 2009 15:25 · Личное сообщение · #6 Clerk пишет: мышление автора, тоесть его подход к задаче в корне не верный Так, давайте сначала. Как трассировать с помощью int 3? Очень просто, дизасмим жертву, лепим опкод, он срабатывает, восстанавливаем старый опкод, дизасмим дальше, лепим опкод на следующую команду, продолжаем выполнение и т.д. Медленно, непроизводительно, но это НЕ ОСНОВНАЯ ЗАДАЧА ![]() ![]() ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 28 марта 2009 15:37 · Личное сообщение · #7 ARCHANGEL > И в чём проблемма, если код на PASSIVE_LEVEL Так я же говорю что нет проблемы. > Как трассировать с помощью int 3? Ответ - никак. Ты можешь сделоть жалкое подобие виртуальной машины, но в реальной системе этим врятле что сможешь продебажить. Во первых потому что не удастся найти адрес следующей инструкции. ![]() |
|
Создано: 28 марта 2009 15:40 · Личное сообщение · #8 |
|
Создано: 28 марта 2009 16:08 · Личное сообщение · #9 |
|
Создано: 28 марта 2009 19:00 · Поправил: Demon666 · Личное сообщение · #10 Clerk пишет: Я уже не пишу ничего Не заметил, как ты выкладывал кодес на паблик, так и продолжаешь его выкладывать.. Clerk пишет: что требует какието сторонние модуля, самодостаточный пикод, даже там где это не нужно я писал не про сторонние модули, а про ntpatch где все функции у тебя были в одной библе – было похоже что-то на psapi, imagehlp, etc.. только от тебя кстати насчет того топика, Clerk пишет: топик был, предложили грузить psapi.dll если ты про этот http://exelab.ru/f/action=vthread&forum=6&topic=14093 есть же в паблике исходники от этой библы psapi вот копипаст из нее Code:
Можно просто тупо пойти на http://www.google.com/codesearch Там вбить в строку GetProcessMemoryInfo и из появившегося там вверху выбрать из Попробуйте также: GetProcessMemoryInfo lang:pascal И там уже пошарить по этим исходникам.. если не совсем деревянный, то нагуглить можно значительно больше, сталобыть и кодить ничего не надо, просто тупо гуано-копипаст %))) Clerk пишет: Винапи это высокоуровневая оболочка, крайне нестабильная разбухшая и не удобная. "ахтунги из Microsoft к примеру считают" ;) что винапи – это в первую очередь оболочка над совместимостью версий винды, если вызвал VirtualProtect, то это значит что он везде будет VirtualProtect, и не надо думать в какой ОС и под каким номером тот или иной "syscall".. VirtualProtect->VirtualProtectEx->NtProtectVirtualMemory->"XPSPn 89h", etc.. Clerk пишет: Ты это про что ? Сделай сборничег всех своих исходников что на паблик постил и залей куда-нибудь на постоянку - будет гуд, нежадничай ;) Clerk пишет: вроде дебаггер обсуждали это не дебагер, дебагер так не обсуждают ;) где-то на васме хз. когда-то(что-то похожее) Дилеринк создавал топег, че-то там со стариком возня какая-то была и если память не изменяет он там даже кодес какой-то выкладывал – тоже че-то с рингом0 воевал.. сейчас точно уже и не помню.. короче захочет-поможет %;)) хотя тут теория чтоле, если так можно это назвать, а нужно практическое что-то показывать/обсуждать - ИМХО ЗЫ: выделяешь текст, который хочешь процитировать в посте, и в этом же посте жмешь на кнопку "цитата" что находится возле даты.. (джаваскрипт должен быть включен..) Создано: 28 марта 2009 15:40:33 Цитата Личное сообщение #8 ;)) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 28 марта 2009 20:31 · Личное сообщение · #11 |
|
Создано: 29 марта 2009 06:13 · Личное сообщение · #12 Demon666 Я не про то вобщем. У меня тоже сурцы есть, на крайний случай можно в реактосе глянуть. Касательно трассировщика я тоже начал его писать(на VT кстати проект), пару месяцев назад, кстати не первый раз уже. Но нормальный, посредстом TF. Оказалось столько подводных камней и нюансов, что я ушёл в размышления.., прекратив кодить его. Думаю продолжу через пару недель. Чтобы исполнить полноценную трассировку нужно полядра пропатчить, чтоб работало как нужно и кучу чего перехватить, причём не экспортируется. Использовать жесткий останов перед исполнением каждой инструкции не имеет смысла, нужно использовать #DB исключение, тут два варианта - аппаратный останов, либо пошаговый. Первый вариант не получится использовать если код сам использует аппаратные точки останова. Нужно EFlags.TF заюзать. Короче больше у меня по теме впечатлений нет. ![]() |
|
Создано: 29 марта 2009 11:09 · Личное сообщение · #13 Clerk пишет: Оказалось столько подводных камней и нюансов, что я ушёл в размышления.. Тоже когда-то было такое, но я почти сразу отказался от такого метода, вот сейчас получается становлюсь наблюдателем со стороны, ну или как-то так.. Трейсер имеет узкую направленность применения(там где действительно нужен), но значительно сокращает время реверса(я бы сказал в бОльшие разы) ну и показывает то, что обычный юзверь будет реверсить очень долго и нудно..(ну и плюсадинЪ, контроль конечно же) Но тут самое важное надо заранее знать на чем его сразу тестить, чтобы потом код не переписывать или даже полностью всю технику не менять – ИМХО Как делал писать не буду, потому что хочется увидеть вот что у тебя в итоге получится Я потратил чистого времени на написание кода где-то около месяца в течении года.. ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 14 апреля 2009 14:37 · Личное сообщение · #14 Вот созрел такой банальный вопрос. Я собрал драйвер, который на моей системе прекрасно работает и всё чудесно, но он для своей работы использует несколько функций из ntoskrnl.exe, адреса которых при загрузке драйвера записываются в его таблицу импорта. Но при переносе драйвера в другую ОС может оказаться так, что ntoskrnl.exe будет иметь другое имя, например, из-за включенной РАЕ, а в таблице импорта моего драйвера имя жестко пропитано. Может ли это вызывать какие-то проблемы? Если да, то какие? ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 14 апреля 2009 15:02 · Личное сообщение · #15 |
|
Создано: 14 апреля 2009 17:21 · Личное сообщение · #16 Продолжая тему ядерного перехвата, созрел такой вопрос. Есть нехорошее по, которое посредством API перезагружает комп, либо делает завершение сеанса. Это - очень нехорошо, и хочется с помощью драйвера перехватит в ядре какой-нибудь сервис, и некоторым программкам разрешать эти действия, а некоторому грязнопузому ![]() ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 14 апреля 2009 18:12 · Личное сообщение · #17 |
|
Создано: 14 апреля 2009 18:14 · Личное сообщение · #18 |
|
Создано: 14 апреля 2009 18:21 · Личное сообщение · #19 |
|
Создано: 14 апреля 2009 18:21 · Поправил: ARCHANGEL · Личное сообщение · #20 |
|
Создано: 14 апреля 2009 20:09 · Личное сообщение · #21 |
|
Создано: 14 апреля 2009 21:57 · Личное сообщение · #22 Я бы дал, но пока нечего, как только что-то стоящее у меня получится, то выложу, конечно, мне не жалко. Какой смысл это скрывать, всё равно ж ничего нового тут не изобреталось, так что че прятать-то? Но последние 2 вопроса касаются другого драйвера, я тут спросил, чтоб темы не плодить, тем более, что и для темы топика эти вопросы важны ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 15 апреля 2009 00:41 · Личное сообщение · #23 |
|
Создано: 19 апреля 2009 21:48 · Поправил: n00b4s · Личное сообщение · #24 |
|
Создано: 19 апреля 2009 23:45 · Личное сообщение · #25 KeEnterKernelDebugger(), KdEnableDebugger(), KdInitSystem() etc, копать в этом направлении, в реактос сурцы есть. Там траблы будут с портами я не лез в эти дебри. Это полностью изменит поведение системы. Например при переключении между кольцами защиты будут сохраняться отладочные регистры(-> KPCR.DebugActive) и пр. Некоторые моменты оттуда я использовал вручную, полностью запускать это нет смысла. Это использует виндбг для удалённой отлаки. ![]() |
|
Создано: 20 апреля 2009 00:13 · Личное сообщение · #26 |
|
Создано: 20 апреля 2009 00:16 · Личное сообщение · #27 Не знаю кстати, может ты копал подробнее, но KPCR.DebugActive на скока я помню когда копался в дизасме ядра, это что-то вроде маски. это не BOOL, который говорит что KD is presented. Например когда работаешь с windbg as far as i remember DRы совсем необязательно сохраняются. Они начинают соxраняться например когда ты в обработчике исключения изменяешь DR регистры. В DebugActive устанавливается какое-то значение и он начинает сохраняться при составлении ktrap_frame. Давно копал может ошибаюсь в чем-то ![]() |
|
Создано: 20 апреля 2009 01:06 · Личное сообщение · #28 wrk\base\ntos\ke\i386\trap.asm и kimacro.inc там всё есть. В моём понимании отладчик это не инструмент в данном случае, а совокупность механизмов, переключение в контексте отладочных регистров один из таких механизмом. По теме - вчера выложили док files.virustech.org/indy/Teory/SwapContext/vt_swapctx_model.pdf Не представляю как это трассировщик может обойти.. ![]() |
<< . 1 . 2 . |
![]() |
eXeL@B —› Программирование —› ring0 трассировщик и методы реализации |