Раскрываем секреты mra.dbs
Файл mra.dbs представляет из себя дамп памяти Mail.ru Агента, поэтому открыть его для чтения при работающей программе не представляется возможным (для рядового программиста, но у нас свои секреты:), также задачу усложняет тот факт, что в памяти все числа хранятся в перевернутом виде. Однако давай немного углубимся в реверс-инжиниринг.
Итак, в недрах mra.dbs существует хеш-таблица, в которой описаны смещения на 4-байтные идентификаторы
Идентификаторы служат для определения начала записи различных структур и сегментов дампа, среди которых и находятся нужные нам записи истории переписки (обрати внимание на соответствующую иллюстрацию):. Typedef struct _ids {
unsigned int id1;
unsigned int id2;
unsigned int count;
} _ids;
Typedef struct _ids {
unsigned int id1;
unsigned int id2;
unsigned int count;
} _ids;
INFO
Хеш-таблица – это структура данных, реализующая интерфейс ассоциативного массива, она позволяет хранить пары «ключ-значение». Двусвязный список состоит из элементов данных, каждый из которых содержит ссылки как на следующий, так и на предыдущий элементы.
Строки в дампе сохраняются в кодировке Unicode (wchar_t) различными способами:
- с завершающим нулем в конце строки;
- в структуре LPS (название структуры взято из описания формата протокола MMP), где первые четыре байта указывают на длину последующей строки;
- в формате RTF.
Зная количество сообщений, нам не составит труда пробежаться по всей цепочке. Но откуда вообще узнать, где находится эта хеш-таблица, и как найти начало записей истории? Над поисками ответов к этим вопросам мы с SOLON7 провели немало бессонных ночей.
INFO
Хеш-таблица – это структура данных, реализующая интерфейс ассоциативного массива, она позволяет хранить пары «ключ-значение». Двусвязный список состоит из элементов данных, каждый из которых содержит ссылки как на следующий, так и на предыдущий элементы.
Строки в дампе сохраняются в кодировке Unicode (wchar_t) различными способами:
- с завершающим нулем в конце строки;
- в структуре LPS (название структуры взято из описания формата протокола MMP), где первые четыре байта указывают на длину последующей строки;
- в формате RTF.
Зная количество сообщений, нам не составит труда пробежаться по всей цепочке. Но откуда вообще узнать, где находится эта хеш-таблица, и как найти начало записей истории? Над поисками ответов к этим вопросам мы с SOLON7 провели немало бессонных ночей.
Где хранятся удалённые SMS
Для начала нам нужно проверить, выполняет ли наш смартфон резервное копирование в принципе. На Huawei это делается следующим образом:
- Перейдите в «Настройки» и откройте свой профиль;
- В открывшемся окне выберите раздел «Облако»;
Huawei сохраняет несколько резервных копий и позволяет восстанавливать их по частям
- Откройте вкладку «Резервные копии в облаке» — «Восстановление данных»;
- Проверьте наличие резервных копий и убедитесь, когда они были сделаны.
Логично, что для того, чтобы вернуть удалённое сообщение на Андроиде, нам потребуется резервная копия, сделанная до того, как сообщение было удалено. Поэтому постарайтесь хотя бы примерно вспомнить, когда вы его удалили
Неважно, когда это произошло: один день, неделю, месяц или год назад. Android позволяет восстановить не всю резервную копию целиком, а только её часть
В нашем случае – часть с сообщениями.
Как вернуть удалённые смс-сообщения
После того, как вы хотя бы примерно прикинули, когда было удалено сообщение, проделайте следующие шаги:
- Найдите резервную копию, созданную до удаления сообщения;
- Откройте вкладку резервной копии, чтобы просмотреть содержимое;
Из облака Huawei можно восстановить только те данные, которые вам нужны
- Снимите все галочки и оставьте её напротив графы «Сообщения»;
- Подтвердите восстановление данных и дождитесь завершения процедуры.
После завершения восстановления вы сможете перейти в приложение «Сообщения» и проверить наличие удалённых ранее SMS. Скорее всего, если вы выбрали резервную копию за правильную дату, сообщения вернутся к вам на устройство. Так что ничего сложного в этом нет. Другое дело, что настолько удобно процесс восстановления реализован именно у Huawei, а у других производителей всё может быть не так.
P.S.
К сожалению, формат журнала не позволяет привести здесь мои хардкорные изыскания полностью, поэтому поспеши заглянуть на диск. Надеюсь, пример кода читалки (exe’шник которой, кстати, с помощью небольшой оптимизации уместился всего в 2 килобайта безо всяких пакеров) поможет тебе в написании быстрого и крутого C-кода, а также в изучении hex-редакторов и других низкоуровневых вещей. Кстати, незатронутой осталась не менее увлекательная тема чтения истории ICQ-переписки, которая также хранится в файле mra.dbs. Спасибо компании Mail.Ru, во-первых, за разработку Mail.Ru Агента, во-вторых, за заметное развитие любимой аськи, и в-третьих, за интересный квест, о котором я тебе сегодня рассказал.
Программа «Mail.ru Агент», которую многие используют для обмена мгновенными сообщениями, по умолчанию хранит всю историю переписки на жестком диске компьютера, на который она установлена. Если вы забыли пароль и не можете открыть программу, получить доступ к истории диалогов можно с помощью дополнительных программных средств.
В ранних версиях программ-мессенджеров вся переписка хранилась в доступном виде, и прочитать ее можно было без особого труда с помощью стандартных средств операционной системы. Разработчики исправили это недоразумение, и теперь история хранится в зашифрованном файле с расширением dbs.
Для начала нужно добраться до этого файла. Для этого откройте проводник Windows, щелкнув дважды на значке «Мой компьютер». Проводник также можно запустить, щелкнув правой клавишей мыши на кнопке «Пуск» и выбрав команду «Открыть проводник».
В окне проводника выберите команду «Свойства папки» в меню «Вид» (Windows XP или более ранние версии), или «Параметры папок и поиска» в меню «Упорядочить» (Vista и 7). На вкладке «Вид» диалогового окна «Параметры папок» найдите параметр «Показывать скрытые файлы и папки» и установите флажок, чтобы активировать его.
Теперь можно приступать к поиску зашифрованного файла с историей переписки. Он находится по адресу C:ПользователиИмя пользователяAppDataRoamingMraBase. Скопируйте файл (возможно, их будет несколько) на рабочий стол или в любую другую папку на компьютере.
Чтобы открыть файл, необходимо скачать специальную программу, с помощью которой все сохраненные диалоги можно будет читать в удобном виде. В качестве такой программы можно использовать Mail.ru History Reader, скачать которую можно на официальной странице приложения по адресу https://forum.antichat.ru/thread114077.html
Программа не требует установки и сразу после загрузки ее можно запустить на компьютере. Чтобы добавить ранее найденный файл с историей переписки, нажмите в меню «История» и выберите команду «Открыть». Укажите путь к файлу, после чего он откроется в программе, и вы увидите всю переписку. Выбрав в меню слева нужный контакт из списка, в основном окне вам будет доступен текст диалогов.
1 способ. Мгновенное восстановление
Мгновенное восстановление – функция, позволяющая быстро сообщения ВКонтакте. Использовать опцию нужно сразу после удаления. Работает очень просто – напротив любого удалённого сообщения в диалоге появляется кнопка «Восстановить», которая откатывает действие.
Несколько особенностей метода:
- работает только в десктопной и мобильной браузерной версии ВКонтакте – в приложении с телефона воспользоваться не получится;
- восстанавливать можно только отдельные сообщения – удалённый диалог вернуть невозможно;
- если страница будет закрыта или обновлена, возможность мгновенного восстановления пропадёт (при этом перемещаться между беседами, не обновляя вкладку, можно).
Вы можете удалить массу сообщений разом, но при этом восстановить всю переписку в ВК после её удаления подобным образом в один клик не получится – нажимать на «Восстановить» придётся у каждого СМС.
Как вернуть старый мейл агент и запретить ему обновляться?
В последнее время очень многие мои подписчики начали задавать вопрос: как вернуть старую версию майл ру агента? Проблема появлялась после того, как майл ру агент обновили до 10 версии. Мало того что в этой версии нельзя подключить более 1 аккаунта, так и функционал стал очень бедным, пропали контакты, другие учетки, деньги со счетов и история переписок. Все это вызвало крайнее негодование тех у кого агент обновился до новой версии. Сегодня я расскажу как вернуть старую версию майл ру агента.
Ну, а для тех кто не хочет читать, я выпустил видео по этой теме:
Для начала нам понадобится программа Uninstall Tool для полного удаления 10 версии агента. Скачайте ее и запустите от имени администратора, в списке программ найти майл агента, выделите его и нажмите кнопку деинсталяция. Программа выполнит полную очистку агента удалив все ее следы. Дальше вам нужно скачать старую версию агента, можете сделать это сами или скачать по этой ссылке. если браузер будет возмущаться по поводу опасности файла, все равно нажмите скачать файл. После скачивания извлеките инсталятор агента из архива и запустите установку. После установки не подключайтесь к своей учетке, что бы агент не обновился без спроса. Кликните правой кнопкой по ярлыку старого агента и найдите местонахождение файла или в меню или в свойствах ярлыка. Перейдите в папку где находится исполняемый файл агента, найдите там файл magentsetup.exe и удалите его. Далее создайте тестовый документ и дайте ему имя magentsetup.exe. Потом нажмите правой кнопкой по файлу, выберете свойства и поставьте галочку только для чтения. Таким образом вы удалите файл отвечающий за обновление агента и он больше не сможет обновляться.
Дальше все просто: подключите все свои учетные записи и пользуйтесь нормальной версий майл агента на здоровье. И не забывайте делать репосты этой статьи, у ваших знакомых тоже может быть такая же проблема.
—>Категория—>: Новости Software(софт)
Создание резервной копии с помощью VkOpt
Во избежание в будущем похожей проблемы, связанной со случайным удалением переписки ВКонтакте, попробуйте использовать расширение для браузеров VkOpt. Среди его многочисленных функций есть инструмент для создания резервной копии сообщений на компьютере.
После установки дополнения в меню управления диалогом появятся новые возможности. Зайдите в беседу или диалог, резервную копию которого вы хотите сделать. Наведите курсор на три точки и во всплывающем меню выберите пункт “Сохранить переписку”.
На выбор предлагается два формата для сохранения сообщений: текстовый формат (*.txt) и формат веб-страницы (*.html). Я рекомендую сохранять именно в html – такой формат удобнее читать, и вы сможете открывать изображения и прослушивать музыку из сохраненного диалога.
VkOpt потребуется некоторое время, чтобы подготовить массив для скачивания. Спустя несколько секунд вам будет предложено выбрать имя файла и место для его хранения на вашем компьютере. После сохранения вы сможете в любой момент открыть и перечитать документ с вашей перепиской.
Неудобства создания резервной копии с помощью VkOpt заключаются в том, что нельзя создать резервную копию сразу всех диалогов и бесед – приходится сохранять каждую переписку отдельно. Также придется регулярно обновлять скачанный файл, чтобы добавить новые сообщения, которые появились после последнего резервного копирования.
Использование portable-версии Mail.ru Агента
Поскольку для того, чтобы запустился процесс обновления, мессенджер должен «прописаться» в системе, сохранив свои файлы в системных директориях, от апгрейда спасет портативная версия программы.
Внешне портативная версия Агента 6.2 ничем не отличается от полной
Используется portable-Агент очень просто:
- скачайте привычную версию мессенджера;
- запустите;
- пользуйтесь.
Никаких обновлений в таком случае не будет; кроме того, портативную версию не нужно устанавливать. Недостаток ее в том, что она не сохраняет настройки и историю на жестком диске.
Зная, как отключить обновление Mail.ru Агента, легко выключить апгрейды и других продуктов компании — например, ICQ. Делается это в том же порядке, только в названиях папок и файлов будет ICQ, а не magent.
Mail.ru Агент – удобное средство для обмена текстовыми сообщениями, совершения аудио- и видеозвонков, обмена файлами и т.д. Для того чтобы им пользоваться, необходимо иметь почтовый ящик на mail.ru. Но что делать, если ваш ящик взломали? Или вы забыли собственный пароль доступа? Как восстановить Агент?
Зайдите на сайт Mail.ru. Для этого запустите свой интернет-браузер и введите в поле адресной строки без кавычек www.mail.ru. Перед вами откроется главная страница сайта.
В левой стороне открывшейся страницы располагается блок «Почта». Здесь вы обычно вводите свои данные для авторизации: логин и пароль. Напротив колонки пароль найдите ссылку «Забыли?», кликните по ней. Вы попадете на страницу восстановления пароля.
Если вы помните ваш логин, но не помните пароль, введите ваш логин на первой странице и нажмите копку «Далее». На следующей странице система попытается восстановить пароль именно к вашему ящику, задав вам секретный вопрос, который указывался вами еще в процессе регистрации почты. Ответьте на него правильно, и вы получите новый пароль доступа.
Если же по каким-либо причинам восстановить пароль с помощью секретного вопроса в ящике невозможно, воспользуйтесь другим вариантом – заполните форму обращения в службу поддержки. Для этого нажмите на соответствующую ссылку внизу на странице восстановления пароля.
Данную форму необходимо заполнить максимально объемно. Введите как можно больше информации о себе, это позволит вернуть доступ к вашему аккаунту в максимально короткие сроки. Смысл данной формы заключается в следующем: если введенные вами данные совпадут с теми, что вы указывали при регистрации почтового ящика, то на указанный в конце формы адрес будет выслано письмо со ссылкой для восстановления пароля. Ссылка работает в течение трех дней. Внимание, не повторяйте запрос до истечения данного срока. При повторении запросов система выдаст новый пароль в ответ на каждый из них, и вы попросту не сможете разобраться, какой из полученных паролей является верным.
Когда доступ к ящику будет восстановлен, запустите Mail.ru Агент и в окне авторизации введите логин и новый пароль доступа на почтовый ящик.
Инструкция по установке и настройке:
- Заводим личный кабинет по этой ссылке: «Завести личный кабинет» (просто регистрируемся там).
- Заходим по этой ссылке: «Войти в личный кабинет на сайте» и вводим Email и пароль, которые указали пре регистрации.
- Жмем кнопку: «Добавить телефон»
- Заполняем все поля которые просят ввести. Заполняем правильно как там написано, иначе не будет работать.
- Жмем кнопку «Сохранить».
- Читаем инструкцию которая появилась после нажатия кнопки «Сохранить»
- Устанавливаем на телефон, (тот с которого нужно получить информацию) приложение, и настраиваем его согласно инструкции, которую вы должны будете прочитать на шаге 6.
- Приложение установлено. Все хорошо. Разработчики пишут, что надо подождать не менее часа, чтоб данные начали поступать в ваш личный кабинет который вы завели на шаге 1. В нашем случае данные пришли через 4 часа. Задуманное удалось! Желаю успехов.
Программа «Mail.ru Агент», которую многие используют для обмена мгновенными сообщениями, по умолчанию хранит всю историю переписки на жестком диске компьютера, на который она установлена. Если вы забыли пароль и не можете открыть программу, получить доступ к истории диалогов можно с помощью дополнительных программных средств.
В ранних версиях программ-мессенджеров вся переписка хранилась в доступном виде, и прочитать ее можно было без особого труда с помощью стандартных средств операционной системы. Разработчики исправили это недоразумение, и теперь история хранится в зашифрованном файле с расширением dbs.
Для начала нужно добраться до этого файла. Для этого откройте проводник Windows, щелкнув дважды на значке «Мой компьютер». Проводник также можно запустить, щелкнув правой клавишей мыши на кнопке «Пуск» и выбрав команду «Открыть проводник».
В окне проводника выберите команду «Свойства папки» в меню «Вид» (Windows XP или более ранние версии), или «Параметры папок и поиска» в меню «Упорядочить» (Vista и 7). На вкладке «Вид» диалогового окна «Параметры папок» найдите параметр «Показывать скрытые файлы и папки» и установите флажок, чтобы активировать его.
Теперь можно приступать к поиску зашифрованного файла с историей переписки. Он находится по адресу C:ПользователиИмя пользователяAppDataRoamingMraBase. Скопируйте файл (возможно, их будет несколько) на рабочий стол или в любую другую папку на компьютере.
Чтобы открыть файл, необходимо скачать специальную программу, с помощью которой все сохраненные диалоги можно будет читать в удобном виде. В качестве такой программы можно использовать Mail.ru History Reader, скачать которую можно на официальной странице приложения по адресу https://forum.antichat.ru/thread114077.html
Программа не требует установки и сразу после загрузки ее можно запустить на компьютере. Чтобы добавить ранее найденный файл с историей переписки, нажмите в меню «История» и выберите команду «Открыть». Укажите путь к файлу, после чего он откроется в программе, и вы увидите всю переписку. Выбрав в меню слева нужный контакт из списка, в основном окне вам будет доступен текст диалогов.
Начинаем восстановление аккаунта на mail
На самом деле вариантов восстановить ваш аккаунт может быть всего два — либо восстановления аккаунта, который уже заблокирован, либо если второй — вы просто забыли Ваш пароль. Исходя из этого, выбираем нужный вариант и читаем:
Вариант №1: «Если почта заблокирована».
Для начала просто «Войдите в вашу почту», если видите ошибку при входе необходимо разобраться с характером этой ошибки. Если появляется надпись «аккаунт заблокирован», например как ниже – значит ваш аккаунт был забанен mail.ru
Разгадываем капчу, вводим мобильный телефон и восстанавливаем доступ. В 99% случаев, аккаунт у вас разблокируется
Для восстановления чужого почтового ящика (например рабочего, либо не очень важного для вас) — можно использовать сервисы активаторы-смс. Например: sms-activate.ru, sms-reg.com и другие
Mail.ru разрешает восстанавливать аккаунты, которые были заблокированы за нарушение с помощью привязывания их к мобильному телефону.
То есть абсолютно любой ящик можно спокойно восстановить привязав его к мобильнику. Просто вводим номер телефона, получаем смс и вуаля – почта снова работает. Однако есть минус – все содержимое почты будет удалено, делается это с целью обезопасить данные владельца.
Мало ли вы пытаетесь восстановить не свою почту, а чужую, от пустого ящика много данных не получишь.
Вариант №2: «Если забыли пароль или украли аккаунт»
Здесь все еще сложнее, к сожалению как показывает практика восстановить аккаунт, который реально принадлежит вам – намного труднее, нежели восстановить какой-то левый зарегистрированный аккаунт.
Если вы видите такое сообщение, как ниже — значит ваш пароль кто-то изменил или Вы сами могли его забыть
Они обязательно запросят вас целую кучу данных: секретные вопросы, смс на телефон, дополнительную почту. Бывают случаи, что даже после предоставления этих данных – доступ не восстанавливают.
Будем надеяться, что вас это не коснется. Для восстановления доступа в случае ошибки «неверный пароль», просто нажимаем кнопочку восстановления и следуем инструкциям.
INFO
Хеш-таблица – это структура данных, реализующая интерфейс ассоциативного массива, она позволяет хранить пары «ключ-значение». Двусвязный список состоит из элементов данных, каждый из которых содержит ссылки как на следующий, так и на предыдущий элементы.
Строки в дампе сохраняются в кодировке Unicode (wchar_t) различными способами:
- с завершающим нулем в конце строки;
- в структуре LPS (название структуры взято из описания формата протокола MMP), где первые четыре байта указывают на длину последующей строки;
- в формате RTF.
Зная количество сообщений, нам не составит труда пробежаться по всей цепочке. Но откуда вообще узнать, где находится эта хеш-таблица, и как найти начало записей истории? Над поисками ответов к этим вопросам мы с SOLON7 провели немало бессонных ночей.
1. Как найти и восстановить удаленную электронную почту Gmail из корзины
Если сообщение было удалено, оно скорее всего находится в папке корзины. Если Вы окончательно не удалили электронную почту, Вы можете восстановить ее из корзины, если она находится в папке менее 30 дней. Сообщения Gmail, которые были в папке дольше, автоматически удаляются.
В этом разделе вы узнаете, как найти и восстановить Gmail, который был случайно удален.
Шаг 1. Найдите и откройте папку «Корзина»
Когда Вы впервые открываете свой почтовый ящик Gmail, он может выглядеть примерно так:
Начните с открытия почтового ящика Gmail.
Как Вы видите, корзина не видна. Чтобы найти его, нажмите кнопку «Дополнительно» в левой части экрана. Параметры меню расширяются:
Затем найдите и откройте папку корзины Gmail.
В меню появится папка «Корзина». Нажмите кнопку «Корзина», чтобы открыть папку:
Откроется папка корзины
Обратите внимание, что слова в: корзине отображаются в строке поиска
Шаг 2. Используйте Gmail для поиска удаленных писем из Gmail.
Вы можете увидеть свое отсутствующее сообщение Gmail, как только откроете папку «Корзина». Если получилось – то это хорошо для вас.
Однако, если у Вас много электронных писем в папке «Корзина», может потребоваться больше усилий, чтобы получить удаленное сообщение электронной почты. С помощью полосы прокрутки в правой части экрана перейдите по электронной почте на экране. Если имеется более одного экрана сообщений, используйте левую и правую стрелки в правом верхнем углу экрана для перемещения по экранам:
Используйте стрелки влево и вправо, чтобы перемещаться по папке «Корзина», если у вас несколько экранов.
Но прокрутка экрана сообщений электронной почты таким способом может занять много времени. Есть более простой способ. Вы можете использовать панель поиска Gmail, чтобы найти недостающее сообщение в папке «Корзина». Чтобы начать, нажмите стрелку вниз справа от строки поиска. Диалоговое окно «Расширенный поиск» отображает:
Используйте диалоговое окно «Расширенный поиск», чтобы найти конкретное сообщение в папке «Корзина».
Лучший способ найти недостающее сообщение – ввести то, что вы знаете об этом, в поля поиска в диалоговом окне «Расширенный поиск».
В этом примере я ищу электронное письмо, отправленное в мае этого года о предстоящей конференции. Я ввожу информацию, которую я получил в полях поиска:
Заполните диалоговое окно «Расширенный поиск» с информацией о вашем сообщении Gmail.
Совет. Чем больше информации Вы вводите в диалоговое окно, тем больше Вы сокращаете свой поиск. Однако будьте осторожны, чтобы не вводить неверную информацию, поскольку это может помешать Вам восстановить удаленное электронное письмо.
Когда Вы закончите ввод информации, нажмите кнопку «Поиск» (она выглядит как увеличительное стекло) в левом нижнем углу диалогового окна. Появятся результаты поиска:
Отображаются все сообщения, соответствующие Вашим параметрам поиска.
В этом случае параметры поиска были достаточно конкретными, и они вернули отсутствующее сообщение электронной почты. Если несколько критериев соответствуют критериям поиска, Вы увидите несколько сообщений на этом экране.
Подробнее о том, как использовать инструмент поиска Gmail в этом пособии, читайте здесь:
Gmail Как искать свои письма в Gmail, как в Pro Лаура Спенсер
Шаг 3. Восстановление удаленной электронной почты из Gmail
Теперь, когда мы обнаружили наш недостающий адрес электронной почты, пришло время вытащить его из папки «Корзина». Для этого установите флажок справа от адреса электронной почты, чтобы выбрать его. Ваш экран должен выглядеть так:
Чтобы восстановить удаленное письмо из корзины Gmail, выберите электронное письмо и нажмите папку «Переместить в папку« Входящие ».
Нажмите кнопку «Переместить в папку« Входящие »над сообщением. Ваш адрес электронной почты перемещается из папки «Корзина» в папку «Входящие» Gmail. Вы только что узнали, как извлекать удаленные письма из Gmail.
Кодим
Сейчас я покажу тебе лишь самые основные моменты. Итак, файл mra.dbs является дампом памяти, поэтому мы не будем извращаться и использовать функции для работы с файловыми смещениями, а сразу поместим его в память нашей программы. Для этого заюзаем ресурсы ОС Windows и создадим Memory Mapped файл:
CreateFile
CreateFileMap
MapViewOfFile
VirtualFree
CloseHandle
CloseHandle
Дата сообщения хранится в формате FILETIME, для удобства ее можно перевести в удобочитаемый вид с помощью функции FileTimeToSystemTime. Формат RTF отлично воспринимается Rich Edit’ом и любыми другими стандартными редакторами типа WordPad. Но с этим можно и не заморачиваться, так как сообщения хранятся в неотформатированном виде сразу после ника, а их размер указан в структуре message. Это все, что тебе нужно знать, чтобы получить удобоваримый список мессаг из Агента.
Кодим
Сейчас я покажу тебе лишь самые основные моменты. Итак, файл mra.dbs является дампом памяти, поэтому мы не будем извращаться и использовать функции для работы с файловыми смещениями, а сразу поместим его в память нашей программы. Для этого заюзаем ресурсы ОС Windows и создадим Memory Mapped файл:
CreateFile
CreateFileMap
MapViewOfFile
VirtualFree
CloseHandle
CloseHandle
Дата сообщения хранится в формате FILETIME, для удобства ее можно перевести в удобочитаемый вид с помощью функции FileTimeToSystemTime. Формат RTF отлично воспринимается Rich Edit’ом и любыми другими стандартными редакторами типа WordPad. Но с этим можно и не заморачиваться, так как сообщения хранятся в неотформатированном виде сразу после ника, а их размер указан в структуре message. Это все, что тебе нужно знать, чтобы получить удобоваримый список мессаг из Агента.
Типы сообщений mra.dbs
- 2 – неавторизованные пользователи;
- 4 – запросы авторизации;
- 7 – обычные сообщения;
- 10 – передача файлов;
- 35 – записи в микроблог;
- 46 – смена геоположения.
Немного магии
По смещению 0x10 от начала файла mra.dbs, как оказалось, и хранится адрес заветной хеш-таблицы. Пройдя по смещению первого индекса из хеш-таблицы, мы натыкаемся на структуру начальных данных. Возможно, там находится вообще вся информация, заложенная в mra.dbs. Идем дальше. По смещению 0x20 в этой структуре хранится количество записей истории или, проще говоря, количество переписок. Так как файл дампа постоянно расширяется, то по смещению 0x2C лежит идентификатор последней записанной истории, – это все, что нам нужно знать, чтобы начать искать идентификаторы переписок. В целом же алгоритм такой:
- проходимся по идентификаторам записей истории с помощью цикла (начиная от последней добавленной записи);
- если в этой записи от смещения 0x190 присутствует слово «mrahistory_», то это означает, что по смещению 0x24 лежат идентификаторы цепочки сообщений данной переписки.
Чтобы стало немного понятней, взгляни на этот код:
Проверка кэша
Каждый браузер кэширует некоторые файлы с посещаемых пользователем сайтов. Этот процесс сохранения данных на компьютер позволяет каждый раз не загружать информацию с веб-сервера, а использовать уже имеющиеся файлы. Это значительно сокращает время загрузки сайта.
Вы можете использовать эту особенность сайта, чтобы найти не очень старые сообщения. Эту операцию удастся провернуть только в том случае, если в настройках браузера не включена автоматическая очистка кэша, и вы самостоятельно не удаляли его в последнее время.
Процесс поиска и просмотра кэша в разных браузерах имеет значительные отличия, так что это уже тема отдельной статьи. Сейчас коротко разберем процесс чтения кэшированных страниц на примере популярного обозревателя Google Chrome.
Первым делом вам нужно отключить интернет. Так вы не дадите браузеру перезаписать кэш. После этого перейдите на страницу с экспериментальными настройками (chrome://flags/#show-saved-copy) и в пункте “Show Saved Copy Button” установите значение переключателя в положение “Enable: Primary”. Эта опция добавляет возможность просмотра кэшированных страниц при отсутствии интернета.
Все еще не включая интернет, перейдите на страницу со списком диалогов ВКонтакте. Так как интернет у вас выключен, необходимо скопировать ссылку заранее. Можете также использовать вот этот URL – https://vk.com/im?peers.
На знакомой многим странице с динозавриком и уведомлением об отсутствии интернета вы увидите кнопку “Открыть сохраненную копию”. Нажмите на нее и вы попадете на страницу диалогов, которая хранится в кэше браузера. Отсутствие кнопки на странице означает, что она не кэшировалась, и сохраненной копии на вашем компьютере нет. В таком случае попробуйте использовать любой другой приведенный в статье способ.
Как добыть файл 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 у нас в руках. Теперь перейдем к его потрошению:).