2016-09-04 11 views
0

Как говорится в названии, как это будет сделано? Если я добавлю один байт в начале кода операции, он будет выталкивать адреса в памяти с одним байтом. если вы не понимаете вопрос:Добавление байтов в PE без влияния на выполнение

оригинал:

0x1 mov ecx, 10 
0x2 mov eax, 1 
0x3 inc eac 
0x4 cmp eax 
0x5 jl 0x3 

Добавлено байт:

0x1 NOP 
0x2 mov ecx, 10 
0x3 mov eax, 1 
0x4 inc eac 
0x5 cmp eax 
0x6 jl 0x3 

бы я вручную установить каждый JMP, звонить и т.д., или есть какие-либо другие способы сделать Это?

+1

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

+0

Хм, это может быть не точный дубликат. Дуп-цель, которую я выбрал, - это один конкретный метод добавления нового кода (поместить его в новый раздел и заменить некоторые существующие insns на jmp), но ответ Jean-François указывает на другие методы. –

ответ

2

плохая идея, так как это было бы

  • сдвига некоторых относительные скачки (не все из них)
  • сдвига перемещения смещения, если код не является позиционно-независимым

Когда я треснуть игры , Я поставил NOPs INSTEAD кода, и все было в порядке, но иногда вам нужно было сделать больше, чем это:

Альтернативы:

  • найти свободную/неиспользуемую программную зону (например, недостижимый код надежности) и переместить туда какой-то оригинальный код. Затем jsr к нему и добавьте свой собственный код.
  • разобрать исполняемый файл, чтобы его можно было повторно собрать и добавить свой код в том же порядке. Этот метод требует, чтобы вы идентифицировали все разделы данных &, поэтому это сложнее, но в конце вы можете добавить что-либо в программу.
+0

Если я разобрал исполняемый файл. Как узнать, является ли байт инструкцией или частью позиции памяти? Например: я мог бы искать команду mov 0x89 и найти ее во всех 0x89 movs, но также и в mov eax, dword_0x4C89. –

+0

@JF: Дайте мне знать, если вы думаете, что я должен снова открыть это. Возможно, я поспешил его задушить. –

+0

@PeterCordes, это вы, но я думаю, что вы правы. Связанный ответ отличный и очень полный. –