Крякинг: Записки дилетанта

Как статья ?

  • Классно

    Голосов: 18 90.0%
  • Мог-бы и по лучше написать

    Голосов: 0 0.0%
  • Что-то слабовато

    Голосов: 0 0.0%
  • А зачем это ?

    Голосов: 1 5.0%
  • Ндя..., лучше-бы выкладовал ключи

    Голосов: 1 5.0%

  • Всего проголосовало
    20

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 208
Я все понял,вернее постараюсь разобраться.У меня это происходит медленно и с кучей ошибок,что в моем случае "уровень младенца" очень даже полезно, так как приходится возвращаться к месту ошибки несколько раз, то материал усваивается наглушняк.
Ну-так я тоже не скажу что прям быстро и сразу во всём разбираюсь, у меня уровень тоже далеко не "профи"...смех-смех!!!

В принципе понятно что в этой главе нужно сделать так чтобы крякми принимал любые ключи,
вопрос в том чтоб увидеть изначально забитый в него ключ,ну примерно так как показано в начале твоих изысканий в этой теме?
А-аа, ты про 9-ую главу...

У меня есть своё решение, но незнаю насколько оно верное, что-бы крякми принимало любое значение, я-бы делал так:

1)Сделал точку останова на API GetDlgItemTextA;

2)Далее после ввода логина и пароля, нашёл-бы их в дампе памяти и поставил точки останова как на логине, так и на пароле.

3)Далее Run:

3.1)Попадаем на анализ никнейма, там частично такой код (В данном случае неполностью):
Код:
 MOV AL,BYTE PTR DS:[ESI]
TEST AL,AL
JZ SHORT 0040139C
CMP AL,41
JB SHORT 004013AC
......

Там если проанализировать код, можно попробовать написать кейген, т.к. программа генерирует пароль в этом месте, нужно понять алгоритм, но я не разбирался...

Пока-что важен код:

CMP AL,41
JB SHORT 004013AC

JB SHORT 004013AC
- Это переход, на вызов о том, что данные не верны, поэтому его нужно либо убрать, либо заменить на вызов, что данные верны...

3.2)Потом после анализа никнейма и генерации кода, идёт анализ нашего введённого пароля, т.е. туда где идёт шифрование нашего введённого пароля, а потом сравнение с сгенерерованным выше...

В том месте мы также остановимся по точке останова в дампе...

Как-то так, если нужно могу процесс расписать позже...
 

ason

Уважаемый пользователь
Форумчанин
Регистрация
21.01.2015
Сообщения
171
Репутация
112
X-Shar подскажи какое максимальное значение для регистров, у Нарвахо по моему там ошибка.
Он пишет если к значению EAX FFFFFFFF ну то есть минус один прибавить ADD EAX,1 то значение флага С станет активным ,то есть максимальное значение будет превышено ,но получается ноль и у меня флаг остается не активным.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 208
X-Shar подскажи какое максимальное значение для регистров, у Нарвахо по моему там ошибка.
Он пишет если к значению EAX FFFFFFFF ну то есть минус один прибавить ADD EAX,1 то значение флага С станет активным ,то есть максимальное значение будет превышено ,но получается ноль и у меня флаг остается не активным.
Да-вроде всё правильно FFFFFFFF + 1, он-же должен обнулиться и флаг С активируется, я так понимаю...

К сожалению в ассемблере плаваю сильно, это мягко ещё сказано что плаваю, вернее тону...смех-смех!!!

Я к сожалению забываю комманды и тонкости эти тоже, нужно наверное больше практики что-бы запомнить всё...Не въехал!!!
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 208
Сейчас проверил, всё так и есть:

upload_2015-2-23_12-12-51.png
 

ason

Уважаемый пользователь
Форумчанин
Регистрация
21.01.2015
Сообщения
171
Репутация
112
Блин вчера флаг С не активировался ,чудеса!cool cool
Значит получается что "0" ,это и есть превышение максимального значения в регистрах.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 208
Значит получается что "0" ,это и есть превышение максимального значения в регистрах.
Да, если флаг С - активировался...

Кстати максимальное значение байта тоже FF, далее FF+1 будет ноль и так по кругу...WinkSmile
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 208
Всем привет !

Продолжаю изучение «Крякерского мира» гы-гы…

В главе 20-ть возникла печальбеда, Рикардо предложил для изучения антиотладочных механизмов такой неприятный крякми от DaXXoR !

upload_2015-2-25_16-10-30.png



