Шароварные проги постепенно начали занимать на нашем винте больше половины места. Если раньше все стремились использовать большие пакеты, такие как MS Office, то теперь народ юзает специализированный шароварный софт. Это потому что он удобней, делает все лучше и практически халявный. Проблема только в слове "практически". Как же сделать чтобы оно превратилось в слово "абсолютно"? Давай разберемся.
Программеры не очень любят отдавать свой труд другим за 0 баксов. Я их понимаю, потому что я сам программер. А помимо этого я еще и человек, поэтому мне иногда тоже хочется кушать :). А как же программеру еще заработать деньги, если не продавать свой труд? Никак. Мне повезло, помимо программирования я занимаюсь еще и журналистикой, обучением других, ремонтом и настройкой техники. Так и набирается копеечка на корочку черного хлеба :).
Жаль, что не всем так везет. Чтобы получить нормальную работу, программерам приходится очень много учиться. С каждым годом это становится все труднее и труднее, потому что эта индустрия изменяется по закону Мура в квадрате. Технологии изменяются каждые пол года, постоянно появляются новые языки программирования, SDK или движки. За всем этим прогрессом не сможет угнаться не один вундеркинд. Вот и приходится всем довольствоваться написанием простой утилы и продажей ее народу. Если получится уникальная прога, то можно срубить нехилые баксы, если за нее начнут платить.
А как заставить юзера заплатить деньги за свою утилу? Ответ однозначен - поставить ограничение на количество юзаемых дней или количество запусков. В любом случае, через какое-то время утила перестает работать. И вот тут, если юзеру нужна эта тулза, то он отслюнявит за нее пару зеленых. Ну а если нет, то значит программер где-то прохалявил.
Методы защиты:
Большинство шароварных прог защищены простейшим счетчиком или простым математическим алгоритмом. Поэтому обойти эту защиту не составляет труда даже начинающему юзеру. Такое утверждение верно для 90% шаровар. Я даю ногу Билла на отсечение, если это не так :).
Эта теорема работает и будет работать, потому что программер из гаража не будет тратить время на защиту, потому что это отнимает очень много времени. Если это время потратить на защиту проги от взлома, то не останется времени на саму прогу. И тогда шаровара не сможет конкурировать с программными монстрами от корпораций.
Заметь, что даже MS защищает проги простым серийным номером, который проверяется математически. Алгоритм прост как три копейки, потому что нет смысла мудрить громадные вычисления, когда любой Х - совместимый чел сможет снять эту защиту :). А если и не сможет, то любой купивший одну лицензию размножит ее по всему миру. Так что нет смысла защищаться, все равно победит нападающий.
Некоторые, особо жадные пытаются встроить в свое детище поддержку ключей или еще чего-то подобного. Они надеются на рекламу, в которой написано, что HASP - непобедим :). Все это лажа. Нет еще такой защиты, которую не смогли обойти Х - умельцы :). Наши братья никогда не подведут. Взломают все, что движется и не движется. Зайди на любой каталог кряков в инете. Там ты найдешь громадное количество креков для любой проги. Так что защита - невыгодное дело.
Вот поэтому в моих прогах стоит примитивная проверка, которая подействует только на самого начинающего. Любого, хоть немного продвинутого юзера она даже не взволнует.
Где взять деньги:
А что же юзеры? Им нравятся шаровары, и они готовы тоннами сливать их себе на винт. Но где взять такое количество буказоидов, чтобы оплатить железного друга, ОС, офис, да еще и шаровары. Если за все платить, то никакой зряплаты не хватит. Вот и приходится юзверям мучится с шароварами, искать способы обхода защиты.
Честно сказать, я никогда не боролся с российскими крякерами. Во-первых - это бесполезно. Во-вторых я понимаю, что мы еще не доросли до буржуйской зарплаты, чтобы платить лишние зеленые за софт. Поэтому я никогда не ругал наших крякеров и никогда не испытывал ненависти к людям использующим мой софт нелегально.
Но в то же время я ненавижу людей, которые способны заплатить за чужой труд, но не делают этого только по своей жадности. Я же тоже человек и хочу есть:). Почему бы не заплатить мне заработанные мной деньги? Ты ж не юзаешь свой телевизор на халяву, а платишь за него в магазине реальные зеленые?
Если ты относишься к категории жадин, то переверни страницу, чмо позорное :). Если ты не платишь деньги только по причине их отсутствия, то эта статья для тебя. Я уже говорил, что программеры - тоже люди. Поэтому мы понимаем других и готовы помочь.
Реальность защиты:
Ладно, черт с этими жадинами. Зонтик им в задний проход по самую ручку, открыть и пару раз провернуть :).
Я уже говорил, что полно сайтов с кряками на любой вкус. Многие считают, что там есть все кряки, но это виртуальная реальность. А реальная реальность заключается в слишком большом количестве прог. Ни один сайт посвященный крякам не может содержать абсолютно все описания. Поэтому ты можешь остаться без любимой проги.
И все же кряк с инета самый простой и работающий способ. Достаточно просто зайти на самый крупный отстойник и поискать там. Советую запосетить www.com Если здесь не найдешь, то более мелкие сайты тем более не помогут. Придется работать самому.
Если нет кряка:
Если ты не смог найти инструкции по обходу защиты в сети или у тебя вообще нет выхода в инет, то придется поработать руками. Это достаточно просто, если есть необходимый софт.
Самым простейшим способом, заставить прогу работать - продлить ее срок службы. Как я уже сказал, защита шаровар примитивна и в основном заключается на счетчике или на количестве используемых дней. Второе предпочтительней. Почему? Сейчас объясню.
Программеры очень часто допускают ошибку при проверке даты. При установке, прога записывает текущую дату в реестр. При запуске, прога проверяет - не превышает ли текущая дата дату установки плюс определенное число дней. Если да, то лимит вышел. Вот тут есть скрытая ошибка. Переведи дату в компе на 01.01.2010 года и установи прогу. Теперь верни в нормальное положение и юзай софт. Теперь прога будет работать до 01.01.2010 плюс определенное число дней.
Накручивание счетчика:
Если перевод даты не помог или используется счетчик запусков проги, то есть другой способ - "мониторинг реестра". Для него тебе понадобится отправиться сюда http://www.sysinternals.com. Здесь валяется Regmon for Windows NT/9x, который доступен и в исходниках.
Давай теперь разберем работу с Regmon на примере на крутки моей проги CyD Shell. Запусти Regmon, а потом запусти CyD Shell. В окне Regmon появятся все события связанные с обращением к реестру. Каждое обращение разбито на несколько колонок:
1. # - порядковый номер сообщения.
2. Process - прога обратившаяся к реестру.
3. Request - запрос.
4. Path - путь.
5. Result - результат.
6. Other - дополнительные параметры.
Рисунок 1.
Самое первое, что нужно поискать - строку в которой будет поле Process равно "Cyddeskt" и поле Request равно SetValueEx. В момент загрузки программы считывают параметры и настройки, а SetValueEx - означает запись в реестр. Так что же можно записать во время загрузки? Только счетчик. Посмотри в поле Other - это значение, которое записано в реестр. Если хорошо посмотреть на скрин 1, то ты уведешь там 18. Запись происходит по адресу: HKEY_CURRENT_USER\Software\CyD\CyD Desktop\ProductID.
Теперь посмотри немного выше. Поэтому же адресу происходило чтение параметра и почиталось значение 19. Это значит, что счетчик работает в обратном порядке, и когда он достигнет нуля, прога перестанет запускаться. Теперь ты сможешь спокойно вернуть прогу к жизни увеличив ручками этот счетчик. А в большинстве прог можно сразу увеличить его до 10000 и прога прозевает это. Если счетчик работает на увеличение (например, до 100), то можно поставить там значение -10000 и тогда прога задолбается ждать, когда наступит предел.
Точно так же можно корректировать и даты. Например, можно поправить один параметр в реестре для The Bat так, что он будет работать бесконечно, показывая, что у тебя осталось -5000 дней.
Если у тебя возникли проблемы с мониторингом, то чтобы не перестанавливать прогу, можешь просто удалить из реестра все значения связанные с прогой.
Если используется счетчик запусков, а не дата, то можно сделать даже проще. После установки проги, она запишет начальные параметры в реестр. Запусти regedit и найди здесь: HKEY_CURRENT_USER\Software\ плюс имя фирмы или проги эти параметры. Выдели раздел и экспортируй его в файл. Когда закончится лимит запусков, просто импортируй этот файл на родину и все настройки вернутся в начальное состояние.
Накручивание счетчика. Второй эпизод:
Почему я говорю только о реестре? Да потому что это самый распространенный и самый удобный способ для проги сохранить свои параметры. Но этот способ не единственный. Некоторые современные и большинство старых прог используют для сохранения простые файлы.
Для решения этой проблемы отправляйся сюда же http://www.sysinternals.com и качай File Monitor (Filemon for Windows NT/9x). Это тулза для мониторинга обращений к файлам.
Рисунок 2.
Работа с ним абсолютно такая же, как и с Regmon. Так что ты без проблем вычислишь место и способ сохранения счетчика.
Конкретный взлом:
Если ты хочешь избавиться от всех предупреждений о регистрации, получить все возможности шаровары и реально зарегить ее, то тут уже без дизассемблера и машинных кодов не обойтись. Я постараюсь тебе дать основы этого взлома и в то же время не вдаваться в глубину. То что я расскажу, будет достаточно для любого программера. А если ты не совместим с кодингом, то этого будет достаточно для взлома только простой защиты.
Итак. Для работы нам понадобится:
1. W32dasm (желательно не меньше версии 8.9), можно найти на http://www/expage.com/page/w32dasm.
2. Turbo Debugger (от фирмы Borland) можно найти на любом диске со старым Borland C++ или Pascal.
3. DiskEditor (можно любой вариант, но я люблю от дяди Нортона).
Меньше слов, больше дела. У меня и так мало места уже осталось. Запусти W32dasm. Выбери из меню Disassembler пункт «Open file to Disassemble..». Открой необходимый .ехе файл. Я опять возьму CyD Shell. Прога быстро превратить машинный код в assembler.
Теперь переходим к самому взлому. Для начала нужно попробовать найти коды. Для этого выбери меню Search->Find Text. Введи слово Regist и запусти запуск. Когда такое слово будет найдено, осмотрись вокруг. Если не видишь ничего интересного, то продолжай поиск. Ты должен найти простой текст связанный с регистрацией.
Рисунок 3.
Посмотри на рисунок 3. Там показан скрин результата моего поиска. W32dasm нашел текст: "Enter registration code". Я думаю, что это то, что надо. Если ты рубишь в языке assembler, то можешь просмотреть команды. Если с этим у тебя проблемы, то смотри на строки, начинающиеся с символа "*" (звездочка).
Итак, смотрим на такие строки чуть ниже. Следующая строка абсолютно ничего не говорит. Опускаясь еще ниже ты сможешь увидеть строку:
* Possible StringData Ref from Code Obj ->"RGCD1"
Самое интересное здесь находится в кавычках - "RGCD1". Если ты не рубишь в программинге, то по методу научной дедукции ты сможешь догадаться, что введенный код будет сравниваться с "RGCD1". Это легко, потому что мы сначала нашли сообщение: "Введите регистрационный код", и тут же строка непонятных символов. Что мешает проверить эту строку как регистрационный код?
Ну а если ты программер, то по коду ты сможешь узнать, что первые 5 символов введенного ключа должны быть "RGCD1". Остальные символы могут быть любыми.
Это идеальный вариант, когда происходит простое сравнение. Хуже когда используется математика. Но давай посмотрим немного дальше. Ты найдешь следующие строки "Software", "CyD", "CyD Desktop" и "Product". Тебе не напоминает ли это реестр? А мне напоминает :). Software\CyD\CyD Desktop - путь в реестре, а Product - строковый параметр. Почему строковый? Да потому что еще ниже ты найдешь строку - "23sa4D24sf2s3g45s". Это значит, что если такая строка есть в реестре, то прога зарегина. Вот так. Даже если для проверки кода используется математика, ты сможешь ее обойти если найдешь такой идентификатор.
Но это все простейшие варианты защиты. Несмотря на простоту, они используются очень часто. Я сам использую такие методы, потому что тратить время на сложные вещи нет смысла. Все равно взломают :).
Сложный взлом:
Если ты ничего не нашел, то тут уже без дебагинга не обойтись. Придется запускать Turbo Debagger и искать регистрацию отлаживая прогу. Тут уже без конкретных знаний кодинга не обойтись.
Я не буду тут вдаватся в подробности, а дам пару советов, которых будет достаточно для кодеров:
1. Попробуй поискать все вызовы функций MessageBoxA. Чаще всего, рядом с регистрацией будет хотя бы один вызов этой функции. В основном, для сообщения о удачной регистрации.
2. Ищи последовательность кодов выхода из проги. Посмотри откуда они вызываются. Если прога выработала свой ресурс, то она не запустится, а значит где-то должен быть принудительный вызов закрытия проги. Когда найдешь, подымись немного выше и найди команду перехода. Она обязательно должна быть, потому что всегда используется алгоритм типа: "Если программа не зарегистрирована то перейти на выход проги, иначе перейти дальше". Твоей задачей стоит заменить условный переход, на безусловный (jmp) по адресу продолжения проги.
Для редактирования кода очень удобен Turbo Debugger (TD). Ты можешь в любой момент щелкнуть по любой строке кода правой кнопкой и выбрать пункт Assembler. Введи в появившемся окне новую команду на языке Assembler и TD вставит необходимый машинный код в выбранную строку. Единственный недостаток - сохранить этот код невозможно. Просто запомни его и адрес размещения, а потом поправь с помощью любого HEX-редактора (я предпочитаю Disk Editor).
Конец:
На этом считаю осмотр методов взлома прог оконченным. Этой инфы будет достаточно для взлома простых защит. Как я уже говорил, такие методы используются в 80-90% прог. Жаль только, что остальные проги самые распространенные.
Я заметил, что чем круче прога, тем лучше у нее защита. Я думаю, что чем больше ее используют, тем жаднее становятся программеры. С одной стороны они тоже кушать хотят. А с другой - это бессмысленно, потому что взломать можно все.
На этом наш обзор считаю оконченным. Запомни, что взламывая проги ты воруешь. Интеллектуальный труд такой же как и физический. Я считаю, что воровство интеллектуального труда должно быть приравнено к воровству физических предметов. С другой стороны, мы даем пользоваться своими вещами соседям, поэтому мы должны делиться и интеллектуальным трудом. Так что это булыжник с двумя сторонами.