Как прочитать историю Агента? Как прочитать историю в майл агенте

Программа «Mail.ru Агент», которую многие используют для обмена мгновенными сообщениями, по умолчанию хранит всю историю переписки на жестком диске компьютера, на который она установлена. Если вы забыли пароль и не можете открыть программу, получить доступ к истории диалогов можно с помощью дополнительных программных средств.

Инструкция

  • В ранних версиях программ-мессенджеров вся переписка хранилась в доступном виде, и прочитать ее можно было без особого труда с помощью стандартных средств операционной системы. Разработчики исправили это недоразумение, и теперь история хранится в зашифрованном файле с расширением dbs.
  • Для начала нужно добраться до этого файла. Для этого откройте проводник Windows, щелкнув дважды на значке «Мой компьютер». Проводник также можно запустить, щелкнув правой клавишей мыши на кнопке «Пуск» и выбрав команду «Открыть проводник».
  • В окне проводника выберите команду «Свойства папки» в меню «Вид» (Windows XP или более ранние версии), или «Параметры папок и поиска» в меню «Упорядочить» (Vista и 7). На вкладке «Вид» диалогового окна «Параметры папок» найдите параметр «Показывать скрытые файлы и папки» и установите флажок, чтобы активировать его.
  • Теперь можно приступать к поиску зашифрованного файла с историей переписки. Он находится по адресу C:ПользователиИмя пользователяAppDataRoamingMraBase. Скопируйте файл (возможно, их будет несколько) на рабочий стол или в любую другую папку на компьютере.
  • Чтобы открыть файл, необходимо скачать специальную программу, с помощью которой все сохраненные диалоги можно будет читать в удобном виде. В качестве такой программы можно использовать Mail.ru History Reader, скачать которую можно на официальной странице приложения по адресу https://forum.antichat.ru/thread114077.html
  • Программа не требует установки и сразу после загрузки ее можно запустить на компьютере. Чтобы добавить ранее найденный файл с историей переписки, нажмите в меню «История» и выберите команду «Открыть». Укажите путь к файлу, после чего он откроется в программе, и вы увидите всю переписку. Выбрав в меню слева нужный контакт из списка, в основном окне вам будет доступен текст диалогов.
  • Добрый воскресный вечер, уважаемый читатель! Перед вами материал, вся информация в котором основана на моих личных экспериментах и богатом опыте. В сегодняшней статье вы узнаете о том, как происходит перехват Агент@Mail.ru. Ведь многие злоумышленники могут узнать, как прочитать чужой Агент@Mail.ru. Важно уметь защищать свою информацию от несанкционированного взлома! В конце статьи найдёте полезное видео.

    Почему возникла необходимость разбирать такие вопросы? Как прочитать чужой Агент@Mail.ru и перехватить его, не зная пароль пользователя? Мне просто потребовалась удобная программа для быстрого обмена сообщениями с коллегами по работе, родственниками, друзьями. Ничего более универсального найти не удалось. Пользуюсь этим месседжером уже несколько лет. Но всегда терзали сомнения, а не читает ли кто-то мои сообщения? Чтобы взломать чужую переписку Агент@Mail.ru, понадобились бы какие-то специализированные приложения. Вот я и отправился в Интернет на их поиски.

    В любой поисковой системе по запросу «как посмотреть чужой Агент@Mail.ru» перед вами откроется колоссальное количество различных ссылок. На проверку оказывается, что 99% из них – лохотроны, вирусы, прочие вредоносы. Да, попадались запускавшиеся, но они не работали. Все тесты я производил на своём смартфоне, работающем на Android 4.1. Ничего с удалённым доступом найдено не было – таковы неутешительные выводы! Не поведитесь на пустые обещания злоумышленников!

    И всё же я подумал о том, как посмотреть и перехватить чужой Агент@Mail.ru более привычными приложениями. Например, служебными утилитами для резервного копирования информации! В Android изначально их нет, но подобрать и скачать не составит труда. Даже в Play Market подобных программ сотни. Но проблема кроется в том, что функций в них маловато. Я много приложений пересмотрел, пока наконец не наткнулся на великолепный сервис. Взламывать и перехватывать чужие переписки Агент@Mail.ru он не умеет, да и создан не для этого.

    Суть сервиса в следующем: в мобильник на Android устанавливается стандартная программка формата.apk, которая собирает информацию и пересылает её в личный пользовательский кабинет. Это специальный раздел, где данные хранятся 30 дней. Просматривать их там очень удобно. Кабинет вы найдёте на отдельном сайте, поэтому посторонние лица туда доступ не получат. Только человек, установивший и настроивший утилиту.

    Но представьте ситуацию, в которой перехватить и прочитать чужой Агент@Mail.ru попытается злоумышленник! Он может попробовать установить в ваш телефон подобную программу! И не важно, какую именно. Чтобы этого не случилось, старайтесь мобильник где попало не бросать, не оставлять его без присмотра, не передавать в незнакомые руки. А также людям, которым вы не доверяете на 100%!

    Далее будет ролик на Youtube, записанный мной для читателей данного блога. В нём описывается процесс установки и настройки утилиты, о которой я писал выше. Удобные возможности для резервного копирования откроются перед вами! Но такие утилиты нельзя ставить в чужие телефоны! Владельцу мобильника точно не понравится, если его личная информация начнёт пересылаться непонятно кому.

    Возможности приложения: чтение переписки SMS, MMS, Вконтакте (официальное приложение и Kate Mobile), Одноклассники, Facebook, Мой Мир@mail.ru, ВСети.by, Twitter, Hangouts, Google+, WhatsApp, Skype, Viber, Hangouts (бывший Google Talk), Агент@mail.ru, ICQ, IM+ и IM+Pro, AIM, Jabber, MSN, MySpace, Yahoo! и Я.Онлайн (Яндекс Чат), Email переписку Gmail и Почта@mail.ru, просматривать посещенные сайты в браузерах Chrome, Opera, Firefox. Получить доступ к списку звонков и местонахождению телефона. Это малая часть всех возможностей. Весь

    Видео руководство по установке для любого телефона:

    Видео руководство по установке на телефон с ROOT правами:

    Инструкция по установке и настройке:

    1. Заводим личный кабинет по этой ссылке: «Завести личный кабинет» (просто регистрируемся там).
    2. Заходим по этой ссылке: «Войти в личный кабинет на сайте» и вводим Email и пароль, которые указали пре регистрации.
    3. Жмем кнопку: «Добавить телефон»
    4. Заполняем все поля которые просят ввести. Заполняем правильно как там написано, иначе не будет работать.
    5. Жмем кнопку «Сохранить».
    6. Читаем инструкцию которая появилась после нажатия кнопки «Сохранить»
    7. Устанавливаем на телефон, (тот с которого нужно получить информацию) приложение, и настраиваем его согласно инструкции, которую вы должны будете прочитать на шаге 6.
    8. Приложение установлено. Все хорошо. Разработчики пишут, что надо подождать не менее часа, чтоб данные начали поступать в ваш личный кабинет который вы завели на шаге 1. В нашем случае данные пришли через 4 часа. Задуманное удалось! Желаю успехов.

    Ты вряд ли пользуешься Mail.Ru Агентом, но это бешено популярный сервис, который с каждым днем набирает обороты. По официальным данным месячная аудитория этого мессенджера в конце прошлого года составляла безумную цифру в 21,4 миллиона человек. Это легко объяснить, - продукт действительно удачный. Но сегодня я хочу рассказать о том, как был разреверсен файл с историей сообщений пользователя.

    WARNING

    Не забывай о статье 138 - «Нарушение тайны переписки, телефонных переговоров, почтовых, телеграфных или иных сообщений» УК РФ, а также о наличии в ней главы 28 - «Преступления в сфере компьютерной информации» (ст. 272, 273, 274).

    История взлома

    Эксперимент начался для меня еще в далеком 2008 году, когда друг попросил проверить переписку его девушки в Mail.ru Агенте. Тогда файл истории представлял из себя простой текстовик с названием email history.txt и имел по сравнению с mra.dbs (файл, в котором в настоящее время хранится история переписки и данные о контактах) примитивную структуру. За пару часов был написан простой, но эффективный RTF-конвертер, который и делал всю грязную работу по вытягиванию переписки из Агента. Друг был в восторге. Далее, в ходе изучения программирования на компилируемых языках, я в качестве практики написал программу Mail.ru History Reader, описание которой попало на страницы ][ в августе 2009 года. Получив большое количество положительных отзывов, я опубликовал структуру формата тогдашнего файла истории (см. ссылки в боковом выносе) и исходники читалки. Однако Mail.ru Агент продолжал развиваться, и править балом стал новый продвинутый файл mra.dbs. После этого события ко мне посыпались тонны сообщений от различных людей с просьбами заняться им. В компании с SOLON7 мы ковыряли этот файл в HEX-редакторе, пытаясь найти структуры, ссылки на смещения и всевозможные изменения после запуска Mail.ru Агента. К концу 2010 года после долгих поисков формат все-таки покорился.

    Rich Text Format (RTF)

    RTF, использующийся в mra.dbs, представляет из себя формат хранения размеченных документов, предложенный еще в 1982 году бородатыми программистами из Microsoft и Adobe. Для его парсинга совершенно не обязательно изобретать велосипед, а достаточно лишь отправить сообщение EM_STREAMIN с флагом SF_RTF для записи и EM_STREAMOUT с флагом SF_TEXT для чтения:

    EDITSTREAM es = { 0 }; es.pfnCallback = EditStreamCallback; es.dwCookie = (DWORD_PTR)&lps; SendMessage(hRich, EM_STREAMIN, SF_RTF, (LPARAM)&es);

    Этот нехитрый прием и использован в моей читалке.

    Как добыть файл mra.dbs?

    Ты, конечно, задашься вопросом: а где, собственно, хранится этот пресловутый mra.dbs, и как его добыть? Файл mra.dbs хранится в папке «%APPDATA%\Mra\Base\mra.dbs» (например «C:\Documents and Settings\user\Application Data\Mra\Base\mra.dbs»), и заполучить его при выключенном Агенте не так уж и сложно, достаточно лишь использовать функции ExpandEnvironmentStrings и CopyFile. Однако при включенном Агенте файл mra.dbs является занятым и система попросту не позволит его использовать. Для решения этой проблемы можно, например, временно отключить Агент (для этого действия тебе понадобятся привилегии отладчика, которые можно получить только с правами Администратора) или найти открытый хэндл файла в системе, а затем продублировать его в адресное пространство своего процесса. Также можно прочесть файл напрямую с диска (правда, для этого нужно знать, что такое кластер и как работать напрямую с драйвером файловой системы) или же написать собственный файловый драйвер (это практически нереально). Все бы хорошо, но на практике у всех вышеперечисленных методов есть свои недостатки. При перечислении хэндлов с помощью ZwQuerySystemInformation и их копировании к себе в процесс с помощью DuplicateHandle можно столкнуться с двумя проблемами. Первая заключается в том, что при вызове ZwQueryInformationFile поток может повиснуть, ожидая отклика от блокирующего именованного канала. Вторая - после копирования оба хэндла (наш и открывшего файл процесса) будут указывать на один FileObject, а следовательно - текущий режим ввода-вывода. Позиция в файле и другая связанная с файлом информация будут общими у двух процессов, поэтому даже чтение файла вызовет изменение позиции чтения и нарушение нормальной работы программы, открывшей файл. Конечно, можно приостановить на время все потоки процесса файла, а после копирования восстанавливать позиции чтения и запускать процесс владельца снова, но это связано с большими затратами времени и сил. Казалось бы, идеальным методом может являться прямое чтение с диска, но и здесь есть недостатки. Таким способом можно читать только файлы, которые открываются с доступом FILE_READ_ATTRIBUTES (кроме файлов подкачки), файл обязательно должен быть не сжат, не зашифрован (иначе мы прочитаем ерунду) и иметь свой кластер (маленькие файлы в NTFS могут целиком размещаться в MFT). Также следует учесть, что во время чтения файл может быть изменен (и мы получим в результате непонятно что). Поэтому разберем самый простой метод с временным отключением процесса Агента.

    Итак, чтобы убить процесс Mail.ru Агента, для начала необходимо узнать его идентификатор (ProcessID). Сделать это можно разными способами: через ToolHelp API, через Native API (используя функцию ZwQuerySystemInformation), прошерстив список открытых хэндлов или по списку открытых процессом окон (GetWindowThreadProcessId). Самый легкий вариант - это использование ToolHelp API и поиск по имени exe-файла. Для этого достаточно вызвать функции CreateToolhelp32Snapshot > Process32First > Process32Next, а затем в теле цикла сверять значение поля szExeFile структуры PROCESSENTRY32 c magent.exe. Необходимый нам ProcessID находится в этой же структуре, поле th32ProcessID:

    HProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(INVALID_HANDLE_VALUE != hProcessSnap) { pe32.dwSize = sizeof(PROCESSENTRY32); if(Process32First(hProcessSnap, &pe32)) { do { if(0 == lstrcmp(pe32.szExeFile,_TEXT("magent.exe"))) { pid=pe32.th32ProcessID; break; } } while(Process32Next(hProcessSnap, &pe32)); } CloseHandle(hProcessSnap); }

    После того как мы найдем PID, нам необходимо получить привилегии отладчика SeDebugPrivilege (OpenProcessToken > LookupPrivilegeValue > AdjustTokenPrivileges) и убить процесс (OpenProcess > TerminateProcess), а потом снова попытаться вызвать CopyFile. Привилегии можно получить и более элегантным путем - через Native API:

    Void GetPrivilege(IN ULONG Privilege) { BOOLEAN OldValue; RtlAdjustPrivilege(Privilege, TRUE, FALSE, &OldValue); }

    Все, mra.dbs у нас в руках. Теперь перейдем к его потрошению:).

    Раскрываем секреты mra.dbs

    Файл mra.dbs представляет из себя дамп памяти Mail.ru Агента, поэтому открыть его для чтения при работающей программе не представляется возможным (для рядового программиста, но у нас свои секреты:), также задачу усложняет тот факт, что в памяти все числа хранятся в перевернутом виде. Однако давай немного углубимся в реверс-инжиниринг.

    Итак, в недрах mra.dbs существует хеш-таблица, в которой описаны смещения на 4-байтные идентификаторы. Идентификаторы служат для определения начала записи различных структур и сегментов дампа, среди которых и находятся нужные нам записи истории переписки (обрати внимание на соответствующую иллюстрацию):

    Typedef struct _ids { unsigned int id1; unsigned int id2; unsigned int count; } _ids;

    INFO

    Хеш-таблица - это структура данных, реализующая интерфейс ассоциативного массива, она позволяет хранить пары «ключ-значение». Двусвязный список состоит из элементов данных, каждый из которых содержит ссылки как на следующий, так и на предыдущий элементы.

    Начало истории характеризуется ключевым словом mrahistory_, за которым следует e-mail хозяина файла mra.dbs и e-mail контакта, с которым ведется переписка. В случае с историей идентификаторы образуют двусвязный список: первый ведет к первому отправленному сообщению, а второй - к последнему принятому сообщению. Количество сообщений можно узнать, изучив четыре байта после идентификаторов (структура _ids). Пройдя по смещению идентификатора (его можно узнать из хеш-таблицы) мы попадем на запись сообщения (снова все внимание на соответствующий рисунок):

    Поиск хеш-таблицы struct _message{ unsigned int size; unsigned int prev_id; unsigned int next_id; unsigned int xz1; FILETIME time; unsigned int type_mesage; char flag_incoming; char byte; unsigned int count_nick; unsigned int magic_num; // 0x38 unsigned int count_message; unsigned int xz2; unsigned int size_lps_rtf; unsigned int xz3; };

    Строки в дампе сохраняются в кодировке Unicode (wchar_t) различными способами:

    • с завершающим нулем в конце строки;
    • в структуре LPS (название структуры взято из описания формата протокола MMP), где первые четыре байта указывают на длину последующей строки;
    • в формате RTF.

    Зная количество сообщений, нам не составит труда пробежаться по всей цепочке. Но откуда вообще узнать, где находится эта хеш-таблица, и как найти начало записей истории? Над поисками ответов к этим вопросам мы с SOLON7 провели немало бессонных ночей.

    Типы сообщений mra.dbs

    • 2 - неавторизованные пользователи;
    • 4 - запросы авторизации;
    • 7 - обычные сообщения;
    • 10 - передача файлов;
    • 35 - записи в микроблог;
    • 46 - смена геоположения.

    Немного магии

    По смещению 0x10 от начала файла mra.dbs, как оказалось, и хранится адрес заветной хеш-таблицы. Пройдя по смещению первого индекса из хеш-таблицы, мы натыкаемся на структуру начальных данных. Возможно, там находится вообще вся информация, заложенная в mra.dbs. Идем дальше. По смещению 0x20 в этой структуре хранится количество записей истории или, проще говоря, количество переписок. Так как файл дампа постоянно расширяется, то по смещению 0x2C лежит идентификатор последней записанной истории, - это все, что нам нужно знать, чтобы начать искать идентификаторы переписок. В целом же алгоритм такой:

    • проходимся по идентификаторам записей истории с помощью цикла (начиная от последней добавленной записи);
    • если в этой записи от смещения 0x190 присутствует слово «mrahistory_», то это означает, что по смещению 0x24 лежат идентификаторы цепочки сообщений данной переписки.

    Чтобы стало немного понятней, взгляни на этот код:

    DWORD * offset_table=(DWORD *)(mra_base + *(DWORD*)(mra_base + 0x10)); DWORD end_id_mail=*(DWORD*)(mra_base+0x20+offset_table); DWORD count_emails=*(DWORD*)(mra_base+0x2C+offset_table); ... for(int i=0;iid2; }

    Кодим

    Сейчас я покажу тебе лишь самые основные моменты. Итак, файл mra.dbs является дампом памяти, поэтому мы не будем извращаться и использовать функции для работы с файловыми смещениями, а сразу поместим его в память нашей программы. Для этого заюзаем ресурсы ОС Windows и создадим Memory Mapped файл:

    CreateFile CreateFileMap MapViewOfFile VirtualFree CloseHandle CloseHandle

    Так как нам не нужно сохранять внесенные изменения обратно в файл, то здесь вместо UnmapViewOfFile используется VirtualFree. Первое, что мы сделаем, это найдем все контакты из истории переписки. Хранить найденное добро будем в структуре emails:

    Typedef struct _emails{ wchar_t *email; _ids *id; }; ... struct _emails *emails; ... emails=VirtualAlloc(NULL,count_emails*sizeof(struct _emails),..); ...

    После прохода по идентификаторам и поиска строки «mrahistory_» наша структура будет заполнена адресами идентификаторов. Заметь, при этом мы не скопировали даже байта и израсходовали всего лишь 16*count_emails байт (например, при 1 000 контактов мы используем всего ~15 килобайт памяти). Теперь, имея на руках идентификаторы начала переписки с конкретным пользователем, мы можем прочитать сообщения:

    Int id_message=emails[k].id->id1; for(int i=0;icount_messages;i++) { _message *mes=(_message *)(mra_base+offset_table); wchar_t *str=(wchar_t *)((unsigned char *)mes+sizeof(_message)); ... id_message=mes->prev_id; }

    Дата сообщения хранится в формате FILETIME, для удобства ее можно перевести в удобочитаемый вид с помощью функции FileTimeToSystemTime. Формат RTF отлично воспринимается Rich Edit’ом и любыми другими стандартными редакторами типа WordPad. Но с этим можно и не заморачиваться, так как сообщения хранятся в неотформатированном виде сразу после ника, а их размер указан в структуре message. Это все, что тебе нужно знать, чтобы получить удобоваримый список мессаг из Агента.

    P.S.

    К сожалению, формат журнала не позволяет привести здесь мои хардкорные изыскания полностью, поэтому поспеши заглянуть на диск. Надеюсь, пример кода читалки (exe’шник которой, кстати, с помощью небольшой оптимизации уместился всего в 2 килобайта безо всяких пакеров) поможет тебе в написании быстрого и крутого C-кода, а также в изучении hex-редакторов и других низкоуровневых вещей. Кстати, незатронутой осталась не менее увлекательная тема чтения истории ICQ-переписки, которая также хранится в файле mra.dbs. Спасибо компании Mail.Ru, во-первых, за разработку Mail.Ru Агента, во-вторых, за заметное развитие любимой аськи, и в-третьих, за интересный квест, о котором я тебе сегодня рассказал.

    Понравилось? Лайкни нас на Facebook