Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #66, МАЙ 2006 г.

ключевой процесс

GETORIX | INT3

Спецвыпуск: Хакер, номер #066, стр. 066-054-6


ДЛЯ НИХ ЖЕ HANDAGOO ЛЮБЕЗНО ВЫЛОЖИЛА ПРОГРАММУ ПРОВЕРКИ — DYNAMIC REGISTRATION CODE TESTER [HTTP://DEVELOPER.HANDANGO.COM/REGCODE.JSP], В КОТОРУЮ НЕОБХОДИМО ВВЕСТИ RPN И ИМЯ (OWNER), ПОСЛЕ ЧЕГО БУДЕТ АВТОМАТИЧЕСКИ ПОСЧИТАН КЛЮЧ. НЕ ПРАВДА ЛИ, ПРОСТО? ЕСЛИ УЧЕСТЬ, ЧТО OWNER НАМ ИЗВЕСТЕН, ОСТАЕТСЯ ТОЛЬКО НАЙТИ В ПРОГРАММЕ ЗАВЕТНУЮ СТРОКУ RPN.

[может быть, простое везение], а может, недосмотр автора привел нас к вот этому блоку кода (см. «Формирование строки RPN в памяти»).

формирование строки RPN в памяти

.text:0001CFDC MOV R1, #2 ; size

.text:0001CFE0 MOV R0, #0x80 ; num

.text:0001CFE4 BL calloc [выделяем место в памяти]

.text:0001CFE8 MOV R2, R6,LSL#16

.text:0001CFEC LDR R3, =asc_48EE4

.text:0001CFF0 LDR R1, =aUIKeyC5S2KeyI ; wchar_t *

.text:0001CFF4 MOV R2, R2,ASR#16

.text:0001CFF8 MOV R4, R0

.text:0001CFFC BL swprintf [записываем строку по формату]

С помощью функции calloc выделяется чистый блок памяти, затем (при использовании найденной выше строки в качестве формата) функцией swprintf в этом блоке формируется RPN.

Установим breakpoint на адрес 1CFFC и запустим отладчик. После остановки можно изучить передаваемые параметры. Вот они:

char *buffer — 92D90 [указатель на пустое место]

const char *format — "%u i key * c 5 %s << 2 * + key i << +"

argument 1 — 0x05B7 [1463]

argument 2 — "%"

Чтобы увидеть результат (а именно, готовую RPN), необходимо перейти в память по адресу 92D90 и выполнить функцию swprintf.

вид RPN в памяти программы

debug905:00092D90 31 00 34 00 36 00 33 00 20 00 69 00 20 00 6B 00 1.4.6.3. .i. .k.

debug905:00092DA0 65 00 79 00 20 00 2A 00 20 00 63 00 20 00 35 00 e.y. .*. .c. .5.

debug905:00092DB0 20 00 25 00 20 00 3C 00 3C 00 20 00 32 00 20 00 .%. .<.<. .2. .

debug905:00092DC0 2A 00 20 00 2B 00 20 00 6B 00 65 00 79 00 20 00 *. .+. .k.e.y. .

debug905:00092DD0 69 00 20 00 3C 00 3C 00 20 00 2B 00 00 00 00 00 i. .<.<. .+.....

Кажется, теперь все необходимые ингредиенты для генерации ключа известны. Так что можно отключить все breakpoints и на этой радужной ноте закончить исследовательскую часть.

[теперь, зная RPN] и измененный Owner, перейдем на страничку тестирования [http://developer.handango.com/RegCode.jsp] и там введем данные в соответствующие поля. Итак, смотрим:

Owner: Getorix

RPN: 1463 i key * c 5 % << 2 * + key i << +

Нажимаем кнопку Calculate Registration Code и получаем:

The Registration Code for this user will be: 19539

Убираем breakpoints, запускаем программу в нормальном режиме и пытаемся зарегистрироваться с полученным ключом. «Thank you for registering our product», — говорит Lexisgoo. «Ура-ура!» — доносится из глубины души...

[на посошок] можно сказать, что Handango Dynamic Registration очень распространена среди программ для PocketPC, но, как можно было убедиться, она не создает надежной защиты. Количество «исследователей» PocketPC-программ растет с каждым днем, и можно только удивляться авторам, которые используют эту защиту, но не торопятся обезопасить свой программный продукт.

Назад на стр. 066-054-5  Содержание  Вперед на стр. 066-054-7