:: Cracking Part IV ::


Yo! Whats up? Делать нечего, я в оффлайне =). Решил продолжить показывать взломы программ с плохой защитой. Итак, начнём!

Первый продукт, который я решил посмотреть - KoalaTerm Version 2.7 (телнет клиент). К нему на диске уже имелся кряк. И я решил посмотреть насколько программа сложна в защите. Прошла 1 минута и прога уже была сломана. Крутая защита..да? =) Давайте посмотрим защиту изнутри:

При попытке регистрации программы "по методике Отфанарского" мне не показывали окошечко с надписями "Error..", "Invalid..", "Faild..". Мне просто показывали надпись "Welcome to demo version of KoalaTerm...bla-bla...". Эта строка с лёгкостью нашлась в некоторых местах дизассемблированной проги...И рядом с одной такой надписью я увидел строчку "Thank you for registering KoalaTerm...". Это и есть зацепка. Открыл прогу в IDA и пошёл по адресу, где эта строчка вызывалась:

loc_420FA1:
call sub_421380
mov ecx, eax
call sub_4213F0
push 0
push 0
push offset aThankYouForReg <- Наша строчка

Смотрим откуда вызывают loc_420FA1 и нас отсылают сюда (на несколько строчек вверх):

..................
call sub_43E56B
call sub_41F8C0 call <- Проверка того, чт омы ввели
mov [esi+0D0h], eax
test eax, eax
jnz short loc_420FA1 <- Удачная регистрация
push 0
push 0
push offset aWelcomeToDemoV <- а вот знакомая нам уже строка =)
jmp short loca_420FB6

Сразу хочу сказать одну вещь: в большенстве случаев, когда проверяют правильность введённого командой test (некий аналог команды and), то логично предполагать, что (в нашем случае) регистр eax должен быть отличен от нуля (обычно) и равняться тому значению, с которым сравнивают.
Основываясь на этом утверждении идём дальше: прыгаем на процедуру проверки...Там ничего сложного нет и понять, как ведёт себя прога в данном месте.. легко. Опять же тут можно использовать несколько способов, чтоб обойти защиту... Как я сказал выше..обычно при неправильном заполнении регистрационной формы происходит обнуление результата (у нас обнуляется регистр eax). Так оно и есть и было =).. я нахожу в конце процедуры следующее:

..................
fuck:
mov [ebp+var_4], 0FFFFFFFFh
call sub_41FCF6
xor eax, eax <- наше обнуление
..................

Я сразу решил занопить (0x90) это обнуление. И чтоже...Это сработало =). Теперь можно хоть что вводить или не вводить =) и регистрация пройдёт!

Следующий продукт, о котором я бы хотел замолвить словечко - ConSeal PC FIREWALL. Эта программа у меня оказалась демо версией и работать соглашалась только определённый срок..при этом никакой регистрации не было (дема - она и в Африке дема =). И во время инсталяции пришлось мне переместиться в 1998 год, чтоб установить эту программку..ибо она контролирует дату: чтоб она была не ниже даты создания программы и не выше определённой даты. После того, как я поставил прогу..я сразу же телепортировался в 2001 год (назад в будущее =). После этого прога при запуске говорила, что мол срок давно истёк..и отрубала некоторые возможности программы: задавать правила. Обойти эту защиту оказалось так же просто: ещё проще =). Достаточно было задать безусловные переходы и всё:

Первая проверка даты:
..................
cmp [ebp+var_4], eax <- Проверяем "срок годности"
jge loc_4026D6 <- Если их дата больше нашей, то всё ок
..................
push offset aTheTimePeriodF <- Ругань ¦1
..................
Меняем jge на jmp дабы удостоверить программу в том, что срок ещё не прошёл.

Проверка прошедшего времени со дня установки:
..................
cmp eax, [ebp+var_130] <- Проверяем Trial Period
jge loc_40282E <- Если наша дата меньше их, то прыгаем
..................
push offset aThe15DayTrialP
..................
Тут тоже меняем jge на jmp. Всё!

Далее я встретил программку SubmitWolf PRO v3.06.00, которая добавляет ваш сайт в базу данных более 1100 сатов и которая имеет более 800 скриптов по добавлению инфы...Короче всё, что нужно для раскрутки сайта на полную катушку =). Итак, я пытаюсь зарегиться..но бесполезно. Прога ругается. Лезем в код:

..................
call sub_40FF06 <- Процедура обработки
pop ecx
test eax, eax
pop ecx
jnz short loc_4071D2 <- Если всё ништяк, то прыгаем
..................
push offset aInvalidRegistr <- Иначе ругаемся матом ¦1
..................

Лезем в процедуру, где первым делом ищем первый прыжок на проигрыш (его найти легко...он попадётся первым =). Как я и предполагал - происходит обнуление регистра eax. Нам это обнуление не нужно. Нопим: nop nop... Выходим из процедуры и прыгаем далее на loc_4071D2 (см. выше):

