Меню сайта

Категории раздела
Мои статьи [7]
IT- Статьи на компьютерную тематику [4]
Шутки, юмор, приколы [2]

Главная



| RSS


Wwworm


Вторник, 07.05.2024, 01:36

извлекаем пароль из 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. Везде удачно получилось дешифровать пароль.



Источник: http://forum.antichat.ru/threadnav127871-1-10.html
Категория: Мои статьи | Добавил: wwworm-12 (16.02.2010) | Автор: Wwworm
Просмотров: 2698 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск

Друзья сайта

Copyright MyCorp © 2024