7hr33 N!gh7Z 0f Cracking

Автор: manager Суббота, Март 15th, 2008 Нет комментариев

Рубрика: Безопасность

Вообще-то технология взлома программного обеспечения (а если по-крэкерски — то просто 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…

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты