Как прочитать некоторые данные из памяти приложения Windows? - PullRequest
2 голосов
/ 19 сентября 2010

У меня есть приложение, которое отображает мне некоторые данные.Мне нужно присоединиться к процессу этого приложения, найти нужные мне данные в памяти (на самом деле одно единственное число) и сохранить их где-нибудь.Похоже, что это приложение не использует стандартные элементы управления Windows, поэтому все будет не так просто, как чтение данных элементов управления с помощью AutoIt или чего-то подобного.

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

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

Спасибо.

Ответы [ 5 ]

7 голосов
/ 19 сентября 2010

Чтобы прочитать память другого приложения, вам нужно открыть процесс в отношении OpenProcess с по крайней мере PROCESS_VM_READ правами доступа и затем использовать ReadProcessMemory , чтобы прочитать любой адрес памяти изпроцесс.Если вы являетесь администратором или имеете права отладки, вы сможете открыть любой процесс с максимальными правами доступа, вам нужно только включить SeDebugPrivilege до этого (см., Например, http://support.microsoft.com/kb/131065).

Если вы не знаете,много о памяти процесса назначения, вы можете просто перечислить блоки памяти в отношении VirtualQueryEx (см. Как можно использовать VirtualAllocEx, чтобы освободить место для пещеры кода? в качестве примерагде я проверяю программный код. Данные программы вы можете исследовать аналогичным образом).

Наиболее практическая проблема, которую я вижу, состоит в том, что вы задаете свой вопрос слишком общим способом. ЕслиВы объясняете, какой тип данных вы ищете, я мог бы предложить вам лучший способ. Например, если вы могли бы где-то увидеть данные, вы могли бы изучить соответствующие окна и элементы управления в отношении Spy ++ (часть инструментов Visual Studio).Наиболее важными являются класс окон (или элементов управления) и сообщения, которые будут отправлены намомент, когда отображаются самые интересные окна.Вы также можете использовать Process Monitor для отслеживания доступа к файлам и реестру в тот момент, когда будут отображаться окна с интересной информацией.По крайней мере, в начале вы должны проверить память процесса с помощью ReadProcessMemory в тот момент, когда искомые данные отображаются в окне.

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

5 голосов
/ 19 сентября 2010

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

Тем не менее, вы можете взглянуть на DLL инъекцию .Тем не менее, звучит так, как будто вам придется отлаживать чертовый процесс в целевом процессе на уровне разборки: в противном случае, как вы узнаете, какой адрес памяти читать?

0 голосов
/ 05 марта 2015

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

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

Вот пример использования описанной выше техники: https://www.youtube.com/watch?v=Nv04gYx2jMw&t=265

0 голосов
/ 19 сентября 2010

Звучит интересно ... но очень сложно. Поскольку вы говорите, что это «одноразовый», как насчет этого?

  • Сделайте скриншот этого приложения.
  • Запустить скриншот через программу OCR
  • Если вы можете читать искомый текст, который вы ищете, вы на полпути!

Так что теперь, если вы можете прочитать снимок экрана вашего приложения с помощью OCR, вам просто нужно написать программу, которая выполняет следующие действия:

  • Сценарии шагов для вывода данных на экран
  • Создает скриншот рассматриваемых данных
  • Запускает его через программу OCR, например Отображение документов Microsoft Office
  • Извлекает соответствующий текст и делает с ним «что угодно».

Я делал что-то подобное раньше с довольно хорошими результатами, но я бы сказал, что это хрупкое решение. Если приложение меняется, оно перестает работать. Если OCR не может прочитать текст, он перестает работать. Если OCR читает неправильный текст, это может сделать хуже, чем перестать работать ...

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

0 голосов
/ 19 сентября 2010

Раньше я знал API отладки Windows, но он давно потерял память. Как насчет использования ollydbg:

http://www.ollydbg.de/

И как управлять этим с помощью сценария ollydbg и autoit?

...