Site Tools


software:win:dbg:savedata

This is an old revision of the document!


Бывает что пишешь текст, бац и ошибка в программе или программа просто перестала отвечать, до того как отправил/сохранил. Набивать по новой - всегда мучение, особенно если не обладаешь исключительной памятью.

К счастью есть относительно простой способ вытащить свой текст. Для вытаскивания текста потребуется OllyDBG и Far или Notepad++. Особых навыков не требуется, достаточно быть уверенным пользователем. Сам я сегодня впервые это сделал, обычно отлаживаю только свои проги. Искушённых в отладке людей прошу не ругаться, метода описана доступным языком.

<h1>Замечание</h1> DNSLookup.exe - моё приложение, пришлось специально его модифицировать чтобы вылетал при нажатии кнопки test, дабы написать эту публикацию. Первоначально я вытаскивал из зависшего FireFox свой не отправленный комментарий. Размер текста для извлечения тоже не ограничен, в этом примере всего одно слово только как демонстрация техники.

1. Не закрываем приложение, пусть и дальше висит!

2. Сейчас нам нужно подключится к приложению которое зависло/вылетело отладчиком. Открываем <b>OllyDBG</b> и подключаемся к зависшему процессу: <b>File</b>, <b>Attach</b> в столбике <b>name</b> ищем зависший процесс и нажимаем <b>Attach</b>.

3. Теперь нам нужно найти наш текст в памяти приложения. Меню - <b>Windows</b>, <b>2 Memory Map</b>. В появившемся окне щёлкаем правой кнопкой мыши, в появившемся меню выбираем <b>Search</b>. Появится окошко:

В поле UNICODE вводим кусочек текста или цифры. Текст на русском у меня не искало. Хотя бы 3-4 символа, иначе будет много похожего.

4. Вот что то найдено:

Если это не то что искали, то закрываем окошко <b>Dump</b> с найденным текстом, и в окошке <b>Memory Map</b> щёлкаем правой кнопкой и выбираем <b>Search Next</b>. Если это то что мы искали, заветный текст то правой кнопкой, <b>Backup</b>, <b>Save data to file</b>.

5. Открываем сохранённый файл в Far / Notepad++, ищем текст из п 3.

Перед поиском нужно убедится что Far/Notepad++ интерпретируют содержимое файла как UTF-16 Little endian. (Shift + F8 в Far в режиме просмотра).

Остаётся только выделить найденное и скопировать в более удобное место.

<h1>Ограничения / особенности</h1> 1. Может потребоваться SeDebugPrivelege для пользователя который запускает OllyDbg. Можно запустить от имени пользователя который такую привилегию имеет, например от админа. 2. Я использовал OllyDbg х32, и приложения у меня были х32. Для зависшего х64 приложения может потребоваться х64 версия отладчика. 3. Notepad++ не всегда может правильно опознать кодировку и/или переключится на другую. 4. Если текст вводили в разные поля - скорее всего придётся повторять начиная с п3 до тех пор пока всё нужное не будет найдено и сохранено. 5. Для текстовых редакторов типа Word метод может не сработать, тк их внутреннее представление текста может быть отличным от UTF-16 Little endian. 6. UTF-16 Little endian - для юникодных программ, для старых ANSI. 7. В принципе можно за “вечер” написать утилиту которая будет сама всё делать, останется только выбрать процесс и какой фрагмент памяти и куда сохранить, просто случается не часто чтобы так автоматизировать. 8. Возможно OllyDbg и сама умеет показывать текст, и даёт его скопировать, но я ей пользоваться не умею потому действовал “по старинке” через Far. 9. Метод можно использовать против приложений которые не дают копировать текст, может повезти.

<h1>PS</h1> Вот как было в первый раз: Пока готовил еду, кто то из браузеров сожрал всю память, экслорер и опера вылетели, фаерфокс с недописанным комментарием повис (скорее всего тоже не смог выделить память, но более корректно обработал ошибку выделения).

Вспомнить я смог только site-to-site.

software/win/dbg/savedata.1431476044.txt.gz · Last modified: 2015/05/13 00:14 by root