Сейчас на форуме: tyns777, zds, JustLife (+4 невидимых)

 eXeL@B —› Программирование —› ring0 трассировщик и методы реализации
<< . 1 . 2 .
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 23 марта 2009 15:07
· Личное сообщение · #1

Вопрос состогит в следующем: нужно выполнить отладку кода, которыйвыполняется в третьем кольце. Но делать это не стандартными Debug API-функциями, а реализовать драйвер, чтоб задействовать всякие левые, например, зарезервированные, прерывания или редкоиспользуемые, например, всякие int 2Dh и другие (это упоминается как пример - не обязательно его). Так вот, чисто в теории, чтоб отлаживать приложение с помощью таких прерываний, нужно расположить в коде жертвы опкоды этих самых прерываний, далее изменить DPL этого прерывания на троечку, чтоб не генерировался эксепшн, далее выполнить перехват этого прерывания на свой обработчик в дровине, и, когда происходит это прерывание, выполнять нужные действия: дамп, правку жертвы в памяти, или же просто лог вести. Но вот в чём проблема - можно ли это делать с зарезервированными прерываниями? Если можно, то после перехвата и обработки данных моим фильтром куда передавать управление? И если мой олбработчик срабатывает, то в контексте какого процесса: процесса-жертвы или System?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 28 марта 2009 10:50 · Поправил: Demon666
· Личное сообщение · #2

Archer пишет:
Ну и стоить иметь в виду многоядерные/многопроцессорные тачки, тут код поменяется мало. И про х64-а тут вообще работать не будет. Просто лично я не вижу особого смысла писать софт под медленно, но верно подыхающую платформу.

Зачетная мессага +500
ЗЫ: сейчас натив на прямую(через "int..") юзать(не зная для [..] кодов) вместо win32 – это вообще жесть, натив был актуален для злавредов в прошлом веке, а сейчас это вообще просто учебное пособие %))

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 28 марта 2009 11:16
· Личное сообщение · #3

Demon666
> сейчас натив на прямую(через "int..") юзать(не зная для [..] кодов) вместо win32 – это вообще жесть, натив был актуален для злавредов в прошлом веке, а сейчас это вообще просто учебное пособие %))
Жесть его не юзать, а зловреды винапи юзали в прошлом веке и те что щас его юзают гуано



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 28 марта 2009 12:41
· Личное сообщение · #4

Clerk
Гы-гы, ты обиделся чтоле? Я ж подколол просто ;)
Я вот просто не пойму(думаю что и многие тоже - ИМХО) че ты с этим нативом возишься
Оно то бесспорно интересно, но нелогично пипец как..
у тебя все как-то кусками сделано(теряеццо среди мяса), сделай чтоле библу типа как ntpatch – было же гуд(всем нравилось), че бросил идею непонятно..

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 28 марта 2009 13:17 · Поправил: Clerk
· Личное сообщение · #5

Demon666
Чёго мне обижаццо то ?
Одного не пойму, зачем ты этот комент впёр, точно подкалоть наверно..
И про нэйтив вроде тут ничего не скозал. А насчёт нэйтив - это родной для системы интерфейс, тут недавно про псапи топик был, предложили грузить psapi.dll Но передать управление LoadLibrary() это значит передать управление вникуда. И только чтоб какойто сервис заюзоть, который напрямую вызвать можно. Винапи это высокоуровневая оболочка, крайне нестабильная разбухшая и не удобная.
> у тебя все как-то кусками сделано(теряеццо среди мяса)
Ты это про что ?
Я уже не пишу ничего, что требует какието сторонние модуля, самодостаточный пикод, даже там где это не нужно. Выработался стиль, очень гибкий и удобный. К импортам какоето отвращение..
Но это не с пустого места возникло, выполняя различные хитрые манипуляции с системой, чтобы чтото обойти, направить обработку данных по пути отличному от нормального и пр. неизбежно подобный стиль будет выработан, иначе многие задачи не решить, либо они решаются черезжопными способами.
Как пример кряки мэмберов этого форума - какаято элементарно обходимая защита, антитрейс взятый из какогото мана, писанного человеком, который и сути антиотладки не понял, ибо не знает поведение системы глубже чем необходимо. А данный топик - мышление автора, тоесть его подход к задаче в корне не верный.
И вообще причём тут я не понятно, вроде дебаггер обсуждали.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 28 марта 2009 15:25
· Личное сообщение · #6

Clerk пишет:
мышление автора, тоесть его подход к задаче в корне не верный
Так, давайте сначала. Как трассировать с помощью int 3? Очень просто, дизасмим жертву, лепим опкод, он срабатывает, восстанавливаем старый опкод, дизасмим дальше, лепим опкод на следующую команду, продолжаем выполнение и т.д. Медленно, непроизводительно, но это НЕ ОСНОВНАЯ ЗАДАЧА Контрольная сумма, да, это неприятно, поэтому будем ничего с ней не делать. Да, именно ничего, т.к. цель, которую мы будем этим способом трассировать, контрольные суммыне сверяет. Зачем тогда лезть в ядро? Это будет что-то типа учебного проекта И в чём проблемма, если код на PASSIVE_LEVEL выполняется, вот если б DISPATCH, тогда нельзя файловые операции, например, юзать, а так чего нельзя?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 28 марта 2009 15:37
· Личное сообщение · #7

