Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

7hr33 N!gh7Z 0f Cracking

Обсудить статью на форуме

Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB - вот тут.

Автор: 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...
 


Обсуждение статьи: 7hr33 N!gh7Z 0f Cracking >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS