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

Ломаем наяву

EGOiST/TSRh (icq: 8507375)

Хакер, номер #088, стр. 088-074-4


триальность

g()

{

super("Biorhythm");

m_aCommand = new Command("Launch", 4, 1);

addCommand(new Command("Exit", 2, 2));

setCommandListener(this);

append(String.valueOf(Math.max(0, 10 - Biorhythm.m_doI)));

append(" trial launches left. Get the full version at www.tlogic.de. The developer appreciates your support.\n");

if(Biorhythm.m_doI >= 11)

{

return;

} else

{

append("\nPlease select 'Launch' to start.");

(new Thread(this)).start();

return;

}

}

Функция append(..) выводит сообщение на экран. Видно, что если m_doI больше или равна 11, то запуска потока не происходит, следовательно, после сообщения возможности запуска нет. Посмотрим, где изменяется эта переменная:

триальность

if(command.getCommandType() == 4)

{

Biorhythm.m_doI++;

Biorhythm._aZV(false);

Biorhythm._aDisplayableV(new a());

} else

{

Biorhythm.m_aBiorhythm.destroyApp(true);

}

Если номер команды совпадает с 4 (присваивается к Launch в предыдущем куске), то количество использованных дней увеличивается на 1. В JavaBite видно, как это происходит. Я думаю, ты знаешь что делать: заменить iconst_1 на iconst_0, тем самым к счетчику будет прибавляться 0. Получится вечный триал. Тебе придется хорошенько подумать, как убрать эту наглую надпись :).

[необычно]

Сейчас я поведаю тебе о необычном взломе. Аську на телефоне юзает много народу, зачастую используют Jimm, и не подозревая, что некоторые im-клиенты совсем даже и небесплатные. С одним таким примером я и столкнулся. Это будет MSN-клиент (именно среди msn-клиентов большинство платных) UltraIM. Запустил на декомпиляцию? Для начала следует взлянуть на эмулятор, то есть на клиент, запущенный на нем. При запуске он просит какой-то ключик. Попробуй что-нибудь ввести, например Key format invalid. От него и оттолкнемся, ищем такую строку в .java-файлах. Найдено в b.java:

псевдо-проверка

if((s = s.trim()).length() != 15)

{

Alert alert;

(alert = new Alert("", "Key format invalid.", null, null)).setTimeout(-2);

UltraIM.m_aDisplay.setCurrent(alert);

return;

} else

{

m_aString = s;

m_bString = _aStringString(s);

_evV();

_aStringV("Registration is processing, please wait...");

return;

}

Самый понятный деобфусцированный код. В s находится введенный ключик. Длина ключа сравнивается с 15. Если не сходится, то ошибка, если сходится... а вот остановимся на этом поподробнее. Сначала попробуем ввести что-нибудь из 15 знаков. Хорошо, что в мобильники встроены файрволы :). Сименс сразу выдал, что мидлет рвется в Интернет, да еще и адрес показал. Давай посмотрим, что конкретно происходит. После длины проверки ключа он присваивается m_aString и передается в функцию _aStringString(String s), а результат приписывается m_bString. Давай заглянем в эту функцию:

Назад на стр. 088-074-3  Содержание  Вперед на стр. 088-074-5