Ломаем наяву 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. Давай заглянем в эту функцию: |