Переменная кодирования / исправления в другом .exe - PullRequest
0 голосов
/ 03 декабря 2011

У меня нет идей, как это сделать:

У вас есть один файл, назовем его test.exe,

имеет значение const int = 5; в нем, и все, что он делает, это cout << значение; </p>

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

Я пытался отключить ASLR, получить адрес этой переменной, а затем внести исправления, но адреса на диске и в памяти отличаются AFAIK.

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Найдите его по подписи: получите 8-16 байт вокруг значения 5, а затем найдите их в двоичном файле .exe.

Также обратите внимание, что обычно значения const int встроены в код ассемблера, поэтому, если у вас есть 2 или более операторов, ссылающихся на него, вы должны исправить все из них.

1 голос
/ 03 декабря 2011

Извините, это замечание предполагает, что вы работаете в системе Windows.Если нет, я уверен, что с другими исполняемыми форматами изображений вы можете использовать аналогичный метод.

Предполагается, что вы пытаетесь спросить, как вы изменяете данные в пределах цели, а не как, в этом конкретном примере, изменитьвывод на экран ...

Рассматривали ли вы просмотр PE-заголовка исполняемого образа?Вы можете перевести адрес определенного фрагмента данных после загрузки в память по его смещению в PE-файле, но взгляните на структуру IMAGE_SECTION_HEADER внутри PE-заголовка рассматриваемого изображения.

Сначала вычислитеRVA ваших данных в памяти.Это адрес данных относительно раздела, в котором он находится.

Во-вторых, индексируйте через структуры IMAGE_SECTION_HEADER внутри PE-заголовка исполняемого файла, считывая заголовок из файла в буфер.Как только вы загрузили этот заголовок в буфер памяти, вы можете обработать его с помощью указателей.Например,

IMAGE_NT_HEADERS* pImageHeader = &peHeaderBuffer[0];

Найдя правильный IMAGE_SECTION_HEADER, содержащий ваши данные, вы можете получить доступ к элементу структуры PointerToRawData, который даст вам смещение от начала PE-файла, в котором находится этот раздел,если вы добавите RVA, вы получите смещение от начала файла, из которого расположены ваши данные.

Очевидно, что мой ответ не объясняет, как индексировать заголовки разделов, так как это довольно утомительная задача, объяснение которой займет некоторое время.Я бы посоветовал вам взглянуть на PE-заголовок exectuable из простого отладчика, такого как OllyDbg, и обратиться к документации MSDN на PE-заголовке, которую можно найти здесь:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms680336%28v=VS.85%29.aspx

Если все, что вы хотите сделать, это отменить эту информацию нашей цели, это очень легко сделать с помощью OllyDbg.Просто просматривайте заголовок PE, пока не увидите раздел, соответствующий вашим данным, и OllyDbg перечислит там элемент PointerToRawData, который вы можете добавить к своему RVA.

...