Урок 6 - Взлом программы ThinkDB

  1. ThinkDB
  2. Взлом

ThinkDB

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
TopList

Copyright © PalmPot.
Последнее обновление 03.02.2001.