вспомнили баянные трюк))) винда определяет наличие отладчика: Код (Text): 7C8630E7 . 57 PUSH EDI ; /pReqsize 7C8630E8 . 6A 04 PUSH 4 ; |Bufsize = 4 7C8630EA . 8D85 DCFEFFFF LEA EAX,DWORD PTR SS:[EBP-124] ; | 7C8630F0 . 50 PUSH EAX ; |Buffer 7C8630F1 . 6A 07 PUSH 7 ; |InfoClass = 7 7C8630F3 . E8 1DADFAFF CALL kernel32.GetCurrentProcess ; |[GetCurrentProcess 7C8630F8 . 50 PUSH EAX ; |hProcess 7C8630F9 . FF15 AC10807C CALL DWORD PTR DS:[<&ntdll.NtQueryInformationProcess>] ; \ZwQueryInformationProcess 7C8630FF . 85C0 TEST EAX,EAX 7C863101 . 0F8C A2000000 JL kernel32.7C8631A9 7C863107 . 39BD DCFEFFFF CMP DWORD PTR SS:[EBP-124],EDI 7C86310D . 0F84 96000000 JE kernel32.7C8631A9 // ;) InfoClass = 7 (DebugPort) тут несколько способов, главное чтобы мы прыгнули... з.ы. помучайте мой плагин для ольги з.ы.ы. есть нескольно багов, которые валят ольгу на раз, два, тока зачем самим закапывать такой хороший инструмент...
Asterix > не важно, после выделения памяти и записи кода > можно поставить атрибут на выделенную память > PAGE_EXECUTE_READ и твой fs-catcher-b уже ничего не ловит это старая версия версия fs-catcher-c и fs-catcher-e все ловят, т.к. секут подмену адреса NtQueryInformationProcess в IAT KRN32 и нужно придумать как накодить плугин так, чтоб его не трогать http://nezumi.org.ru/souriz/fs-catcher-e.zip <-- скачивайте не, мне правда стала интересна война с плугинами Hellspawn с удовольствием помучаю. даже в новой книжке опишу а где плагин?! PROFi > В общественных топиках это не обсуждают. > В конечном счете ломается олька, > только зачем открыто об этом кричать на каждую хитрую.... найдется... а разве не интересно разрабывать anti-anti-anti-anti-anti-отладочные технологии? находить трюки, "палящие" отладчик, обходить их (например, путем плагинов) и тут же писать новые плагины, которые просто так не обойдешь.... в итоге мы получим "непробиваемый" отладчик.... а если мы будем молчать и ныкаться по норам ничего этого не будет....
Hellspawn ага поймал... щас уже поздно и мыщъх выдвигается на топчан, но завтра же буду пытать опишу все в лучшем виде. PROFi > А пилить сук на котором сидишь что касается сук, то я предпочитаю, чтобы они сидели на мне. классическая миссионерская - это изврат, это не для меня. а если говорить серьезно, но я не понимаю почему обсуждение anti-отладочных технологий есть бэд. от этого все только выиграют. тем более я не понимаю, почему это надо делать в "закрытом кругу". если ничего не обсуждать, то не будет никакого прогресса, а будет только мрак. и добывание огня трением. не, ну разве не интересно разрабатывать анти-дебажные трюки и способы их преодоления, а потом способы обхода способов преодоления? и кто пилит сук? что-то я не понимаю...
kaspersky чтоб потом автор экзекриптора вставлял их в свой прот а не получится так что некоторые вещи просто невозможно будет преодолеть в рамках конкретного отладчика, того же OllyDbg ?
Hellspawn хороший у тебя плагин. вот очень простой код (две строки на си http://nezumi.org.ru/souriz/fs-catcher-jag.zip для его детекции с прикладного уровня без использования Nt-фцй так же должен детектить и другие плагины подобного типа... а) от поиска по сигнатурам я отказался; б) проверять адрес NtQueryInformationProcess - тухлое дело; с) короче дописал всего две строки к старому коду кто протестирует его?! и хотя я уже придумал как обломать его но все равно... это противостояние меча и щита получается.... слишком большие затраты на ныканье от антидебага и слишком легко написать антитебаг, ловящий целый класс плагинов. даже тех, что работают в ядре исходник вновь не прилагается по причине того, что кода там... оно и без исходника ясно как это работает а вот как бороться?! Asterix > чтоб потом автор экзекриптора вставлял их в свой прот а он что, туссуется на этом форуме? не знал... и кто же он? ну и вообще, антидебажные трики можно вставлять скажем в малварь или еще куда... к тому же чем сложнее защита... тем интереснее ее ломать >> и способы их преодоления > а не получится так что некоторые вещи просто невозможно > будет преодолеть в рамках конкретного отладчика, того же OllyDbg ? твоя мысль мне понятна, но я совершенно с ней не согласен. получается так. давай _мы_ не будем вести исследования, чтобы _они_ не использовали их против нас ;0) только вот, _они_ тоже ведут исследования. а обнаружить новый трик в коде на несколько метров намного сложнее, чем в моем маленьком мышином "макетнике". кто предупрежден - тот, как говориться, вооружен. какие будут предложения?! в идеале, анти-анти-дебужные плагины не должны палится ну или не палится по тупому... а доработать их - можно у тебя в коде два основного палева, не считая сигнатур. а) ты хачишь IAT KERNEL32.DLL надеясь, что это никто не заметит. а не лучше ли хачить сам код KERNEL32.DLL? конечно, это не универсально, но зато довольно сложно обнаруживается на прикладном уровне (на самом деле обанруживается, конечно, кучей способов). б) ты с Hellspawn'ом передаешь приложению single step exception. а теперь подумай, что произойдет, если мыщъх заюзает его в обработчике необрабатываемого исключ.? правильно - произойдет палево. даже сказать Olly, чтоб он пассил single step'ы отлаживаемой программе, то все равно при пошаговой трассировке мы обнаружим dbg и самое главное! мне бы _очень_ хотелось, чтобы плугины как-то показывали наличие этого самого обработчика и позволяли передать на него управление. а то часть кода выполняется скрытно, что в ряде слчаев очень затрудняет анализ программы... просто офигенно как затрудняет... ну скажем ты выполняшь (в грубом приближении)... 1: mov eax, offset serial_num 2: mov ebx, [eax] 3: cmp ebx, "1234" 4: jxxx xxxx если в DS - нулевой селектор, то при выполнении строки 2 управление получает обработчик, который осуществляет реальную проверку сернума, а ты этого ниxya не видишь, т.к. вообще не знаешь, что между этими двумя командам что-то такое выполняется.... и хотя по дефлоту плагины останавливают отладчик с сообщением от single-step'е, это палит плагин на все 100% и обработчик может это дело засечь, а если передавать исключения программе, что мы хоть и не спалим отладчик, но все равно никак не узнаем, что тут выполняется какой-то код... кстати, при пошаговой трассировке все равно спалимся даже если будем передавать исключения программе. а вы говорите "баянные трюки", если же они такие баянные, то почему до сих пор нет нормального плугина, который бы не палился на пионер на первой хапке?! p.s. это не наезд. я восхищен плагином Hellspawn'а и твоим. вы оба проделали большую и полезную работу, я же всего лишь указываю на ошибки и даже предлагаю пути их фикса вот, файл: http://nezumi.org.ru/souriz/fs-catcher-jag.zip
Hellspawn ок, сьавим галку ignore "single-step breaks". и при пошаговой трассировке (step into/step over - без разницы) трассируем до следующих строк: .00400380: mov [004005B4],ebx .00400386: mov ebx,fs:[00000000] в строке .00400386 возникает исключение и Olly предлагает давить Shift-F7/F8/F9, но что мы не давим - отладчик все равно палится конечно, если нажать F9, то все будет ок... но ведь не все же по F9 сделать можно... иногда необходимо и трассировать, например, для установа бряка на команду, выхода за диапазон EIP.... а как обломать F9 я еще подумаю... а вообще у тебя крутой плагин, мне понравился щас буду описывать его в своей новой книжке по дебагу. http://nezumi.org.ru/souriz/fs-catcher-seo.zip ^^^- это тот же самый файл, только там добавлены строка .00400386: mov ebx,fs:[00000000] чтобы ее было можно трассировать я сам трассировал путем захода в IsDebuggerPresent() трассировка палит отладчик чтобы не возится - нажми Ctrl-F12 (trace over) и увидишь то, о чем я говорю...
про трассировку я знаю))) тока очень редко трассирую в ручную... а если и трассирую, то смотрю внимательно ну плагины трассировочные обламаются конечно. з.ы. дашь почитать то? )) з.ы.ы. я кодил всю ринг3 часть плага, дроф кодил Арчи...
хехе) а кто-то говорил что васм умер, а ннет если через int3 то контролем целостности а если хардвар то затирать регистры контекста ты ж и сам знаешь )
kaspersky нет, ты не понял я хотел сказать что нужно писать спецовый крекерский отладчик, в котором изначально можно многое учесть чтоб потом не прикрывать плагинами "дырки" с таким же успехом могу вместо импорта хукать через экспорт ntdll.dll, но результат по обнаружению будет тем же а это что типа сложно прочекать? ) http://wasm.ru/forum/profile.php?id=3359
Hellspawn > про трассировку я знаю))) тока очень редко трассирую в ручную... тогда нафига тебе Olly? юзай syser мне Olly как раз нравится за возможность автоматической трассировки, при которой он может делать много полезных вещей. бряки на команды и выход EIP за диапазон я уже упоминал. так, что еще? ага, есть плагины, которые ищут определенные строки в регистрах. очччень удобно искать введенное имя пользователя. или вот например, та же автоматическая трассировка позволяет отслеживать возвращение в код, вызывающий форму где вводится имя/пароль, после нажатия на "ОК", что опять-таки делается путем проверки диапазона EIP (хотя вообще-то можно и через бряки на атрибуты страниц...), а вот еще можно вести лог трассировки, кидать в него только jxx и сравнивать логи прогонов программы до и после истечения триала. все это опять-таки требует трассировки... трассировка - мощный инструмент, чтобы полностью от нее отказываться, особенно при изучении критических кусков кода. а иначе как потом писать кейген? не все ведь в ассемблере можно сделать... разве ты не согласен, что зачастую гораздо проще потрейсить программу и посмотреть, что она сделала с данными, чем разбирать код в дизассемблере? ну и потом, F9 я все-таки буду тоже обходить на этот счет у меня есть несколько идей... > з.ы. дашь почитать то? )) ситуация следующая. в ][акере планируется рубрика анти-дебаг, где будут покоцанные статьи на русском, сама книга неспешно пишется на eng, русский вариант (если он и выйдет), будет сильно усеченным. а дать - дам, конечно. когда я свои книги зажимал как я понимаю, твой плагин можно ложить на диск к книге? > з.ы.ы. я кодил всю ринг3 часть плага, дроф кодил Арчи... извини за глупый вопрос - а кто такой Арчи?
написание уже идет. он падает через раз и плюс мне ольга удобнее... с клаба чел просто так затирать маловато, придется и чекать постоянно их, хотя и этого тоже мало. перед нг зарелизю новую версию, там несколько фиксов будет.
Hellspawn по слухам после фантома падает или фризит сама винда, так что тебе не привыкать это должен быть опенсорц проект
а ты больше слущай, падает из-за кривых хуков фаеров и ав (это все пофиксено), но сейчас версия очень стабильная, так что не нада тут з.ы. дык у меня хайдтуулз тоже через раз падает, такова цена хайда... слишком жирно будит...
Asterix > я хотел сказать что нужно писать спецовый крекерский отладчик, > в котором изначально можно многое учесть чтоб потом > не прикрывать плагинами "дырки" а) сейчас я неспешно пишу core-отладчика, который делает inject в процесс и работает с ним изнутри. отладочного процесса при этом не порождается и куча анти-отладочных трюков ес-но не работает, чтобы не писать весь функционал, я планирую поддержать протокол gdb чтобы работать по сети (или локально на компе), еще где-то видел спецификации на протокол ms gdb но потерял ;( буду благодарен, кто кинет в меня ссылкой. т.к. мне реализовать интерфейс не в кайф, а только базовые возможности - чтение/запись регистров/памяти, точки останова, трассировка, etc... объем работы резко уменьшается... б) Wu YanFeng и Chen JunHao, похоже, заинтересованы в сотрудничестве со мной и вроде бы даже готовы делать syser хакерским отладчиком, который хрен обнаружишь а чтобы проект не заглох, буду его продвигать путем описывания в книжках. популяризации продукта так сказать rain > если через int3 то контролем целостности а если хардвар > то затирать регистры контекста ты ж и сам знаешь ) тут все не так просто. плугины перехватывают set-thr-cntx, да с int 03 борются... я пока мыслю в другой плоскости... одна из идей (порочная, конечно) - принудительный вызов NtQueryInformationProcess с нужными мне параметрами. если плагин ее не перехватывает - мы получим один результат, если перехватывает, то другой... но это плохая идея по любому, я сейчас пытаюсь найти что-то системно-независимое... плагиг Hellspawn'а я поймал всего с: ExceptionInfo->ContextRecord->EFlags ^= 0x100; z++; ... if (z < 2) plugin_is_detected; но это работает только при пошаговой трассировке (если конечно в Olly не установлена галочка передачи single step'ов в программу, а по умолчанию она не установлена, так что пионеры по любому обломятся, даже по F9)
ну тогда мне он точно не нужен, как и другие мсремовские поделки типа хайдтулз, который я просто ни разу не использовал из-за отсутствия доверия товарищу афтару
kaspersky надо для начала справку по ольке почитать, потом научиться юзать PSDK, отреверсить отладчик до ощущения, что код ольки знаешь даже лучше самого автора, который написал этот отладчик – и только тогда ВАМ откроется истЕна что вы в теме… согласен с отцом дерматологом жидаобщества и с тем что он написал протЕв!