Извлекаем пароль из JIMM ПРЕДИСЛОВИЕ: Бывает такое, что по какой либо причине вы забыли пароль от ICQ, но он остался сохраненным в JIMM и тогда появляется необходимость выдрать его от туда, но увы это оказывается очень тяжело. При условии что, пароль нельзя скопировать из поля ввода и он закрыт звездочками. Всё что тут будет описано, касается платформы MIDP-2.0 (на других не проверял) ПРИЧИНА НАПИСАНИЯ СТАТЬИ: Как-то раз решил сменить пароль от своего шестизнака, но как выяснилось – я забыл старый пароль. Зато он был сохранен в QIP Infium и JIMM. Все попытки восстановления через мыло не удались (возможно потому, что номер был инвизом). При этом Infium был настроен на использование SSL и по этому отснифать не получилось, а при попытке настроить через обычный коннект, Infium вообще стер пароль и затребовал его сново. Готовых реализаций и статей в инете я не нашел. В виду того, что это был шестизнак, как-то не хотелось использовать публичные ICQ снифферы, а ставить свой – не было возможности. Вот и пришлось разбираться с JIMM. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ: В платформе MIDP-2.0 данные JAVA приложений хранятся в RMS (Record Management System). В зависимости от модели телефона RMS в файловой системе может представлять из себя разного рода файлы. default_rms_*.db или *.rms итд. Другими словами присутствуют буквы rms. Эти файлы чаще всего находятся в папке с JAVA приложениями. Это было описано, как всё организовано со стороны телефона. Теперь разберемся с JIMM. Для этого понадобились исходники. Архив с исходниками нам дал следующее: Прочитав CHANGES выяснилось: VERSION 0.1 BETA-4 - Password is now encrypted saved (trivial algorithm) VERSION 0.4.0 - Password is saved in UTF-8 format now Другими словами теперь мы знаем, что пароль шифрован (простым алгоритмом). А также то, что все русские символы кодированы в UTF-8 Далее покопавшись в исходниках, была найдена в модуле Util.java следующая функция: Code: public static final byte[] PASSENC_KEY = explodeToBytes( "F3,26,81,C4,39,86,DB,92,71,A3,B9,E6,53,7A,95,7C", ',', 16); ……………………………………… // DeScramble password public static byte[] decipherPassword(byte[] buf) { byte[] ret = new byte[buf.length]; for (int i = 0; i < buf.length; i++) { ret[i] = (byte) (buf[i] ^ Util.PASSENC_KEY[i % 16]); } return (ret); } Как видно из кода эта функция шифрует / расшифровывает пароль через XOR с использованием таблицы PASSENC_KEY. Вот мы уже знаем алгоритм по которому в дальнейшем будет расшифровывать пароль. Теперь алгоритм наших действий должен быть примерно таков: 1) Запускаем JIMM 2) Добавляем в начало пароля определенные символы, сохраняем и закрываем JIMM 3) Подключаем телефон к компу и скачиваем rms файл 4) Ищем определенную последовательность байт 5) Дешифруем пароль и при необходимости переводим его из UTF-8 в ANSI ПРАКТИЧЕСКАЯ ЧАСТЬ: Из дополнительных инструментов нам понадобятся следующие: - WinHEX или любой другой HEX редактор - Delphi( для дешифрования пароля) ШАГ 1 Открываем Delphi. На форму кидаем 2 edit и 2 button Edit1 – поле ввода Edit2 – поле вывода Button1 – будет расшифровывать пароль Button2 – будет шифровать введенные данные Код программы: Code: const PASSENC_KEY:array[0..15] of byte = // таблица для шифрования / дешифрования ($F3,$26,$81,$C4,$39,$86,$DB,$92,$71,$A3,$B9,$E6,$53,$7A,$95,$7C); function decipherPassword(buf:string):string; // функция для расшифрования var ret:string; i:integer; begin ret := ''; for i := 0 to length(buf) - 1 do ret := ret + chr(ord(buf[i+1]) xor PASSENC_KEY[i mod 16]); result := ret; end; // Шифрует procedure TForm1.Button1Click(Sender: TObject); var HEXDATA:string; DATA:string; i:integer; begin HEXDATA := edit1.Text; DATA := ''; for i := 1 to length(HEXDATA) div 2 do DATA := DATA + chr(strtoint('$'+copy(HEXDATA,(i*2)-1, 2))); edit2.Text := UTF8ToAnsi(decipherPassword(DATA)); end; // Расшифровывает procedure TForm1.Button2Click(Sender: TObject); var HEXDATA:string; DATA:string; i:integer; begin DATA := decipherPassword (edit1.Text); HEXDATA := ''; for i := 1 to length(DATA) do HEXDATA := HEXDATA + inttohex(ord(DATA[i]),2); edit2.Text := HEXDATA; end; ШАГ 2 Запускаем JIMM. Заходим в настройки аккаунта. В начало уже существующего пароля добавляем 3 цифры – 123(какие именно – роли не играет). Сохраняем настройки и выходим из JIMMa. ШАГ 3 Подключаем телефон к компьютеру и копируем все файлы, связанные с rms. В моём случае(телефон MOTOROLA) я воспользовался P2KTools и скопировал все файлы C \ kjava \ *.rms. На других телефонах могут быть другие имена файлов. Далее просмотрев каждый из файлов неоходимо найти именно тот, который нам нужен. Делаем это через простой поиск ICQ номера, который вбит в настройках. У меня это оказался j2me9.rms ШАГ 4 Запускаем скомпилированную программку. В Edit1 вписываем 123 и нажимаем button2 для шифрования этого текста. В поле Edit2 мы получим текст: C214B2 – это как раз и будет сигнатура для поиска пароля в файле. ШАГ 5 Открываем найденный файл в WinHEX и ищем наши HEX данные Поиск -> Поиск HEX-данных (Ctrl + Alt + F) в открывшееся окно вписываем C214B2 и нажимаем OK для поиска. При желании F3 – для продолжения поиска. Найденные данные должны быть следующего формата E4 00 N C2 14 B2 XX XX XX XX XX XX 24 N – длинна пароля с учетом того что он перекодирован в UTF-8. ВНИМАНИЕ: N – это шестнадцатеричное значение, так что не ошибитесь при копировании нужного кол-ва байт. При этом на счет чисел E4 и 24 я сомневаюсь, т.е. может это просто совпадение. При этом E4 и 24 – для первого UIN’a, а E5 и 25 – это для второго UIN’a. Так что не обещаю что у вас они будут. У меня в нескольких копиях аськи именно эти числа были постоянно. Если не нашли нужное место, то жмем F3 для продолжения поиска. Когда необходимый блок данных будет найден, выполним следующие действия: 1) выделим N байт начиная с символов C2 14 B2 2) Правка - > Copy Block -> Hex – значения (CTRL + SHIFT + C). Для того чтобы поместить в буфер обмена наши данные в HEX виде. 3) Вставляем эти данные в нашу программку в поле edit1 и нажимаем button1 для дешифрования. 4) В поле edit2 появятся данные 123XXXXXX где XXXXXX – пароль. Вот и всё. Мы получили пароль. Данный метод был протестирован на Motorola L6, Motorola L7, И на RMS файлах создаваемых эмулятором Midp2Exe. Везде удачно получилось дешифровать пароль. (С) SLESH 2009
для меня лично не актуально-юзаю квип мобаил, но очень часто встречал данную тему на форуме, по этому зачот.
2 nonamez Когда-то тема была очень актуальной. Но сейчас всё у большего и большего числа людей появляются сматфоный. MIDP отмирает. Вообще можно было бы написать программку которая сама бы делала бы эти действия, но нед под рукой большого числа телефонов для теста.
у меня как раз такая ситуация как в начале статьи указано, зато перешёл на шоху. Всё что не делается, делается к лучшему)
а я недавно забыл пароль от дима на телефоне..,хотел чисто файлы сохранения с прошлого телефона на новый перебросить, да забил (нада патч устанавливать ,потом через фар копировать...- ЗАБИЛ,да и чутка подзабыл =) )...,щас вот все вспомнить нимагу =(
P.S. Народ, если комуто не влом, то плз проверьте у себя работоспособность данного способа. Особенно больше всего интересуют магические числа E4/E5 и 24/25. Если у всех будет так, то напишу прожку которая будет сама всю работу делать.
хм. Для Jimm Core ( 0.5.2 ) E4 и E5 есть, а вот 25 и 24 вконце отсутствуют. Скорее всего идентификаторы идут в другой последовательности
помоему легче поставить на комп "icq msg loger" или "Icq password recalling" и подключиться с телефона к своему ip. Но если нет такой возможности, то интересный способ. Хорошая статья
2 meisterr в том то и дело что все компы или за проксёй или за натом или еще чтонить, что не дает доступа из инета.
подключаться к к системе (папкам и файлам) нуно не просто через передачу файлов ! ,а через FAR , и драйвер нуно установить специальный ,чтоб к фар подключиться..,,,а там уже ,возмоно это : tpa\preset\system\ams\java\db\
К Фару нужен плагин SEFP. Давно не занимался этим,поэтому проги старые,наверно уже новые версии есть.
вирт вроде как то писал статью на подобную тему, но там если не ошибаюсь вывернул исходники почти полностью...
http://forum.motofan.ru/index.php?showtopic=147890 вот отличная штука для этого, работает восстановил свой пароль!