Всем привет !
Продолжаю изучение «Крякерского мира» гы-гы…
В главе 20-ть возникла печальбеда, Рикардо предложил для изучения антиотладочных механизмов такой неприятный крякми от DaXXoR !
Неприятный он тем, что прочухивает, что он под отладчиком и начинает делать всякие гадости… :(
Ну и сам крякми прикольный, шифрование строк, спрятаны API, ну и там ещё затронута тема с «исключениями», до которой я ещё не дошёл, поэтому цель у меня была обойти защиту от отладки…
К сожалению, т.к. способ который описал автор в мануале у меня незаработал, в частности у меня почему-то неработают плагины, поэтому нужно всё делать в ручную, предлагаю свой вариант решения (Ну разумеется с помощью Рикардо, но немного изменил методу что-бы работало на новых системах, 7-ка и т.д.):
Сразу скажу, что в этом крякми есть два типа защиты:
1)По обнаружению процесса «Oledbg.exe», смысл при запуске обнаруживает процесс и далее закрывает OleDbg, между прочим неочень приятно, т.к. слетают настройки и точки останова…
2)Используется IsDebuggerPresent – Это специальная функция, которая может обнаруживать что программа под отладчиком, в главе 19-ть подробно написано как это работает, не буду писанину разводить…
Если программа под отладкой по этому типу защиты, то крякми разумеется сделает гадость, в данном случае начнёт хаотично в цикле выводить окно «!NotDebugging !» пока программа независнит, вместе с кстати OleDBG, да-блин…
Вот такой проблемдос неожиданно свалился, давайте разбираться, если открыть крякми в оледбг, то сразу видно что защита там не хухры-мухры, т.е. для начала хотя-бы понять какие APIотвечают за защиту, ибо они скрыты от посторонних глаз !
Как говорится в мануале Рикардо, нужно поставить точку останова на АПИ GetProcAddress:
Тогда мы сможем уже увидеть скрытые АПИ, я для себя всегда делаю точки останова на вызове в программе, а не на в модулях винды, т.е. что-бы олле не выходила из нашего крякми…
Начинаем нажимать Run, пока не встретим потенциально-подозрительные API:
Вот они, ога попались…
Вообще нас интересует функа EnumProcesses, эта функция получает IDвсех процессов в системе, у каждого процесса есть свой уникальный номер, этот номер можно посмотреть в диспетчере задач…
А вообще Рикардо в мануале объясняет как эти айди увидить в дампе, но у меня что-то не получилось, да и пофиг смотрим дальше код ниже этих АПИ, можно увидить что-то по важнее, а именно это OpenProcess, вот:
Функция OpenProcess, которая проверяет, работает ли процесс, и если да, то возвращает его хэндл (логический номер).
Хендл, нужен для управления нашим процессом, тут неплохо вспомнить-бы немного кодинг на Делфи или C++ Bulder, кстати крякми на нём и написан ! ;)
Что нужно что-бы реализовать такую защиту:
1)Получить список всех пидов (Уникальный идентификатор процесса в системе);
2)Получить имя модуля, в зависимости от пида;
3)Сравнить и если нужно закрыть процесс;
4)Итак в цикле проверяем процессы в списке, начинаем с пункта два…
OpenProcess как-раз это и делает, там-их два, завершает процесс тот который второй на скрине, там-же кстати виден такой-самый
хитровыебанный извините переход…
Меняем
JNZ SHORT 00401E21 на
JMP SHORT 00401E21 и эту часть защиты мы победили… ;)
Можно-было сделать всё проще, это поменять имя экзешника на любой другой, гы-гы !
Но неужели думаете на этом мучения закончились, хренос два, пробуем запустить крякми в олле и получаем:
И такие окошки начинают открываться в цикле и программа зависает вместе с олле, да-блин…
Вот тут-то я впал в ступор и позеленел, ибо у Рикардо в мануале всё запускается, как-так и что делать !?
Неисключенно что автор мануала это сделал специально, либо версия крякми другая…
Придётся разбираться, если посмотреть строки этого крякми, то всё пошифровывается:
Ну давайте поставить точку останова, хотя на тех где приблизительно потенциально будет происходить обращение при создании этих окошек.
Делаем Run, что в этоге получилось:
В общем-то виден переход, меняем
JNZ SHORT DaXXoR2.00401B34 на
JMP SHORT DaXXoR2.00401B34, ну это традиционно у меня, в общем-то защита снята… ;)