Где хранится история переписок в ICQ

Где сохраняется история icq. Где хранится история переписок в ICQ

Где хранится история переписок в ICQ

Читайте, в каких файлах хранит данные ICQ и как создать их резервную копию. Как восстановить чаты и файлы ICQ после переустановки Windows.ICQ – это раннее очень популярный мессенджер для обмена сообщениями и файлами, а в последних версиях с функцией осуществления аудио и видео звонков.

Последнее время позиции ICQ несколько пошатнулись, в связи с набором популярности таких мессенджеров как , Viber и WhatsApp , а также Skype и приложения социальной сети . Но тем не менее у ICQ есть огромная армия пользователей, которым будет интересен данный материал.

Файлы и данные ICQ

За многие годы своего существования программа претерпела множество изменений и доработок, в результате чего на сегодняшний день доступна версия ICQ 10, которая совместима c Windows 10 и имеет схожий с операционной системой интерфейс.

Вместе с версией мессенджера также менялось и место размещения истории сообщений и файлов самого аккаунта пользователя ICQ. Так, в последней версии приложения это по умолчанию папка:
C:\Users\ИмяПользователя\AppData\Roaming\ICQ

Обратите внимание, что по умолчанию в Windows 8 / 8.1 / 10 папка \AppData является скрытой. Чтобы иметь возможность перейти в неё, необходимо включить отображение системой скрытых файлов и папок.

Исследовав содержимое данной папки (см. скриншот выше), можно увидеть её структуру, которая схожа со структурами папок данных других мессенджеров. Здесь расположены папки с темами, настройками и логами ICQ, а также папки в которых расположены данные конкретных аккаунтов пользователей.

В нашем случае папка аккаунта пользователя имеет название «0001». Даже из самих названий папок не трудно определить их назначение и содержимое. Это папки с файлами стикеров, ключей, диалогов, контактов и аватаров, а также архив.

В папке /archive расположены папки, которые имеют названия UIN (Universal Identification Number) пользователей, с которыми осуществлялась переписка с данного аккаунта. Файлы каждого чата зашифрованы и находятся в файлах: _db2, _idx2, _img2, _ste2.

Резервная копия данных

Вся история переписки ICQ сохраняется на компьютере пользователя, и не хранится на серверах мессенджера (как в случае с Skype, например). То есть, в случае форматирования жесткого диска на который установлен ICQ, и переустановки приложения, вся история переписки будет утеряна.

Функции создания резервной копии аккаунта пользователя или конкретной переписки в ICQ 10 также нет.

Поэтому, способ резервирования и восстановления данных ICQ один: вручную создать копию папки аккаунта пользователя (в нашем случае /0001) и сохранить её в удобном месте (желательно на другом носителе информации).

Для восстановления данных вашего аккаунта в ICQ после переустановки Windows или форматирования жесткого диска, достаточно скопировать созданную ранее резервную копию папки вашего аккаунта в папку с данными мессенджера:
C:\Users\ИмяПользователя\AppData\Roaming\ICQ

Восстановление данных ICQ после переустановки Windows

Если пользователем не была создана резервная копия аккаунта ICQ, а после переустановки Windows или форматирования жесткого диска есть необходимость восстановить осуществлённые раннее чаты, то их можно восстановить с помощью программ для восстановления данных.

Для этого, запустите Hetman Partition Recovery и просканируйте с помощью программы диск, на котором били сохранены данные аккаунта пользователя (по умолчанию: C:\Users\ИмяПользователя\AppData\Roaming\ICQ).

Найдите с помощью программы папку аккаунта, которую необходимо восстановить (перейдя к ней по дереву каталогов или с помощью функции поиска) и восстановите её.

Для восстановления данных аккаунта в ICQ после переустановки Windows или форматирования жесткого диска, достаточно скопировать восстановленную папку вашего аккаунта в папку с данными мессенджера, описанным в предыдущем разделе способом.

Примечание. Чтобы избежать затирания файлов диска С, которые необходимо восстановить, желательно загружать и устанавливать программу для восстановления данных жесткого диска, а также сохранять восстановленные данные, на другой диск (например, диск D).

На сегодняшний день существует огромное количество мессенджеров для компьютерных пользователей, например, Skype, Viber, но, без сомнения, старожилом по-прежнему остается ICQ.

Этой программе уже несколько десятков лет, но она, как и раньше, продолжает успешно функционировать на многих ПК.

Конечно, вполне возможно, что дело просто в привычке, но вместе с тем, нельзя не учитывать и удобство работы на данном клиенте.

Общие сведения

Если копнуть немного глубже, то окажется, что на серверах ICQ история переписки не хранится, доступ к ней имеет только конкретный пользователь на своем компьютере. То есть, удалив ее однажды или удалив полностью ICQ, восстановить вы уже не сможете. Есть, конечно, народные умельцы, которые утверждают, что этот факт спорный, и его можно обойти, однако в данной статье речь не об этом.

