Форум АНТИЧАТ (http://forum.antichat.ru/index.php)
-   Авторские статьи (http://forum.antichat.ru/forumdisplay.php?f=31)
-   -   Извлекаем пароль из JIMM (http://forum.antichat.ru/showthread.php?t=127871)

slesh 01.07.2009 20:26

Извлекаем пароль из JIMM
 
Извлекаем пароль из 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 следующая функция:

Код:
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 – будет шифровать введенные данные

Код программы:
Код:
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

nonamez 01.07.2009 20:59

для меня лично не актуально-юзаю квип мобаил, но очень часто встречал данную тему на форуме, по этому зачот.

slesh 01.07.2009 21:07

2 nonamez Когда-то тема была очень актуальной. Но сейчас всё у большего и большего числа людей появляются сматфоный. MIDP отмирает.
Вообще можно было бы написать программку которая сама бы делала бы эти действия, но нед под рукой большого числа телефонов для теста.

Тихий 01.07.2009 21:37

у меня как раз такая ситуация как в начале статьи указано, зато перешёл на шоху. Всё что не делается, делается к лучшему)

3NT3R 01.07.2009 22:18

а я недавно забыл пароль от дима на телефоне..,хотел чисто файлы сохранения с прошлого телефона на новый перебросить, да забил (нада патч устанавливать ,потом через фар копировать...- ЗАБИЛ,да и чутка подзабыл =) )...,щас вот все вспомнить нимагу =(

Бульба 01.07.2009 22:24

Да с этими поролями весь запутаешся...
Тож очень часто вспоминать приходится..

slesh 01.07.2009 22:34

P.S. Народ, если комуто не влом, то плз проверьте у себя работоспособность данного способа. Особенно больше всего интересуют магические числа E4/E5 и 24/25.
Если у всех будет так, то напишу прожку которая будет сама всю работу делать.

slesh 01.07.2009 23:09

хм. Для Jimm Core ( 0.5.2 ) E4 и E5 есть, а вот 25 и 24 вконце отсутствуют. Скорее всего идентификаторы идут в другой последовательности

meisterr 01.07.2009 23:34

помоему легче поставить на комп "icq msg loger" или "Icq password recalling" и подключиться с телефона к своему ip. Но если нет такой возможности, то интересный способ. Хорошая статья

t4Nk 01.07.2009 23:38

хм.. может кто знает где jimm хранит пароли на Эриксонах?


Московское время: 15:57.

Powered by: vBulletin Version 3.0.x
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.