Авторские статьи Извлекаем пароль из JIMM

Discussion in 'Статьи' started by slesh, 1 Jul 2009.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Извлекаем пароль из 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
     
    #1 slesh, 1 Jul 2009
    Last edited: 1 Jul 2009
    6 people like this.
  2. nonamez

    nonamez Elder - Старейшина

    Joined:
    22 Jul 2007
    Messages:
    565
    Likes Received:
    265
    Reputations:
    17
    для меня лично не актуально-юзаю квип мобаил, но очень часто встречал данную тему на форуме, по этому зачот.
     
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 nonamez Когда-то тема была очень актуальной. Но сейчас всё у большего и большего числа людей появляются сматфоный. MIDP отмирает.
    Вообще можно было бы написать программку которая сама бы делала бы эти действия, но нед под рукой большого числа телефонов для теста.
     
  4. Тихий

    Тихий New Member

    Joined:
    4 Oct 2008
    Messages:
    22
    Likes Received:
    2
    Reputations:
    0
    у меня как раз такая ситуация как в начале статьи указано, зато перешёл на шоху. Всё что не делается, делается к лучшему)
     
  5. 3NT3R

    3NT3R Member

    Joined:
    21 Apr 2009
    Messages:
    3
    Likes Received:
    48
    Reputations:
    5
    а я недавно забыл пароль от дима на телефоне..,хотел чисто файлы сохранения с прошлого телефона на новый перебросить, да забил (нада патч устанавливать ,потом через фар копировать...- ЗАБИЛ,да и чутка подзабыл =) )...,щас вот все вспомнить нимагу =(
     
  6. Бульба

    Бульба Banned

    Joined:
    1 Jun 2009
    Messages:
    20
    Likes Received:
    184
    Reputations:
    6
    Да с этими поролями весь запутаешся...
    Тож очень часто вспоминать приходится..
     
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    P.S. Народ, если комуто не влом, то плз проверьте у себя работоспособность данного способа. Особенно больше всего интересуют магические числа E4/E5 и 24/25.
    Если у всех будет так, то напишу прожку которая будет сама всю работу делать.
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    хм. Для Jimm Core ( 0.5.2 ) E4 и E5 есть, а вот 25 и 24 вконце отсутствуют. Скорее всего идентификаторы идут в другой последовательности
     
  9. meisterr

    meisterr Member

    Joined:
    25 Feb 2009
    Messages:
    40
    Likes Received:
    5
    Reputations:
    0
    помоему легче поставить на комп "icq msg loger" или "Icq password recalling" и подключиться с телефона к своему ip. Но если нет такой возможности, то интересный способ. Хорошая статья
     
  10. t4Nk

    t4Nk Elder - Старейшина

    Joined:
    23 Sep 2007
    Messages:
    70
    Likes Received:
    33
    Reputations:
    0
    хм.. может кто знает где jimm хранит пароли на Эриксонах?
     
  11. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 meisterr в том то и дело что все компы или за проксёй или за натом или еще чтонить, что не дает доступа из инета.
     
  12. 3NT3R

    3NT3R Member

    Joined:
    21 Apr 2009
    Messages:
    3
    Likes Received:
    48
    Reputations:
    5
    подключаться к к системе (папкам и файлам) нуно не просто через передачу файлов ! ,а через FAR , и драйвер нуно установить специальный ,чтоб к фар подключиться..,,,а там уже ,возмоно это :

    tpa\preset\system\ams\java\db\
     
    1 person likes this.
  13. Dead_KoT

    Dead_KoT New Member

    Joined:
    9 Jul 2009
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    К Фару нужен плагин SEFP. Давно не занимался этим,поэтому проги старые,наверно уже новые версии есть.
     
  14. [n]-c0der

    [n]-c0der Member

    Joined:
    3 Feb 2009
    Messages:
    83
    Likes Received:
    24
    Reputations:
    -1
    вирт вроде как то писал статью на подобную тему, но там если не ошибаюсь вывернул исходники почти полностью...
     
  15. kisk

    kisk New Member

    Joined:
    7 Sep 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    http://forum.motofan.ru/index.php?showtopic=147890
    вот отличная штука для этого, работает восстановил свой пароль!
     
  16. m9chik

    m9chik Elder - Старейшина

    Joined:
    20 Jun 2007
    Messages:
    68
    Likes Received:
    56
    Reputations:
    -5
    эх эту статейку бы годом раньше когда просрал пароль... + беспезды знать буду)