Хочу также отметить, что если вы регулярно общаетесь посредством данного мессенджера, и история переписки для вас очень важна, не забывайте время от времени ее сохранять.

Дело в том, что если вдруг на компьютере «слетит» операционная система, естественно, файл с историей также удалится, ведь располагается он на диске С.

Именно поэтому не ленитесь, пересохраняйте свою переписку на другой диск, ведь от проблем с ОС не застрахован никто и при переустановке Windows всю информацию потеряете.

Как найти историю переписки

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

Путь к истории переписки следующий: диск С — Documents and Settings — имя пользователя — Application Date — ICQLite — HistoryDB. Соответственно, в последней папке вы можете найти саму историю. Думаю, вы не ошибетесь с файлом, его формат — xml.

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

Интернет-общение – это неотъемлемая часть жизни человека в современном обществе. Пользователи глобальной сети общаются с использованием специально разработанных программ. Они позволяют передавать текст или сообщения голосом, а также проводить видео-конференции. Это обеспечивает наличие постоянной связи с близкими родственниками или друзьями, несмотря на их месторасположение. Иногда сообщения пропадают, а данные, размещеные в них, имели большое значение, поэтому перед клиентом интернета зачастую возникает проблема, связанная с требованием восстановления истории переписки. Инструкция по восстановлению переписки в «ICQ»Для этого рекомендуется воспользоваться приложениями, которые специально были разработаны для этих целей. Стоит отметить, что история СМС представляет собой систему отдельных текстовых файлов. Их название указывает на имя контакта, с которым проводилась часть переписки. Для проведения процедуры восстановления информации следует провести сканирование диска с помощью приложения «EasyRecovery». Его можно скачать на официальном ресурсе, после чего разархивировать и провести установку. Сканироваться нужно диск, где установлено приложение.Существую и другие варианты достижения результата. Очень часто потеря происходит из-за смены имени, под которым пользователь входит в приложение. «ICQ» сохраняет все сообщения на жестком диске, поэтому возможно с легкостью зайти в папку с названием «History», где находится полная версия переписки со всеми контактными абонентами.Восстановить утерянную переписку поможет программа «Icq 2html». Она способна найти все СМС, несмотря от того, каким образом они были удалены. Способы поиска истории в «ICQ»Ее можно просмотреть благодаря средствам «Windows». Самым простым способом является применение стандартных средств. Для этого нужно найти переписку с интересующим вас контактом, после чего найти и нажать кнопку «history». Это позволить вызвать всю хронологическую историю СМС. История переписки с отдельным контактным сохраняется в файле с расширением «.text». Его название указывает на имя респондента. Все данные можно найти в каталоге, поэтому с использованием локального поиска можно найти требуемую переписку.

В настоящее время человек ведет большую как личную, так и деловую переписку. Часто в ней содержатся ценные данные, поэтому участник системы очень дорожит ей. Иногда, вследствие сбоя в работе компьютера, эти ведомости могут быть потеряны. Здесь не нужно расстраиваться, сегодняшние технологии позволяют быстро найти и восстановить историю СМС.

Современные социальные сети и мессенджеры давно содержат всю переписку пользователей на своих серверах. же не может этим похвастаться. Так что для того, чтобы отыскать историю переписки с кем-либо, потребуется покопаться в памяти компьютера.

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

Вместе с тем считается, что такая система имеет и свои плюсы. Например, таким образом информация является более защищенной от доступа извне, что делает мессенджер более закрытым от постороннего проникновения к тайне переписки.

Тем более, сейчас разработчики всех клиентов работают не только над тем, чтобы спрятать историю переписки поглубже в недра компьютера, но и зашифровать файлы, чтобы было сложно не только прочитать, а и вообще обнаружить их среди других технических файлов.

Как итог, история хранится в компьютере. В зависимости от программы, работающей с сервисом ICQ, местонахождение нужной папки может быть разным.

История в ICQ

С официальным клиентом ICQ дела обстоят совсем тяжело, поскольку здесь разработчики постарались на славу, чтобы файлы персональных переписок были в безопасности.

В самой программе узнать местонахождение файла с историей невозможно. Здесь можно только задать папку для хранения загруженных файлов.

А вот носители истории переписки засунуты гораздо глубже и сложнее. Что характерно, местоположение этих файлов меняется с каждой версией.

Последняя версия мессенджера, в которой история сообщений может быть получена без каких-либо проблем – 7.2. Располагается необходимая папка по адресу:

C:\Users\[Имя пользователя]\AppData\Roaming\ICQ\\Messages.qdb

Источник: //www.thetarif.ru/services/gde-sohranyaetsya-istoriya-icq-gde-hranitsya-istoriya-perepisok-v-icq.html

