_|________ ______|_ ____: /_ ____\ :______ __|____ _____|____|_________ | | \__ \_ |___ | |_ / / _| (_________________/_________________) TEAM-53 TUTORiALS PACK NUMBER EiGHTTEEN ::Регистрация Game Maker v 5.1:: Автор: Бойков Александр aka vtAlex Инструменты: REGMON, W32DASM Это моя первая статья по взлому прог, поэтому возможно что-то будет непонятно. Постепенно научусь писать, вот тогда прошу с критикой на vtAlexWork@mail.ru Позволю себе небольшое отступление. Где-то полгода назад я прочитал статью о взломе проги. В принципе, статья была хорошая, но что очень бросалось в глаза. Автор выёживался как мог, используя различный сленг. Да, это конечно модно сейчас, но...смотрелось это глупо. Я буду писать несколько иначе. Сразу хочу сказать : я не хакер и не взломщик. Могу назвать себя исследователем программ (в этом направлении :)). Т.е. за моим желанием сломать прогу стоит чисто спортивный интерес. Я сам программист, использую различаные языки (в зависимости от работы) и тоже учусь защищать свои проги как могу, а когда ты ломаешь чужие творения, ты понимаешь, где ошибки, недоработки и т.д. Итак, всё же перейдём к тому, ради чего мы здесь собрались. Сначала осмотрим программу снаружи. На рабочей панели находится пиктограмма с замком. Очевидно, что она исчезнет после регистрации, чтобы не надоедать своим видом. В принципе, отсюда уже можн исходить, но мы пойдём дальше(и сделаем проще). Проанализировав регистрацию видим, что проге требуется логин и пароль, которые она будет где-то хранить, для того, чтобы потом читать их и смотреть, зарегистрирована ли она. Скорее всего это реестр. Запускаем REGMON, натравливаем на Game_Maker.exe и снова запускаем жертву. В конце видим обломанный запрос на PREF_KEY (как думаете, что это? :)). Немного поиграем с программой. Запишем ей нужный PREF_KEY в HCU\Software\Game Maker\Preferences\. Результат не заставляет ждать. Но теперь, когда есть PREF_KEY, программа требует PREF_NAME, чтож, дадим ей и это :)...Теперь программа получила свои данные, обработала их и поняла, что пароль и логин не совместимы. Заставим её поверить в то, что это не так :). Возьмёмся за W32DASM. Мы не будем отучать её от получения из реестра данных о пользователе, произведём нормальную регистрацию. Итак, что нам говорила программа на неправильные введённые данные, она говорила: "The combination of name and key...". Ищем такую строку в W32DASM. Нашли? Ok, теперь посмотрим чуть выше. Ну что? Ясно как божий день... Следующий отрывок говорит сам за себя: :00549D1F 8B45F8 mov eax, dword ptr [ebp-08] :00549D22 E8A515F8FF call 004CB2CC :00549D27 84C0 test al, al :00549D29 7420 je 00549D4B * Possible StringData Ref from Code Obj ->"Your copy of Game Maker is now " ->"registered. Thanks for supporting " ->"Game Maker." | :00549D2B B8849D5400 mov eax, 00549D84 :00549D30 E8CFDDEEFF call 00437B04 :00549D35 33D2 xor edx, edx :00549D37 8B830C030000 mov eax, dword ptr [ebx+0000030C] :00549D3D E80E2AF3FF call 0047C750 :00549D42 8BC3 mov eax, ebx :00549D44 E88702F5FF call 00499FD0 :00549D49 EB0A jmp 00549D55 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00549D29(C) | * Possible StringData Ref from Code Obj ->"The combination of name and key " ->"is not correct. Please enter the " ->"correct values." | :00549D4B B8DC9D5400 mov eax, 00549DDC :00549D50 E8AFDDEEFF call 00437B04 Идёт сравнение al и от результата выводится либо сообщение о зарегистрировании, либо об ошибке. Это можно проверить: в режиме дебага поменяйте je на jne... Однако, если это проделать, програма зарегистрируется, но при последующих проверках снова будет считать, что не зарегистрирована. Придётся копать глубже. Перейдём на последний CALL перед je. Ставим брейк на первую команду блока. Пытаемся зарегистрировать (на любое имя и любой пароль). Выходим на брейк. При помощи F8 доходим до строки je 004CB329. Перед этим опять test al, al..Проанализируем. Программа проскакивает строки с PREF_KEY и PREF_NAME. Чтож, пропатчим на jne... и перейдём дальше. После каких-то проверок и расчётов (не столь важно), программа проводит операцию: :004CB34B 8BC3 mov eax, ebx Тобишь в al что-то кладётся из bl и дальше следует выход, после которого сравнение al, al в вызывающем блоке. Сделаем финт ушами и пропишем mov al, 1 (тем самым не меняя размера операции(2 б.))...Далбше RUN и видим перед собой заветное "Your copy of Game Maker is now registered...". Осталось пропатчить прогу каким-нибудь HEX-редактором (я исполььзую Ultra Edit 32) или сделать крэк, если не лень. Или уж в крайнем случае написать мне :), у меня есть готовый кряк. Бойков Александр aka vtAlex vtAlexWork@mail.ru.