Урок 2 - Взлом программы SwissClock

  1. SwissClock
  2. Быстренько ломаем
  3. Сохраняем результат для потомков

SwissClock

SwissClock
Рис. 1
SwissClock лежит
у меня тут (1.2). Ломать будем как только скачаете её. :)

SwissClock (автор Daniel Rutemann) - это маленькая... нет, это большая отстойная программа-часы (рис. 1) для тех, кому влом носить на руке часы, но не влом носить в кармане PDA, или для тех, кому жалко потратить 5 долларов на китайский будильник, но не жалко 250 долларов на американский PDA. Взял я её только для того, чтобы хоть что-то сломать. :)

Зачем мне что-то ломать, спросите вы. Очень просто. Во-первых, мне нужно написать этот второй урок, а для этого хочется найти что-нибудь новенькое, а не повторять второй раз взлом старых программ. Во-вторых, надо набить руку, а, в-третьих, это входит в условия членства в закрытом клубе пилотоманов. :)

Быстренько ломаем

SwissClock - Reminder
Рис. 2
Запущенная программа встречает нас недружелюбно и ставит на счётчик (рис. 2). Ну, за это она нам сейчас ответит. Быстренько запоминаем текст и заголовок этого предупреждения.

Cначала воспользуемся программкой prc2bin. Второй раз уже должно быть легко:

prc2bin.exe swissclock.prc

Файлов на этот раз очень много, поэтому лучше не просматривать их все, а сделать поиск по какому-нибудь слову из той формы, например, "entitles":

tFRM044c.bin	tFRM0578.bin	tFRM06a4.bin
tFRM04b0.bin	tFRM05dc.bin	tFRM0708.bin
tFRM0514.bin	tFRM0640.bin	tSTR03e8.bin

Тщательно сравнив две формы и немного поигравшись со SwissClock, можно определить, что tFRM0578.bin - это диалог About, а tFRM05dc.bin - это и есть мерзкий reminder. Его давить.

Руки уже чешутся отключить эту гадость, которая заставляет тратить нас драгоценные секунды жизни чёрт знает на что? Тогда вперед! Пускаем дизассемблер:

pilotdis.exe swissclock.prc

По первому уроку мы уже помним синтаксис вызова формы.

00000c3e   3f3c03ec				MOVE.W	#1004!$3ec,-(A7)

Перед идентификатором ресурса стоит знак доллара. Значит можно искать в файле swissclock.prc.s текст "$5dc". Ищем, находим только в одном месте:

0000433c   0c6d0002f9f4				CMPI.W	#2,-1548(A5)
00004342   544f					ADDQ.W	#2,A7
00004344   660a					BNE	L395
00004346   3f3c05dc				MOVE.W	#1500!$5dc,-(A7)
0000434a   4e4fa19c				TRAP	#15,$A19C = sysTrapFrmPopupForm
0000434e   544f					ADDQ.W	#2,A7
00004350   4ebafb80			L395	JSR	L372

Вначале выполняется CMPI.W (сравнение), потом через одну команду идёт условный переход к метке L395. А если перехода нет, то выводится гадкая форма... :( Надо всего лишь сделать переход безусловным. Делается это крайне просто.

00004344   600a					BRA	L395

Вместо байта 66h - условный переход (BNE) мы вставили байт 60h - безусловный переход (BRA). Смещение оставлено то же самое, поскольку команда наша на том же месте, что и старая. (вспомните, как в прошлом уроке, сдвинув команду на два байта вверх, пришлось увеличить смещение на два). Исправим файл, загрузим его в эмулятор или Пилот и проверим. Ура! Работает. Рисуем на пилоте вторую звездочку. :)

Запомните на будущее, как считать смещение для перехода. Нужно из адреса, куда мы будем переходить, вычесть адрес, в котором записана команда перехода, и из полученной разности вычесть ещё два. Пример:

00004350 - 0000 4344 = C       C - 2 = A     Смещение = 0A

Сохраняем результат для потомков

Наверное Вам уже хочется поделиться с окружающими своими новыми уменями и сломанными программами. Это похвально. Для этого нужно как-то оформить результат работы. Учитывая небольшие размеры программ для Palm, можно просто распространять сломанный вариант. Ну а если вам почему-то не хочется этого делать, то можно создать небольшой файлик со следующим содержимым:

swissclock.prc - 11.07.00 10:02:44, 33110 bytes
00004344	66		60
#Removes startup shareware reminder (every launch)

Как видите, здесь указана вся нужная информация. Описан оригинальный файл, указано, по какому адресу нужно менять код, оригинальное значение и "правильное". Наконец, написано, какого рода защита была и что программа делала, пока её не сломали. Обзовите такой файл swissclock.crk и всё готово.

Теперь осталось что-то сделать с этим файлом. Надо его послать на "варезную сцену" (warez scene). :) Там товарищи разберутся, куда его пристроить и всё станет хорошо. Так что берите этот файлик и заполняйте его. Получившиеся три файла (*.crk, pilowar.nfo и сломанный *.prc), а также те файлы, что были в оригинальной поставке, если они маленькие, нужно упаковать зипом и послать на pilowar@tech-center.com. В pilowar.nfo вы можете указать свой ник, это прославит вас на весь мир. :)

Урок 1 - DatePlan Урок 3 - HandMap
TopList

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