7hr33 N!gh7Z 0f Cracking

Перейти на главную страницу, индексную страницу, гостевую страницу.


Автор: CyberManiac <_cybermaniac_@mail.ru>

Вообще-то технология взлома программного обеспечения (а если по-крэкерски - то
просто warez'а) довольно-таки хорошо описана во множестве Cracking Tut0Ria1Z и
статей на тему "How2Crack чего-то там". С большим или меньшим количеством
технических подробностей. Однако ни один из этих Tut0Ria1Z не скажет, что
двигало человеком, ломающим софт, чего ради он этим занимался - и что стояло за
сухими строками отчета "правим значение байта по смещению 72035 с 75 на EB -
запускаем, работает!". Если Вы хотите понять, "зачем" - Вам не помогут никакие
дизассемблерные листинги и дампы памяти, учебники и мегабайты крэкерского
вареза. Чтобы почувствовать это нужно влезть в шкуру крэкера, думать и
чувствовать, как крэкер, жить его жизнью - но для большинства это просто
нереально. Кто решится вырвать из своей жизни множество дней и ночей на
совершенствование своих знаний Ассемблера, чтение статей на неимоверно
изуродованном английском и копание в кривых c0d3z - все ради того, чтобы
заставить такую хорошую, но такую дорогую программку работать несколько дольше
отпущенных ей 30 дней?

Вот для того-то я и пишу эту статью - чтобы каждый, независимо от возраста и
знаний мог хоть немного прикоснуться к миру Warez Cracking, если не в качестве
первого лица, то в качестве того, кто это видел, "смотрящего из-за плеча". А уж
я поведу Вас через мрачные бездны C0D3Z - и постараюсь, чтобы Вы увидели и
почувствовали все, что стоит увидеть и почувствовать хоть один раз в жизни. От
Вас не потребуется никаких хакерских талантов, в действительности важно лишь
одно - желание узнать и понять. И не слишком верьте тем, кто скажет: "взламывать
софт - это плохо, это преступление" - им я отвечу цитатой из "Совести хакера":

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

Да, я - преступник. Мое преступление - любопытство. Мое преступление - в том,
что я сужу о людях по тому, что они говорят и думают, а не по тому, как они
выглядят. Мое преступление в том, что я - за пределами вашего понимания, и этого
вы мне никогда не простите."

U r r3ADy? Тогда поехали... Вот и наша цель: Turbo Browser 2000. SoftIce 4.05
заранее загружен, настроен и ждет своего часа. Ну что ж, запустим программку и
выясним, в чем собственно заключается проблема. Выяснили: судя по документации
(Вы читаете документацию? А я вот читаю) - самый обычный Time Limit, текущая
дата считывается совершенно стандартным образом. Покрутим туда-сюда часики - к
списку проблем добавился еще и NAG Screen довольно изящного вида (но от этого он
не становится менее NAG). Потом натравим на бедную программу RegMon и FileMon.
Результатом всего этого будут килобайты логов, из которых становится очевидным
лишь одно - программа использует довольно оригинальный способ узнавать дату
своего первого запуска.

Начинаем дизассемблировать программу - старый, но все еще надежный и
смертоносный W32Dasm 8.93 поможет нам и в этот раз. А пока он будет перемалывать
полтора мегабайта машинного кода пополам со всяким мусором, у нас есть десять
минут. Как раз, чтобы сбегать на кухню и вытащить из холодильника бутылку
ледяной Крейзи-колы - а потом смотреть, как ползет индикатор прогресса, отмечая
очередную тысячу строк дизассемблированного кода. Ночь будет длинная.

На этот раз все оказалось просто - запусти и смотри, как объем листинга
медленно, но верно приближается к заоблачным вершинам. Но так бывает не всегда -
и особенно в последнее время. Производители софта так и норовят упаковать свой
шедевр какой-нибудь гадостью вроде NeoLite или ASPack, навешать VBox'ов - в
нелепой надежде, что это кого-то остановит. Но на каждую "непробиваемую" защиту
у нас найдется всесокрушающее оружие - распаковщики, PE-редакторы, патчи для
SoftIce домашнего производства. Ну и конечно - бессменный ProcDump, в который
так удачно встроен скрипт-язык. Что-нибудь из обширного крэкерского архива
обязательно подойдет. Не может не подойти. Просто надо суметь их раздобыть - все
эти маленькие милые штучки, весь смысл существования которых заключен в том,
чтобы превращать изощренные защиты в груды развалин.

Нас, крэкеров, постоянно путают с хакерами - нет, даже не с теми, которые ломают
сервера или пишут в одиночку беспросветно навороченные программы - с обычными
варезными хакерами, ломающими софт в основном ради собственного удовольствия и
решения изощренных загадок. Но мы не такие, наша цель - результат, и результат -
любой ценой. Для нас нет "запрещенных" приемов: серийник - отлично, патч -
хорошо, memory patch - тоже сойдет, если иначе не получается. Кто-то может
неделями заниматься филигранной работой - а мы выдаем вал, ведь по большому
счету всем плевать, КАК это было сломано - лишь бы работало. А уж работать мы
заставим - ради того и просиживаем ночи напролет перед своими 14-15-17-дюймовыми
амбразурами.

Ну вот, дизассемблирование завершено. Получился хорошенький такой файл, 20 с
половиной мегабайт, почти полмиллиона строк текста - это при том, что нужный нам
кусок защиты сосредоточен от силы в сотне ассемблерных команд, которые нам
теперь и предстоит найти. Ненамного проще, чем иголку в стоге сена - если,
конечно, не знать кое-каких приемов. Теперь запускаем Symbol Loader от СофтАйса
и после необходимых формальностей оказываемся на точке входа программы.
Осматриваемся. Вокруг - черная бездна пополам с надписями INVALID. Давим F8 -
вот теперь стало чуть повеселее. "Так вот вы какие, c0d3z - а я-то думал у вас и
образа нет!"

Что ж, нет софта без глюков - и СофтАйс при всем его беспросветном величии - не
исключение. Неглючный крэкерский софт - это что-то из области мечты. Причем
мечты заведомо несбыточной - но мечтать все равно полезно. Любая из этих
чудесных программок запросто может в лучшем случае свалиться сама, а в худшем -
утащить за собой систему, причем КОГДА это случится - всего лишь вопрос времени.
И обычно времени очень близкого. И тем не менее софт, нам жизненно необходим -
разный и много. По-настоящему много, и притом самых последних версий - если
хочешь что-то сделать быстро, хорошо и эффективно, нужно иметь под рукой все
самое новое и самое лучшее. К тому же никогда заранее не знаешь, что именно тебе
понадобится завтра, и потому приходится тащить на свою машину все, что может
хоть когда-то пригодиться. Например, одних патч-генераторов у меня полтора
десятка - от простейших до профессионального инструмента легальных
программистов, при помощи которого создаются апдейты программ.

Да, в крэкинге тоже есть свои базовые приемы, без знания которых ничего не
добьешься - но, к счастью, крэкинг - это не та область, где можно бесконечно
использовать готовые решения. Наоборот, крэкинг требует самодисциплины и
постоянного расширения знаний - и это знания совершенно особого рода, их
невозможно "получить" в обычном смысле слова. Эти знания нужно найти и сделать
их частью себя, не надеясь извлечь из них выгоду или добиться признания. Более
того, современному крэкеру нужна даже определенная сила духа, чтобы защитить
свое "право на существование" в современном мире, где единственной реальной
ценностью является капитал, а человек рассматривается лишь как источник прибыли.

Так, что там у нас есть против Time Limit из стандартных приемов? Есть BPX
GetLocalTime (70% вероятности, что сработает) и BPX GetSystemTime (25%
соответственно). Оставшиеся 5% - экзотика, но забывать про нее тоже не стоит.
Пробуем наиболее вероятное - и получаем результат. Отрицательный. Ладно, делаем
заход по второму варианту. F12. Вот теперь что-то есть - нас выбрасывает в
дебрях fsutil70.dll. Хороший повод вспомнить, что было написано в листинге про
подгружаемые DLL - их там целых 22 штуки, но никакого fsutil70 там и близко не
было. Иначе я бы заметил и сильно удивился. Так что же - опять все не то? Но все
равно нажимаю F12 - и вот я внутри процесса TURBOB.EXE. Похоже, это все-таки
именно то, что я искал. Может быть... Записываю адрес, на котором я вывалился из
DLL, потом на всякий случай обвожу его на несколько раз жирной рамкой -
авторучка и исписанный в несколько слоев адресами и кодами листок бумаги видимо
никогда не исчезнут из крэкерского арсенала. Третий час ночи, вся кола выпита.
Кто бы мне объяснил, как это получается - выпить полтора литра колы и не
заметить этого. Зато теперь у меня есть, с чего начать - 4 байта адреса. Так что
можно спокойно идти спать.

У каждой, даже самой мощной, защиты есть своя уязвимая точка - и стоит лишь ее
найти, как после единственного отточенного и выверенного удара защитные
механизмы рушатся, как карточный домик, обращаясь в ничто. Я верю в то, что для
успешного взлома необходимо понять, увидеть, почувствовать НЕЧТО - и найти эту
самую точку опоры. А потом вцепиться в нее мертвой хваткой. И дальше все будет
просто. Конечно, найти эту точку не всегда легко, иногда даже ОЧЕНЬ трудно - но
моя вера мне поможет.

Ну вот, надвигается следующая ночь - а значит пора продолжить начатое дело. То
есть доломать-таки несчастный TurboBrowser. Кола кончилась вчера и новой больше
нет, значит сегодня будем пить воду из-под крана. Смотрим на бумажку -
обведенный жирной рамкой, там стоит адрес в памяти: 45BAC4. Восстанавливаем в
памяти события предыдущей ночи. Дальше - привычная цепочка: Symbol Loader - BPX
- F12. Потом еще раз F12. И еще. Ну вот мы и дома - перед нами расстилаются
такие желанные и прекрасные коды:

:0047202D E8499AFEFF call 0045BA7B
:00472032 85C0 test eax, eax
:00472034 53 push ebx
:00472035 7562 jne 00472099

Только не спрашивайте, как я догадался, что именно здесь и лежит корень проблемы
- я все равно не смогу до конца это объяснить. Считайте, что это шестое чувство,
которое появляется после нескольких лет программирования, прочтения десятков
Cracking TutoRialZ и взлома трех с лишним десятков программ. Так или иначе - но
мне здесь все понятно. И я знаю, что с этим надо сделать.

Теперь осталось только слегка поиграть с флажком переноса, чтобы убедиться в
своей полной правоте - и можно начинать патчить программу. То есть почти можно -
осталось только проверить кое-какие мелочи. Ну например, что это такое?

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045BAD3(C)
|
:0045BADA 6AFF push FFFFFFFF
:0045BADC 6A00 push 00000000

* Possible Reference to String Resource ID=61334: "Reminder:
This copy of Turbo Browser will expire soon. Order"
|
:0045BADE 6896EF0000 push 0000EF96
:0045BAE3 E827200500 call 004ADB0F

Всегда нужно заглядывать если не в корень, то хотя бы на полшага вглубь - иначе
можно очень сильно ошибиться. Например, как ошиблись люди, ломавшие Socrat97:
успешно грохнув 30-дневный trial, они не потрудились погонять программу во всех
режимах - и не заметили еще одного ограничения на использование встроенного
словаря. В общем, примеров тому хватает - и не хотелось бы пополнять их число. И
здесь - как раз такой случай: казалось бы, небольшая ошибочка, да и MessageBox
будет беспокоить пользователя всего один день, никак не влияя на работу
программы. Но все же...

Немного поиграв с флажком Z мы выясняем, что в некотором случае (а именно -
непосредственно перед истечением 30-дневного срока) появляется MessageBox с
предупреждением: "Ваше время кончается - так что готовьте денежки на
регистрацию". То есть написано там несколько иное - но смысл я передал
достаточно точно. Понятное дело, подобные напоминания программу совершенно не
украшают, а потому должны быть ликвидированы. И это совсем нетрудно сделать -
всего-то переправить один-единственный переход по адресу 45BACD. Но это будет
завтра.

Суеверия. Если бы их не было, нам жилось бы намного легче. В крэкинге тоже
хватает своих суеверий - и главное из них гласит: "Патчить программы - это
неправильно". Но я - противник суеверий. Можно даже сказать - фанатичный
противник. И потому буду ломать софт так, как мне нравится, а не по придуманным
кем-то правилам. Возможно, кому-то нравится просиживать сутками перед дисплеем,
решая очередную головоломку, но это не для меня. Я верю в быстрый и эффективный
взлом - любой ценой, любыми средствами. Если мой след - превращенный в руины
машинный код и изуродованная до неузнаваемости логика защитных процедур - пусть
оно так и останется. Моя цель - работающая программа. Правильно и хорошо
работающая. И все, что приближает эту цель - праведно, а все, что мешает - SuXXX
и MuZDiE.

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

Так, что там у нас: переделать условный переход в безусловный по адресу 472035.
Это просто - опкод короткого jmp я помню наизусть. Теперь исправить еще один
переход по адресу 45BACD. Можно, конечно, воспользоваться встроенным в HIEW
ассемблером - но зачем? Вычисляем смещение в уме (FF-CF - не самая сложная
задачка) и шестнадцатиричным кодом пишем EB 30. Вот теперь можно пробовать.

И ОНО РАБОТАЕТ!

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

Осталась сущая мелочь - сделать результаты своих трудов общедоступными. Когда-то
давно я писал свои крэки на Borland Pascal, аккуратно вбивая смещения в файле и
значения байтов в заранее написанный каркас крэк-файла. Потом я делал то же
самое с заготовкой на Форте. Но теперь все это в прошлом. Патч-генератор берет
всю черновую работу на себя - и в результате получается маленький и аккуратный
файл tb2k_crk.exe. Запустите его - и Вы увидите логотип InqSoft, в качестве
имени крэкера - мой алиас и краткую информацию о программе в соответствующем
окне.

InqSoft proudly presents...


Материалы находятся на сайте http://cracklab.narod.ru/doc/






Hosted by uCoz