Возможно ли извлечь/прочитать переменную из работающего .exe-файла?


1

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

У меня есть маленький исполняемый файл, который был написан в Delphi и упакован Aspack 2.12.

Когда файл запускается, появляется переменная с именем Total, которая получает приращение. Когда файл выходит из файла .dat, он обновляется с новым значением Total.

Я могу запрограммировать что-то, чтобы «прочитать» Total из .dat-файла (просто используя php или один из языков, с которыми я знаком). Тем не менее, я хотел бы прочитать значение «Общее» в «реальном времени» при запуске исполняемого файла (мне не нужно «писать» в значение «Всего» - просто прочитайте его).

Я задавался вопросом, есть ли способ написать приложение, которое «достигнет» в исполняемый исполняемый файл и прочитать переменную из него?

Я помню, как в дни Spectrum вы могли «заглянуть» и «вытащить» память. Что-то вроде этого возможно?

Я задавался вопросом, возможно ли это, и если да, то как я могу это сделать?

  0

@DominikAntal ничего себе! Это было молниеносно !!! :-) Спасибо, я сейчас буду Google. Любая идея, как я буду знать, где в памяти читать? А также будет ли этот адрес памяти изменяться каждый раз, когда компьютер запускается, а exe запускается? (спасибо за редактирование об CheatEngine - мой рабочий сервер блокирует это, но я посмотрю на это, когда закончу работу :-)) 07 июн. 172017-06-07 09:11:02

  0

Да, сделаю это @DominikAntal еще раз. Я полагаю, что как только я определил область с CheatEngine, это просто случай написания некоторого кода на C++ для «ReadProcessMemory» в этом месте и чтения переменной, которую я хочу? 07 июн. 172017-06-07 09:17:06

+1

Если ваша переменная статична, возможно, что тот же адрес памяти, который вы нашли через CE, будет работать между перезапусками приложений. Если он не является статичным, вы можете получить его с помощью указателя и смещений. Или путем сканирования шаблонов байтов. Все это должно быть рассмотрено на этом сайте. 07 июн. 172017-06-07 11:36:26

1

Посмотрите на ReadProcessMemory WinAPI, альтернативно CheatEngine - это инструмент, который может выполнять для вас все виды операций, связанных с памятью (поиск, изменение, замораживание, отладка и т. Д.).

Вы также можете выполнить поиск по Github для некоторых других «взломов» проектов на языке, с которым вы знакомы.

Cheat engine может найти точный адрес памяти в памяти, которую вы ищете. Возможно, вы сможете использовать некоторые указатели для определения местоположения вашей ценности при каждом запуске, поэтому вам не обязательно каждый раз использовать CheatEngine для поиска адреса. Я рекомендую вам пройти учебник, который поставляется с Cheat Engine, чтобы вы лучше поняли указатели :)

  0

Я хотел бы, чтобы процесс был в конечном счете автоматизирован (т.е. я запускаю целевой файл .exe, а затем запускаю некоторое программное обеспечение, которое я написал, а затем значение читается в режиме реального времени в текст -файл или что-то еще). Это то, что «указатели», которые вы упомянули, позволяют мне это делать? Так что всякий раз, когда я запускаю exe, мое программное обеспечение автоматически сможет найти правильную переменную и прочитать ее? 07 июн. 172017-06-07 09:21:29

  0

Да, вот что я имел в виду. Вы должны определить, нужны ли указатели для этого, если вы найдете свое значение в том же месте памяти в Cheat Engine после перезапуска приложения, никаких указателей не требуется. Если местоположение памяти изменится, вам нужно будет найти указатель (и смещение (s)) к этому значению. Я думаю, что учебник по СЕ охватывает эту тему! В качестве альтернативы вы также можете попробовать сопоставление шаблонов байтов, но это третий вариант. 07 июн. 172017-06-07 15:05:24