[ Главная | Ресурсы | FAQ ] Уроки: [ Введение | DatePlan | SwissClock | HandMap | MobileDB | Noter | ThinkDB | HandMap33 | Lingua Franca | AlarmMaster | Race Fever | TinySheet | Strategic Commander | FlipChart ]
Глюков в программе есть достаточно, но с ними приходится мириться из-за отсутствия реальной альтернативы. Quo Vadis не позволяет создавать свои карты, а остальные программы пока очень слабы...
7 июня вышла новая версия этой программы, 3.1. Её-то и надо сломать. Не вполне ясно, правда, что это за версия. На сайте она обозвана 3.1, поле version в самой программе показывает то же самое, а вот в окошке About гордо красуется надпись 3.2b. Вот и думай, что хочешь после этого...
Думаю, что вы без труда смогли найти нужные формы. Это два ресурса:
Talt03e8.bin Talt044c.bin
Обратите внимание, что на этот раз мы имеем дело не с tFRM, а с Talt. Впрочем, особой разницы здесь нет. Ну ладно, приступим к поиску нужного фрагмента в программе.
Уфф! Целых семь мест в программе содержат $3e8. Можно, конечно, долго думать, но мы пойдем другим путём. Воспользуемся одной замечательной программкой Debuffer, написанной Pam Sessoms. Программка эта представляет собой обыкновенный дебаггер. Мы поставим debugger break'и во всех семи местах, будем смотреть, когда HandMap будет вылетать в debugging mode и какой код в это время выполняется.
Пользоваться ею несложно. По всем семи адресам, где вы нашли ссылки на $3e8, поставьте команду 4e48. Это вызов дебаггера. Запустите дебаггер и эмулятор. Теперь загрузите HandMap в эмулятор и запустите её. Практически сразу же в окошке дебаггера появится приглашение командной строки.
Debuffer позволяет делать очень многие вещи, нужные взломщику и автору программ. Сейчас мы всего лишь посмотрим код, который сейчас выполняется. Сделать это очень просто:
pc @ 10 dis
Для подробного описания синтаксиса команд debuffer читайте его документацию. А пока вам нужно знать, что такая команда выводит следующие десять инструкций программы. Теперь вы легко можете найти, какой же из вызовов дебаггера сработал, а значит, какой кусок программы нас не интересует. Поменяйте вызов дебаггера на то, что было в этом месте программы в начале, перегрузите HandMap. После того, как HandMap по крайней мере загрузится, идите в меню About и пытайтесь зарегистрироваться. Нас интересует тот вызов дебаггера, что поставлен в программе сразу же после ввода кода.
Надеюсь, что теперь вы его нашли. Команда по адресу 0000b15a - это то, что мы искали.
0000b142 2f0a MOVE.L A2,-(A7) 0000b144 4ebafc14 JSR L1736 0000b148 222efffc MOVE.L -4(A6),D1 0000b14c b380 EOR.L D1,D0 0000b14e 2b40fc5c MOVE.L D0,-932(A5) 0000b152 4aadfc5c TST.L -932(A5) 0000b156 504f ADDQ.W #8,A7 0000b158 670c BEQ L1768 0000b15a 3f3c03e8 MOVE.W #1000!$3e8,-(A7) 0000b15e 4e4fa192 TRAP #15,$A192 = sysTrapFrmAlert 0000b162 544f ADDQ.W #2,A7 0000b164 600a BRA L1769 0000b166 3f3c044c L1768 MOVE.W #1100!$44c,-(A7) 0000b16a 4e4fa192 TRAP #15,$A192 = sysTrapFrmAlert 0000b16e 544f ADDQ.W #2,A7 0000b170 4267 L1769 CLR.W -(A7)
Самым простым кажется поменять условный переход по адресу 0000b158 на безусловный. Да, это действительно самое простое. Можете так и сделать. :)
Когда вы попробуете зарегистрировать HandMap, он вас поблагодарит. Но только когда вы попробуете загрузить какую-нибудь карту, он скажет Invalid map ver., а если вы выйдети и снова войдете, то предупредит вас, что версия у вас всё равно evaluation... Но не надо беситься и стучать стилусом. :) Надо просто разобраться, в чем же причина того, что HandMap себя так ведёт.
Давайте ещё раз посмотрим на код. Ясно, что после того, как мы направили программу по правильному пути с помощью безусловного перехода, её выполнение должно быть одинаково и в случае правильного кода, и неправильного. Значит, она успела что-то сделать до того, как мы вмешались. Или, наоборот, не сделать. Видимо, информация о регистрации должна где-то храниться, а HandMap ничего туда не записала. Ищем, где она это делает...
Ага! Чуть выше, в 0000b14c программа должна при правильной регистрации поместить в D0 нолик. А отсутствие нолика означает, что программа всё такая же evaluation. Вообще, если где-то есть команда EOR (это операция "исключающего или" - XOR, одна из побитовых операций), значит кто-то работает с кодами или паролями. Следующая команда размещает результат (это должен быть нолик) где-то далеко, а потом все проверки работают именно с этим сохраненны числом. Для того, чтобы "по настоящему" зарегистрировать программу, надо записать нолик туда, куда положено. Сделать это можно, например, так:
0000b14c 7000 MOVEQ #0,D0
...или так:
0000b14c 4280 CLR.L D0
Ясно, что в первом случае мы записываем ноль в D0, а во втором очищаем D0 (результат тот же). (Спасибо Timothy Lyangouzov, из письма которого я это взял.)
Урок 2 - SwissClock | Урок 4 - MobileDB |
Copyright © PalmPot.
Последнее обновление 13.07.2000.