|
|
|
|
7hr33 N!gh7Z 0f Cracking
|
CyberManiac
Вообще-то технология взлома
программного обеспечения (а если по-крэкерски
- то просто 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...
(Впервые
опубликовано в электронном журнале InfoServ:
http://www.k26.ru (сервер
доступен только в г. Железногорск\Красноярск-26)
)
|
 |
[an error occurred while processing this directive] |
 |
|
|
|
|