loc_4071D2:
..................
xor edi, edi
cmp dword_4240D8, edi <- Проверка dword_4240D8
jnz short loc_4071F4 <- Окончание регистрации
push 10h
push offset aInvalidVersion <- Матерный сленг ¦2
..................

Тут нам программеры попытались ещё раз подкинуть сюрприз, но мы его легко обходим, меняя jnz на jmp! Крутая защита =). Мне настолько волк понравился, что я заголовок проги заменил на w0lf CrACkEd =).

После этой программки я наткнулся на прогу, которую разрабатывала та же команда =)..Прога называлась MP3-Wolf v1.04. Как и следовало ожидать принцип защиты полность идентичен. Но есть одна 2-е изюминки: 1) Можно только занопить обнуление и не менять jnz на jmp! Этого хватит для успешной регистрации. 2) Проделав пункт 1 и, запустив прогу, мы не увидим кнопку "Register" в меню Help. Ха-ха =)).. программа просто сразу делает проверку на зарегистрированность, а так как всё ок..она удаляет кнопку регистрация из списка. Но в пункте About по прежнему видна надпись *UNREGISTRED*. Как же исправить это положение? Всё просто разработчики создают в директории, где находится прога файлик mwolf.ini, куда надо вписать следующее:

licensee=Crazy_Einstein_[_aCid_fAlz_]
id=666

Как я узнал, что надо добавлять такие поля? Интуиция =)). Я ведь перед этим ломанул прогу от этих разработчиков...и она тоже использует *.ini технологию. Учитывая то, что сис-ма защиты одна и та же...то и технология записи в *.ini файл должна быть аналогичной. После этого...запустив прогу, мы наконец-то увидим, что мы действительно зарегистрированны =). Только не стоит пытаться только вставить данные строчки в mwolf.ini и не модифицировать файл *.exe! Ничего не выйдет...ибо прога проверяет на зарегистрированность и если прога не зарегистрированна, то строка id удаляется из файла =). Вот такая вот изюминка от разработчиков.

Следующий продукт - AMSD EasyTalk Explorer Version 2.1 RC. Какое грозное название и такая тупая защита =). Как всегда текст ругани содержится в открытом виде в екзешнике. Мы попадаем сюда:

..................
call sub_414BCA <- Процедура обработки
pop ecx
cmp eax, ebx <- Сравнение результата
pop ecx
jnz short loc_4141F8 <- Мат
..................

Прыгаем в процедуру, а далее у нас есть 2 пути: 1 - короткий, 2 - долгий. 1 - на первом же переходе в аут, переделываем его на положительный конец и наслаждаемся. 2 - занопить 2 перехода в аут и тоже наслаждаемся =). Но 2 способ требует от нас исправления большего числа байт, нежели 1. Идём далее!

Следующий продукт мне понравился своей шуточкой =) - WinHacker 95. Защита - тупая. Да и вообще..я не понимаю зачем на проги подобного рода вообще ставят защиту...может это прикол =) ? Прикол..не прикол, а автор просил ~$18 =). Ну чтож...пытаемся региться получаем результат, апосля ищем этот результат =). И находим:

..................
call edi <- Хитрая примочка: адрес процедуры хранится в edi
..................
test al, al
jnz short loc_4185D6 <- Прыжок на ошибку
..................

Я не стал вычислять, что находилось в edi и решил попробовать занопить прыжок на ошибку..после этого запустил прогу WinHacker 95 и...был удивлён, как виндовс сделал LogOff без предупреждения...при этом все окошки закрылись, все.. кроме WinHacker'a... и мне пришлось заново вводить пароль и открывать все окна. Нихилая примочка =). Мол, против крякеров =)..я уж было подумал, что там защита не простая, а оказалось - фигня =). Я решил пойти дальше: с того места, где я занопил..я пошёл далее по ветке в поисках процедуры, которая проверяет что-то и кидает меня и мою винду:

..................
test al, al
jz short loc_4185CF <- Наша Шутка
..................
test al, al
jz short loc_4185CF <- Наша Шутка
..................
jmp short loc_418632
loc_4185CF:
call sub_422277
jmp short loc_418632
..................

Странная картинка: 2 перехода досрочно заканчивают все действия - это наводит на мысль, что это либо прыжки на правильный путь либо наоборот. Но интуиция подсказывает, что автор с такими шуточками наврятли будет делать 2 перехода на правильную ветку =). Я занопил 2 этих перехода и этого было достаточно, чтоб зарегить программу =). Крутая защита.. =) Зато веселая шуточка выдалась =).

Вот на этой ноте я пожалуй нажму кнопку F2 и ESC =).

AcidFalz

[an error occurred while processing this directive]