Как восстановить историю сообщений ICQ | Сделай все сам

Где хранится история переписок в ICQ

Люди привыкли общаться через интернет посредством разновидных общественных сетей и программ. Они предуготовлены для передачи не только текстовых, ых сообщений, но и даже видео-звонков. Таким образом человек может разговаривать «вживую» с друзьями, находящимися в ином городе либо стране. Порой случается так, что история сообщений удаляется, а в ней была такая главная информация…

Вам понадобится

  • – компьютер;
  • – программа Easy Recovery;
  • – программа icq2html.

Инструкция

1. Восстановить историю сообщений в ICQ, удаленную по разным причинам, дозволено фактически неизменно, воспользовавшись особым программным обеспечением. Помните, что история сообщений хранится в текстовых файлах. Наименование UIN в таком файле – это имя того человека, с которым вы общались.

2. Испробуйте восстановить информацию на диске. Для этого вам потребуется программа Easy Recovery (есть в свободном доступе, дозволено скачать в интернете). Разархивируйте ее и установите на компьютер. Сканируйте диск, на котором у вас установлена ICQ и другие программы (традиционно, это диск С).

3. Восстановите файлы по адресу типа C:/Program Files/QIP/Users/*, а также номер вашей учетной записи */History. Выберите тот отрывок текста, тот, что вам надобен либо выделите каждый целиком.

4. Есть и другие, альтернативные методы поправления истории личных сообщений в программе ICQ. Нередко история удаляется и теряется при смене логина.

Если вы традиционно включаете программу под различными именами либо с различных компьютеров, то она механически синхронизирует всю историю сообщений.

Информация сохраняется на жестком диске, в том каталоге, в тот, что была установлена программа.

5. Зайдите в локальный диск С и разыщите папку ICQ. Откройте папку History. Она непременно присутствует в данном каталоге. Именно в ней сохранена каждая ваша переписка с контактами из списка.

6. Обнаружьте в интернете программу icq2html. Скачайте ее и установите себе на компьютер. Восстановите удаленные сообщения.

При поправлении истории в данном случае идеально не значимо, каким образом были удалены сообщения.

Допустимо, входящее сообщение потерялось в момент выключения компьютера либо же при смене одного пользователя на иного (если компьютер применяется несколькими людьми), а может, было удалено специально.

Совет 2: Как обнаружить историю icq

Как и уйма заказчиков сервисов для обмена мгновенными сообщениями, ICQ хранит историю переписки со всеми контактами. Просмотр истории осуществляется с подмогой программы-заказчика, либо стандартными средствами Windows.

Совет 3: Как восстановить историю сообщений

В 21 веке люди привыкли общаться через интернет. Для этого применяются разные общественные сети, такие как либо , а также ICQ либо Qip.

Общаясь, мы получаем разные файлы и сообщения, но изредка получается так, что история сообщений по разным причинам удалена, а там содержалась дюже главная для нас информация.

Для того дабы ее восстановить, дозволено воспользоваться особым программным обеспечением.

Вам понадобится

  • – персональный компьютер;
  • – программа Easy Recovery.

Совет 4: Как восстановить переписку по icq

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

Вам понадобится

  • компьютерная программа ICQ,
  • интернет

Совет 5: Как восстановить переписку icq

Общение в разных общественных сетях и чатах посредством особых программ не неизменно носит нрав веселия. Порой пользователи обмениваются главной информацией, нужной для работы, и случайное удаление переписки становится серьезной загвоздкой.

Совет 6: Программа ICQ: что это такое и для чего она необходима

ICQ – протокол для обмена текстовыми сообщениями и файлами. Также существует одноименная программа для текстового общения, которая работает с данным протоколом и поддерживает вероятность подключения аккаунтов знаменитых общественных сетей.

Общественные сети не были пионерами мира виртуального общения. Значительно прежде их родились так называемые интернет-пейджеры – программы для обмена текстовыми сообщениями. И лидером среди интернет-пейджеров длинное время считался сервис ICQ, работающий посредством одноименного протокола обмена сообщениями.

Что представляет собой программа ICQ

ICQ– приложение, разрешающее общаться в индивидуальных чатах с обладателями аккаунтов ICQ, называемых UIN’ами. UIN– это персональный номер, чем-то схожий с номером телефона. Первые UIN’ы состояли из пяти цифр, что разрешало их легко запоминать и при знакомстве оставлять их человеку в качестве контакта для связи.

Теперь же число аккаунтов ICQ превысило миллионную отметку и при регистрации пользователи могут рассчитывать разве что на 9-значный неповторимый номер. Но и эта задача решается. Комфортный и «прекрасный» UIN дозволено при желании приобрести за небольшую сумму в сети.

