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

Ломаем наяву

EGOiST/TSRh (icq: 8507375)

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


stringbuffer.append("b=" + s2 + "&");

if(s != null)

stringbuffer.append("c=" + n._aStringvString(s, 0) + "&");

if(s3 != null)

stringbuffer.append("d=" + s3);

int i;

if((i = (s5 = stringbuffer.toString()).length()) > 0 && s5.lastIndexOf('&') == i - 1)

s5 = s5.substring(0, i - 1);

int j;

if((j = (httpconnection = (HttpConnection)Connector.open("http://www.mobisophy.com/servlets/AuthenS?" + s5)).getResponseCode()) == 200)

{

String s6 = httpconnection.getHeaderField("aaa").trim();

В этой функции создается GET-запрос скрипту (видимо, скрипту авторизации). В запросе параметры передаются так: a - ключ, b - хэш, d - видимо, версия клиента. Вот что получается: "http://www.mobisophy.com/servlets/AuthenS?a=ключ&b=хеш&d=1.31.1000". Но, если открыть такую ссылку в браузере, конкретно ты ничего не заметишь. Смотрим дальше на код. Сразу после запроса мидлет читает заголовок ответа, а точнее параметр "ааа" String s6 = httpconnection.getHeaderField("aaa").trim(), затем переводит его из строки в число и в зависимости от ответа выдает ошибку, используя класс ax. Но это происходить только, если длина ответа меньше или равна 3-м символам, иначе ответ присваивается s4 и в конце возвращается в виде результата. Давай вернемся назад. При вызове этой функции используется блок try{}. А там мы видели нечто throw new ax(..) - так вызывается принудительное исключение, - и блок try{} вылетает и передает управление блоку catch(){}, в котором происходит показ сообщения об ошибке. Несложно понять, что, если ответ сервера в параметре "ааа" будет больше 3-х символов, ошибки не будет, и код продолжит работу. То есть, если наш ключ приняли, дальше происходит вызов функции _bIStringV(int i, String s, String s1), в том же k классе. Там серверу просто сообщается о том, что мы в очередной раз воспользовались их клиентом. Если у тебя есть аккаунт на MSN, то непременно воспользуйся им. При подключении заметен еще один нюанс: клиент передает имя аккаунта (e-mail адрес) опять же туда на сервер - делается это для привязки триала к аккаунту. Если ты ухитришься и сможешь удалить настройки клиента (а там хранится локальный триал), то при подключении к своему аккаунту все равно получишь мессагу о том, что триала уже нет. А с другой стороны, они накапливают e-mail базу. В таких случаях, как этот, когда прога сама по себе сетевая и использует онлайн-активацию/проверку, я обхожусь меньшим геморроем и пишу свой скрипт, отвечающий на все запросы "правильно". Я просто предлагаю заменить адрес скрипта "http://www.mobisophy.com/servlets/AuthenS?" на свой. Сделать это можно двумя способами: с помощью хекс-редактора, либо программой MobiTrans, от автора JavaDec. Ему отдельное спасибо за такие программы, которые облегчают работу. В MobiTrans открываем k.class, в появившемся окошке надо выбрать "class-файлы". Видим несколько строк - нужно поменять последнюю. Вписываем адрес своего скрипта, сохраняем. На выходе будет новый класс - k.class.rus. Заменяем им старый. На этом патч закончен. Можно добавить, что если ты пользуешься просто хекс-редактором, то нужно соблюдать длину изменяемой строки, чтобы она соответствовала оригиналу. Осталось написать сам скрипт. Я написал его на php, а ты можешь писать на чем угодно. Скрипт содержит всего одну строку: "<?header("aaa: 12345678901");?>". Таким образом, в ответ на запрос всегда приходит "правильный" ответ, да и мыло твое теперь никуда не утечет.

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