Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #96, ДЕКАБРЬ 2006 г.

Карманное рукоприкладство

goabruce & porosenok

Хакер, номер #096, стр. 096-076-3


- запустить ActiveSync (он сразу появиться в трее);

- открыть Device Emulator Manager (по умолчанию он находится в каталоге C:\Program Files\Microsoft Device Emulator\1.0\);

- в Device Emulator Manager выбрать «Pocket PC 2003 SE Emulator», затем в меню выбрать «Connect»;

- после того, как откроется окно эмулятора, в Device Emulator Manager выбрать соединение Cradle; делается это в контекстном меню при помощи клика правой кнопкой по «Pocket PC 2003 SE Emulator».

После выполнения всех перечисленных выше действий программы автоматически соединятся. Теперь можно приступать непосредственно к установке приложения. Эта процедура в КПК не сильно отличается от таковой в ПК :). Запустив уже установленное приложение, я читаю диагноз. В нем говорится, что больной проживет максимум 15 дней, если не дать ему лекарство :(. Регистрация приложения осуществляется вводом 16-символьного ключа. Смотрю, что внутри у этой программы, открыв ее в рефлекторе. Сразу бросаются в глаза пространство имен SlipstreamSolutions.MyRegistration и 2 метода, находящиеся там: Hash(String) : String и UnHash(String) : String. Но я пока оставляю их и смотрю дальше. Следующее, что может меня заинтересовать, - это обработчик нажатия кнопки «Register», он называется «btnRegister_Click(Object, EventArgs) : Void». Обработчик достаточно прост, он собирает введенный код в одну строку и передает его функции UnHash. Затем, если длина строки, полученной после UnHash, будет больше «mBlueSche» (условие № 1) и будет начинаться с «mBlueSche» (условие № 2), можно увидеть поздравления. Автор также оставил в приложении функцию Hash, вероятно, чтобы доброжелатели не мучались с взломом программы :). Но я не ищу легких путей, поэтому не буду пользоваться оставленной лазейкой. Я просто пропатчу дизассемблирую прогу с помощью ildasm, но не правкой одного байта, а исправлением функции UnHash, чтобы она всегда возвращала строку «mBlueSche » с несколькими пробелами в конце (для удовлетворения условию № 1). Теперь я делаю ее дамп, то есть дизассемблирую, выбрав в меню соответствующий пункт, при этом выставляю все галочки. Итак, дамп готов. Теперь найду в нем функцию UnHash. Она располагается почти в конце файла и обнаруживается по значению 0xb7dc, это ее RVA. Теперь вернусь к рефлектору и посмотрю на функцию UnHash в нем. В конце этой функции есть строка:

text1.Trim(" ".ToCharArray());

Заменю ее:

return "mBlueSche "

Для этого снова вернусь к дизассемблированному дампу. Все строки хранятся в одном месте программы (блок «User Strings»). Мне нужно найти строку подходящей длины, исправить ее и затем в инструкции ldst указать ее идентификатор. Например, строка «picIcon.Image» вполне подойдет, ее идентификатор - 70000067. Теперь ее нужно заменить:

Назад на стр. 096-076-2  Содержание  Вперед на стр. 096-076-4