Для приобретения своего номера ICQ надобно пройти несложную регистрацию, предусматривающую ввод адреса электронной почты и создания неповторимого пароля. А для старта общения с другими пользователями понадобится скачать и установить на компьютер либо мобильное устройство всякое приложение, поддерживающее протокол ICQ.В самой программе не так много опций.

По факту приложение состоит из перечня контактов и непринужденно окна диалога. В окне диалога есть вероятность добавлять в сообщение графические смайлы, файлы и отслеживать ранг собеседника.

Для чего надобна программа ICQ?

ICQ– программа для общения. В начале 2000-х программа была на пике популярности. Через ICQ знакомились, болтали и даже помогали друзьям на экзаменах, скидывая через «аську» результаты к билетам. Но потом знаменитость обслуживания поразительно снизилась и теперь ICQ почаще применяется фрилансерами для рабочего общения, нежели для поиска новых знакомств.

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

Это освобождает от необходимости отслеживать обновления новостной ленты через браузер, потому как все новые записи приходят прямиком в «аську».

Источник: //jprosto.ru/kak-vosstanovit-istoriyu-soobscheniy-icq/

Получаем доступ к истории переписки и контактам в популярном мессенджере – «Хакер»

Где хранится история переписок в ICQ

Ты вряд ли пользуешься Mail.Ru Агентом, но это бешено популярный сервис, который с каждым днем набирает обороты.

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

Но сегодня я хочу рассказать о том, как был разреверсен файл с историей сообщений пользователя.

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

Эксперимент начался для меня еще в далеком 2008 году, когда друг попросил проверить переписку его девушки в Mail.ru Агенте. Тогда файл истории представлял из себя простой текстовик с названием emailhistory.txt и имел по сравнению с mra.

dbs (файл, в котором в настоящее время хранится история переписки и данные о контактах) примитивную структуру. За пару часов был написан простой, но эффективный RTF-конвертер, который и делал всю грязную работу по вытягиванию переписки из Агента. Друг был в восторге.

Далее, в ходе изучения программирования на компилируемых языках, я в качестве практики написал программу Mail.ru History Reader, описание которой попало на страницы ][ в августе 2009 года. Получив большое количество положительных отзывов, я опубликовал структуру формата тогдашнего файла истории (см.

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

В компании с SOLON7 мы ковыряли этот файл в HEX-редакторе, пытаясь найти структуры, ссылки на смещения и всевозможные изменения после запуска Mail.ru Агента. К концу 2010 года после долгих поисков формат все-таки покорился.

Идентификаторы начала перепискиДругие статьи в выпуске:

  • выпуска
  • Подписка на «Хакер»

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 хранится в папке «%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 представляет из себя дамп памяти Mail.ru Агента, поэтому открыть его для чтения при работающей программе не представляется возможным (для рядового программиста, но у нас свои секреты :), также задачу усложняет тот факт, что в памяти все числа хранятся в перевернутом виде. Однако давай немного углубимся в реверс-инжиниринг.

Структура записи сообщения

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

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

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

Начало истории характеризуется ключевым словом 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[3];unsigned int count_nick;unsigned int magic_num; // 0x38unsigned int count_message;unsigned int xz2; unsigned int size_lps_rtf; unsigned int xz3; };

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

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

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

  • 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[1]);DWORD count_emails=*(DWORD*)(mra_base+0x2C+offset_table[1]);…for(int i=0;iid2;} Интерфейс моей читалки

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

CreateFileCreateFileMapMapViewOfFileVirtualFreeCloseHandleCloseHandle

Так как нам не нужно сохранять внесенные изменения обратно в файл, то здесь вместо 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[id_message]);wchar_t *str=(wchar_t *)((unsigned char *)mes+sizeof(_message));…id_message=mes->prev_id;}

Дата сообщения хранится в формате FILETIME, для удобства ее можно перевести в удобочитаемый вид с помощью функции FileTimeToSystemTime.

Формат RTF отлично воспринимается Rich Edit’ом и любыми другими стандартными редакторами типа WordPad.

Но с этим можно и не заморачиваться, так как сообщения хранятся в неотформатированном виде сразу после ника, а их размер указан в структуре message. Это все, что тебе нужно знать, чтобы получить удобоваримый список мессаг из Агента.

К сожалению, формат журнала не позволяет привести здесь мои хардкорные изыскания полностью, поэтому поспеши заглянуть на диск.

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

Кстати, незатронутой осталась не менее увлекательная тема чтения истории ICQ-переписки, которая также хранится в файле mra.dbs. Спасибо компании Mail.Ru, во-первых, за разработку Mail.Ru Агента, во-вторых, за заметное развитие любимой аськи, и в-третьих, за интересный квест, о котором я тебе сегодня рассказал.

Источник: //xakep.ru/2012/11/30/mailru-agent-hack/

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.