Як витягнути незбережені дані впав програми

Буває пишеш текст, бац і помилка в програмі або програма просто перестала відповідати, до того, як відправив/зберіг.
Набивати по новій — завжди мука, особливо якщо не володієш винятковою пам'яттю.
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. Метод можна використовувати проти додатків які не дають копіювати текст, може пощастити :)

PS
Ось як було в перший раз:
Поки готував їжу, хтось з браузерів зжер всю пам'ять, экслорер і опера вилетіли, фаєрфокс з недописаним коментарем повис (швидше за все теж не зміг виділити пам'ять, але більш коректно обробив помилку виділення).
image
Згадати я зміг тільки site-to-site :)

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.