ARCHANGEL
> И в чём проблемма, если код на PASSIVE_LEVEL
Так я же говорю что нет проблемы.
> Как трассировать с помощью int 3?
Ответ - никак. Ты можешь сделоть жалкое подобие виртуальной машины, но в реальной системе этим врятле что сможешь продебажить. Во первых потому что не удастся найти адрес следующей инструкции.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 28 марта 2009 15:40
· Личное сообщение · #8

Clerk
Скажем, не не удастся, а будет работать нестабильно, т.е. не будет работать с антидизассемблерными конструкциями. Да, это грустно, зато детектить наномиты эта красота будет на ура

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 28 марта 2009 16:08
· Личное сообщение · #9

ARCHANGEL
Ну не обязательно, если код будет находится в разделяемой памяти, как ты такое будешь дебажить ?



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 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:
  1. BOOL
  2. WINAPI
  3. GetProcessMemoryInfo (
  4.   HANDLE hProcess,
  5.   PPROCESS_MEMORY_COUNTERS ppsmemCounters,
  6.   DWORD cb
  7.   )
  8. /*++
  9. Routine Description:
  10.   This function returns all the PSVM_COUNTERS for a process.
  11. Arguments:
  12.   hProcess - Handle for the process being queried.
  13.   ppsmemCounters - Points to buffer that will receive the PROCESS_MEMORY_COUNTERS.
  14.   cb - size of ppsmemCounters
  15. Return Value:
  16.   The return value is TRUE or FALSE.
  17. --*/
  18. {
  19.   NTSTATUS Status;
  20.   VM_COUNTERS VmCounters;
  21.   // Try to feel if the ptr passed is NULL and if not,
  22.   // is it long enough for us.
  23.   try {
  24.          ppsmemCounters->PeakPagefileUsage = 0;
  25.         }
  26.   except (EXCEPTION_EXECUTE_HANDLER) {
  27.         SetLastError( RtlNtStatusToDosError( GetExceptionCode() ) );
  28.         return(FALSE);
  29.         }
  30.   if (cb < sizeof(PROCESS_MEMORY_COUNTERS)) {
  31.     SetLastError( ERROR_INSUFFICIENT_BUFFER );
  32.     return(FALSE);
  33.     }
  34.   Status = NtQueryInformationProcess(
  35.                 hProcess,
  36.                 ProcessVmCounters,
  37.                 &VmCounters,
  38.                 sizeof(VM_COUNTERS),
  39.                 NULL
  40.                 );
  41.   if ( !NT_SUCCESS(Status) )
  42.   {
  43.    SetLastError( RtlNtStatusToDosError( Status ) );
  44.    return( FALSE );
  45.   }
  46.   ppsmemCounters->cb                       = sizeof(PROCESS_MEMORY_COUNTERS);
  47.   ppsmemCounters->PageFaultCount           = VmCounters.PageFaultCount;
  48.   ppsmemCounters->PeakWorkingSetSize       = VmCounters.PeakWorkingSetSize;
  49.   ppsmemCounters->WorkingSetSize           = VmCounters.WorkingSetSize;
  50.   ppsmemCounters->QuotaPeakPagedPoolUsage  = VmCounters.QuotaPeakPagedPoolUsage;
  51.   ppsmemCounters->QuotaPagedPoolUsage      = VmCounters.QuotaPagedPoolUsage;
  52.   ppsmemCounters->QuotaPeakNonPagedPoolUsage= VmCounters.QuotaPeakNonPagedPoolUsage;
  53.   ppsmemCounters->QuotaNonPagedPoolUsage  = VmCounters.QuotaNonPagedPoolUsage;
  54.   ppsmemCounters->PagefileUsage    = VmCounters.PagefileUsage;
  55.   ppsmemCounters->PeakPagefileUsage        = VmCounters.PeakPagefileUsage;
  56.   return(TRUE);
  57. }

Можно просто тупо пойти на 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





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 28 марта 2009 20:31
· Личное сообщение · #11

а у когонить не завалялось случаем The Kernel PatchFinder исходники + статья в пдфе и презинтация , последняя версия 2.11 была на руткит ком доступна. Но ее уже там тоже нет. Все пропало или зачищено ...

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 29 марта 2009 06:13
· Личное сообщение · #12

Demon666
Я не про то вобщем. У меня тоже сурцы есть, на крайний случай можно в реактосе глянуть.