Неприятный он тем, что прочухивает, что он под отладчиком и начинает делать всякие гадости… :(

Ну и сам крякми прикольный, шифрование строк, спрятаны API, ну и там ещё затронута тема с «исключениями», до которой я ещё не дошёл, поэтому цель у меня была обойти защиту от отладки…

К сожалению, т.к. способ который описал автор в мануале у меня незаработал, в частности у меня почему-то неработают плагины, поэтому нужно всё делать в ручную, предлагаю свой вариант решения (Ну разумеется с помощью Рикардо, но немного изменил методу что-бы работало на новых системах, 7-ка и т.д.):

Сразу скажу, что в этом крякми есть два типа защиты:

1)По обнаружению процесса «Oledbg.exe», смысл при запуске обнаруживает процесс и далее закрывает OleDbg, между прочим неочень приятно, т.к. слетают настройки и точки останова…

2)Используется IsDebuggerPresent – Это специальная функция, которая может обнаруживать что программа под отладчиком, в главе 19-ть подробно написано как это работает, не буду писанину разводить…

Если программа под отладкой по этому типу защиты, то крякми разумеется сделает гадость, в данном случае начнёт хаотично в цикле выводить окно «!NotDebugging !» пока программа независнит, вместе с кстати OleDBG, да-блин…

Вот такой проблемдос неожиданно свалился, давайте разбираться, если открыть крякми в оледбг, то сразу видно что защита там не хухры-мухры, т.е. для начала хотя-бы понять какие APIотвечают за защиту, ибо они скрыты от посторонних глаз !


Как говорится в мануале Рикардо, нужно поставить точку останова на АПИ GetProcAddress:

Тогда мы сможем уже увидеть скрытые АПИ, я для себя всегда делаю точки останова на вызове в программе, а не на в модулях винды, т.е. что-бы олле не выходила из нашего крякми…

upload_2015-2-25_16-10-53.png



Начинаем нажимать Run, пока не встретим потенциально-подозрительные API:

Вот они, ога попались…

upload_2015-2-25_16-11-9.png



Вообще нас интересует функа EnumProcesses, эта функция получает IDвсех процессов в системе, у каждого процесса есть свой уникальный номер, этот номер можно посмотреть в диспетчере задач…


А вообще Рикардо в мануале объясняет как эти айди увидить в дампе, но у меня что-то не получилось, да и пофиг смотрим дальше код ниже этих АПИ, можно увидить что-то по важнее, а именно это OpenProcess, вот:

upload_2015-2-25_16-11-44.png



Функция OpenProcess, которая проверяет, работает ли процесс, и если да, то возвращает его хэндл (логический номер).

Хендл, нужен для управления нашим процессом, тут неплохо вспомнить-бы немного кодинг на Делфи или C++ Bulder, кстати крякми на нём и написан ! ;)

Что нужно что-бы реализовать такую защиту:

1)Получить список всех пидов (Уникальный идентификатор процесса в системе);

2)Получить имя модуля, в зависимости от пида;

3)Сравнить и если нужно закрыть процесс;

4)Итак в цикле проверяем процессы в списке, начинаем с пункта два…

OpenProcess как-раз это и делает, там-их два, завершает процесс тот который второй на скрине, там-же кстати виден такой-самый хитровыебанный извините переход…

upload_2015-2-25_16-12-3.png



Меняем JNZ SHORT 00401E21 на JMP SHORT 00401E21 и эту часть защиты мы победили… ;)

Можно-было сделать всё проще, это поменять имя экзешника на любой другой, гы-гы !

Но неужели думаете на этом мучения закончились, хренос два, пробуем запустить крякми в олле и получаем:

upload_2015-2-25_16-12-18.png



И такие окошки начинают открываться в цикле и программа зависает вместе с олле, да-блин…

Вот тут-то я впал в ступор и позеленел, ибо у Рикардо в мануале всё запускается, как-так и что делать !?

Неисключенно что автор мануала это сделал специально, либо версия крякми другая…

Придётся разбираться, если посмотреть строки этого крякми, то всё пошифровывается:

upload_2015-2-25_16-12-33.png



Ну давайте поставить точку останова, хотя на тех где приблизительно потенциально будет происходить обращение при создании этих окошек.

Делаем Run, что в этоге получилось:

upload_2015-2-25_16-12-48.png



В общем-то виден переход, меняем JNZ SHORT DaXXoR2.00401B34 на JMP SHORT DaXXoR2.00401B34, ну это традиционно у меня, в общем-то защита снята… ;)
 
Последнее редактирование:

ason

Уважаемый пользователь
Форумчанин
Регистрация
21.01.2015
Сообщения
171
Репутация
112
Если процессы видны нельзя ли их просто заNOPать?
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 208
Если процессы видны нельзя ли их просто заNOPать?
Можно нопать, на я предпочитаю джампать, меньше вероятности, что что-то там посыпиться, причём нопать можно долго, если много кода например...
 

ason

Уважаемый пользователь
Форумчанин
Регистрация
21.01.2015
Сообщения
171
Репутация
112
Если я правильно понял,то ты заменил функцию сравнения,в нашем случае JNZ-"переход,если не равно нулю" на обычный переход на тот же адрес но без сравнения.
Действительно очень просто и по русскому.
 
Верх Низ