[ Главная | Ресурсы | FAQ ] Уроки: [ Введение | DatePlan | SwissClock | HandMap | MobileDB | Noter | ThinkDB | HandMap33 | Lingua Franca | AlarmMaster | Race Fever | TinySheet | Strategic Commander | FlipChart ]
ThinkDB - это хорошая база данных с серьезными возможностями.
Проверка ресурсов. Найдены
Talt03e8.bin - Error (пустой диалог) Talt044c.bin - Info (пустой диалог) Talt04b0.bin - функция доступна только в полной версии tFRM0578.bin - окно регистрации tFRM070a.bin - nag-screen
А code0001.bin содержит слово "invalid"
Находим очень много ссылок на $3e8 и $44c. Вариант тупого перебора отбрасываем. Остальные формы откладываем на тот случай, если будет совсем сложно. А пока используем опыт последних уроков. Если есть пустая форма, то где-то есть для нее строчки, в частности, та же самая "invalid". Находим эту строку под меткой L1683. Ищем рядом, находим L1685 ("Thank you"). Ссылка на этот ресурс только в одном месте, по адресу 0000ebf2. Ниже сслыка на L1685.
0000ebdc 2b40cedc MOVE.L D0,-12580(A5) 0000ebe0 4eadfe98 JSR -360(A5) 0000ebe4 4a40 TST.W D0 0000ebe6 584f ADDQ.W #4,A7 0000ebe8 661c BNE L1677 0000ebea 42a7 CLR.L -(A7) 0000ebec 41fa00de LEA L1682,A0 0000ebf0 4850 PEA (A0) 0000ebf2 41fa00da LEA L1683,A0 0000ebf6 4850 PEA (A0) 0000ebf8 3f3c03e8 MOVE.W #1000!$3e8,-(A7) 0000ebfc 4e4fa194 TRAP #15,$A194 = sysTrapFrmCustomAlert 0000ec00 4fef000e LEA 14(A7),A7 0000ec04 607c BRA L1679 0000ec06 42a7 L1677 CLR.L -(A7) 0000ec08 41fa00e0 LEA L1684,A0 0000ec0c 4850 PEA (A0) 0000ec0e 41fa00dc LEA L1685,A0 0000ec12 4850 PEA (A0) 0000ec14 3f3c044c MOVE.W #1100!$44c,-(A7) 0000ec18 4e4fa194 TRAP #15,$A194 = sysTrapFrmCustomAlert
Алгоритм программы ясен. Переносим D0 (контрольная сумма какая-нибудь) в 12580(A5), где она хранится. Потом тестим D0 и в зависимости от результата переходим к нужному диалогу, "invalid" или "Thank you". Попробуйте сами подправить программу в этом месте, чтобы она заработала нормально и позволяла регистрировать себя любым кодом. А потом пойдём дальше и из любопытства посмотрим, что программа делает с -12580(A5) и как она себе проверяет на зарегистрированность. Выясняется, что ссылка на этот адрес только в двух местах, в том, что мы уже видели и по адресу 000158a4.
000158a4 b6adcedc CMP.L -12580(A5),D3 000158a8 4fef0018 LEA 24(A7),A7 000158ac 6604 BNE L2321 000158ae 7001 MOVEQ #1,D0 000158b0 6002 BRA L2322 000158b2 7000 L2321 MOVEQ #0,D0 000158b4 600a L2322 BRA L2324
Здесь программа сравнивает это значение с регистром D3. Естественно, значение в этом регистре генерится в зависимости от HotSync User Name. Проверить это и, собственно, посмотреть это значение можно с помощью Debuffer. Нужно поставить в 000158a4 вызов дебаггера (4e48) и в debuffer посмотреть регистры командой .regs. Однако, заморачиваться с поиском алгортма генерации регистрационного кода по имени мы не будем. Посмотрев на код программы, мы видим, что в зависимости от регистрированности программы в D0 записывается ноль или единица. И всё, что нам нужно сделать, это поменять 000158ac на безусловный переход или забить эту команду пустышкой 4e71. Чтобы понять, что же нам нужно, ноль или единица, надо либо разобраться с синтаксисом команды CMP.L в руководстве по командам процессора (правильный вариант), либо попробовав оба варианта (тупой вариант).
Когда вы так или иначе найдёте ответ, то программа перестанет при запуске выводить свой nag-screen и с самого начала будет считать, что она зарегистрированная. Ограничение на 4 базы данных будет снято. Как видите, это решение более элегантное, чем исправление программы в процедуре регистрации, когда от пользователя требуется выполнять действия по "регистрации" программы. Когда возможно, лучше этого избегать.
Урок 5 - Noter | Урок 7 - HandMap 3.3 |
Copyright © PalmPot.
Последнее обновление 03.02.2001.