Касательно трассировщика я тоже начал его писать(на VT кстати проект), пару месяцев назад, кстати не первый раз уже. Но нормальный, посредстом TF. Оказалось столько подводных камней и нюансов, что я ушёл в размышления.., прекратив кодить его. Думаю продолжу через пару недель. Чтобы исполнить полноценную трассировку нужно полядра пропатчить, чтоб работало как нужно и кучу чего перехватить, причём не экспортируется.
Использовать жесткий останов перед исполнением каждой инструкции не имеет смысла, нужно использовать #DB исключение, тут два варианта - аппаратный останов, либо пошаговый. Первый вариант не получится использовать если код сам использует аппаратные точки останова. Нужно EFlags.TF заюзать.
Короче больше у меня по теме впечатлений нет.



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 29 марта 2009 11:09
· Личное сообщение · #13

Clerk пишет:
Оказалось столько подводных камней и нюансов, что я ушёл в размышления..

Тоже когда-то было такое, но я почти сразу отказался от такого метода, вот сейчас получается становлюсь наблюдателем со стороны, ну или как-то так..
Трейсер имеет узкую направленность применения(там где действительно нужен), но значительно сокращает время реверса(я бы сказал в бОльшие разы) ну и показывает то, что обычный юзверь будет реверсить очень долго и нудно..(ну и плюсадинЪ, контроль конечно же)
Но тут самое важное надо заранее знать на чем его сразу тестить, чтобы потом код не переписывать или даже полностью всю технику не менять – ИМХО
Как делал писать не буду, потому что хочется увидеть вот что у тебя в итоге получится
Я потратил чистого времени на написание кода где-то около месяца в течении года..

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 14 апреля 2009 14:37
· Личное сообщение · #14

Вот созрел такой банальный вопрос. Я собрал драйвер, который на моей системе прекрасно работает и всё чудесно, но он для своей работы использует несколько функций из ntoskrnl.exe, адреса которых при загрузке драйвера записываются в его таблицу импорта. Но при переносе драйвера в другую ОС может оказаться так, что ntoskrnl.exe
будет иметь другое имя, например, из-за включенной РАЕ, а в таблице импорта моего драйвера имя жестко пропитано. Может ли это вызывать какие-то проблемы? Если да, то какие?

-----
Stuck to the plan, always think that we would stand up, never ran.




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

Создано: 14 апреля 2009 15:02
· Личное сообщение · #15

С импортом проблем точно не будет.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 14 апреля 2009 17:21
· Личное сообщение · #16

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

-----
Stuck to the plan, always think that we would stand up, never ran.




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

Создано: 14 апреля 2009 18:12
· Личное сообщение · #17

NtShutdownSystem?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 14 апреля 2009 18:14
· Личное сообщение · #18

Погляди хуки HideToolz через любой антируткит, он не даёт ребутать.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 14 апреля 2009 18:21
· Личное сообщение · #19

С перезагрузкой - ещё полбеды, а вот как противостоять завершению сеанса?

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 14 апреля 2009 18:21 · Поправил: ARCHANGEL
· Личное сообщение · #20

Del

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 14 апреля 2009 20:09
· Личное сообщение · #21

Тоесть можно ждать релизенг ?
Дайте потестить.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 14 апреля 2009 21:57
· Личное сообщение · #22

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

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 15 апреля 2009 00:41
· Личное сообщение · #23

ARCHANGEL пишет:
С перезагрузкой - ещё полбеды, а вот как противостоять завершению сеанса?


Запретить запускать logoff.exe (или logout или как-там-его)

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 апреля 2009 21:48 · Поправил: n00b4s
· Личное сообщение · #24

Clerk пишет:
Регистрация себя как отладчика, но лучше это не делай

А можно вопрос - что для этого нужно сделать?



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 19 апреля 2009 23:45
· Личное сообщение · #25

KeEnterKernelDebugger(), KdEnableDebugger(), KdInitSystem() etc, копать в этом направлении, в реактос сурцы есть. Там траблы будут с портами я не лез в эти дебри. Это полностью изменит поведение системы. Например при переключении между кольцами защиты будут сохраняться отладочные регистры(-> KPCR.DebugActive) и пр. Некоторые моменты оттуда я использовал вручную, полностью запускать это нет смысла. Это использует виндбг для удалённой отлаки.



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 апреля 2009 00:13
· Личное сообщение · #26

А чтобы это использовать нужно запуститься в /DEBUG предварительно?



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 апреля 2009 00:16
· Личное сообщение · #27

Не знаю кстати, может ты копал подробнее, но KPCR.DebugActive на скока я помню когда копался в дизасме ядра, это что-то вроде маски. это не BOOL, который говорит что KD is presented. Например когда работаешь с windbg as far as i remember DRы совсем необязательно сохраняются. Они начинают соxраняться например когда ты в обработчике исключения изменяешь DR регистры. В DebugActive устанавливается какое-то значение и он начинает сохраняться при составлении ktrap_frame. Давно копал может ошибаюсь в чем-то



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 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 трассировщик и методы реализации
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати