2010-09-19 4 views
2

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

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

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

Спасибо.

ответ

5

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

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

+0

+1 избежать этого любой ценой. – SLaks

+0

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

+0

По моему опыту, это быстро развивающиеся рабочие места, работающие по принципу «без посторонней помощи», которые не работают в течение шести месяцев, чтобы нуждаться в поддержке навсегда плюс шесть месяцев. Удачи ... –

0

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

http://www.ollydbg.de/

И контроль за тем, как с OllyDbg сценария и AutoIt?

+0

Вот некоторые богатство knowleedge о Olly: http://reversengineering.wordpress.com/ – user376403

0

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

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

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

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

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

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

+0

Я не понимал, что вы делаете это ради удовольствия. В любом случае я оставлю свой ответ в качестве альтернативного метода. – mpeterson

7

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

Если вы не знаете много о памяти процесса назначения вы можете просто пронумеровать блоки памяти с уважением VirtualQueryEx (см How does one use VirtualAllocEx do make room for a code cave? в качестве примера, где я изучить программный код. Данные программы можно рассматривать в так же).

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

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

+0

+1 .. Это выглядит как многообещающая информация. – mpeterson

0

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

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

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