Как мы читаем каждый байт в памяти процесса? После того, как мы закончили чтение, как мы можем сделать «шестнадцатеричный» дамп процесса?
Для примера:
Процесс A.exe:
00400000: 00 00
00400002: 74 05
...
Сканирование:
00 74 05 ...
Дамп A.exe в A.txt:
00 74 05
Мой компилятор — Visual C ++ 2010, и я планирую написать приложение win32, которое будет использовать эту функцию. Операционная система, над которой я буду работать, — это Window 8. Однако мое приложение должно работать для Windows 8 и, по крайней мере, для Windows XP.
Пока что это то, что у меня есть …
#include <windows.h>
void ScanForBytes( const char* TargetName, DWORD dwFromAddress, DWORD dwToAddress ) {
HANDLE hProc; // I guess we will be needing the handle to the process.
//And this is where I stopped and asked for help...
}
int main() {
ScanForBytes( "Chrome.exe", 0x00400000, 0x00400001 );
return 0;
}
Функция, которую вы ищете ReadProcessMemory
, Вы можете найти документацию для этой функции здесь на MSDN.
Эта функция копирует данные в указанном диапазоне адресов определенного процесса в указанный буфер. Вам нужно убедиться, что ваше приложение запущено с соответствующими правами для этого. Обычно это привилегии отладки — только отладчики должны читать и / или изменять личную память других процессов. Функция завершится ошибкой, если у вас нет необходимых прав доступа все указанный блок памяти. Вы найдете больше информации о правах доступа здесь на MSDN. Если вы еще не знакомы с моделью безопасности на работе, я рекомендую внимательно прочитать документ.
Естественно, ваш процесс также должен соответствовать разрядности процесса, память которого вы хотите прочитать. Другими словами, если вы хотите прочитать память из процесса Chrome, Chrome скомпилируется как 32-разрядное приложение, поэтому ваше приложение должно быть тоже. Вам нужно будет перекомпилировать как 64-битное приложение, если вы хотите вывести память из другого 64-битного приложения. Это споткнуло количество комментариев на странице MSDN.
Само собой разумеется, что вам нужно проверить все возвращаемые значения и правильно обработать ошибки. Такого рода вещи должны быть ожидаемый потерпеть неудачу в обычных условиях.
однажды ReadProcessMemory
возвращает успешно, указанный вами массив будет содержать запрошенные данные. Оттуда, это просто сделать все, что вы хотите с ним, как записать его в текстовый файл.
Других решений пока нет …