Как прочитать некоторые данные из памяти приложения Windows?

StackOverflow https://stackoverflow.com/questions/3746409

Вопрос

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

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

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

Спасибо.

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

http://www.ollydbg.de/

И контролирует, что с помощью скрипта ollydbg и Autoit?

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

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

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

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

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

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

Я знаю, что это не может быть популярным ответом, из-за природы того, что используется для этого программного обеспечения, но программы, как ChendEngine. а также АртМони Позвольте вам выполнить поиск по всей памяти, зарезервированной процессом для заданного значения, затем уточните результаты, пока не найдете адрес значения, который вы ищете.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top