...

воскресенье, 16 ноября 2014 г.

[recovery mode] Как вытащить несохранённые данные из упавшего приложения

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

Набивать по новой — всегда мучение, особенно если не обладаешь исключительной памятью.

image

К счастью есть относительно простой способ вытащить свой текст.



Для вытаскивания текста потребуется OllyDBG и Far или Notepad++.

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

Сам я сегодня впервые это сделал, обычно отлаживаю только свои проги.

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




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

Размер текста для извлечения тоже не ограничен, в этом примере всего одно слово только как демонстрация техники.

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

image


2. Сейчас нам нужно подключится к приложению которое зависло/вылетело отладчиком.

Открываем OllyDBG и подключаемся к зависшему процессу: File, Attach

в столбике name ищем зависший процесс и нажимаем Attach.

image


3. Теперь нам нужно найти наш текст в памяти приложения.

Меню — Windows, 2 Memory Map.

В появившемся окне щёлкаем правой кнопкой мыши, в появившемся меню выбираем Search.

Появится окошко:

image


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


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

image

Если это не то что искали, то закрываем окошко Dump с найденным текстом, и в окошке Memory Map щёлкаем правой кнопкой и выбираем Search Next.

Если это то что мы искали, заветный текст то правой кнопкой, Backup, Save data to file.


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

image

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

(Shift + F8 в Far в режиме просмотра).

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




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. Метод можно использовать против приложений которые не дают копировать текст, может повезти :)

Вот как было в первый раз:

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

image

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

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий