Перейти к содержанию

Изменяемая инсрукция


Рекомендуемые сообщения

И всем опять привет!

Спасибо что помогли решить мой предыдущий вопрос. Но появился новый

%)

Нашёл функцию:

796d6549d557.png

Пытаюсь вешать на AobScan её байтами , не работает. А всё по 1 причине, в инструкции байты изменяются! (выделено красным)

F2 0F 5E 05 40 D6 42 02 8B 74 24 50 8B 7C 24 54 8B 5C 24 58 8B 4C 24 5C 2B F3

Мой вопрос, как сделать AobScan по маске?

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, но встречный вопрос.

Есть инструкция

divsd xmm0,[01FCCE80]

Мне её переделать в

divsd xmm1,[01FCCE80]

Но ведь выделенное красным каждый раз меняется! Как тут сделать тогда?

Можно конечно занопить, но тогда как вернуть?

Ссылка на комментарий
Поделиться на другие сайты

Вам ведь нужно всего-лишь заменить xmm0, на xmm1

ваша инструкция выглядит так (на скриншоте)

0242D763 - F2 0F 5E 05 40 D6 42 02 - divsd xmm0,[0242D640]

вы хотите изменить ее на

0242D763 - F2 0F 5E 0D 40 D6 42 02 - divsd xmm1,[0242D640]

значит, пишем скрипт:


[ENABLE]
0242D766: //или "0242d763+3:" --->>> адрес "05" (В вашем же случаем тут нужно использовать aobscan, но принцип, думаю, вы знаете)
db 0d

[DISABLE]
0242D766:
db 05

Всё!

Можно быть более изощрённым (Но в вашем случаем это будет черезчур. Просто как пример привёл)


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(addr)
registersymbol(addr)

newmem:
//адрес нашей инструкции "0242d763"
//первоначально в скобках указан адрес "0242D640"
//оба эти адреса всегда меняются, но они всегда находятся в памяти на одинаковом расстоянии
//по отношению друг к другу. "0242d763", больше чем "0242D640", значит
//0242D640-0242d763=123
//ниже мы установили метку "addr" на оригинальный адрес ориг. иструкции
//значит:
divsd xmm1,[addr-123] //в данный момент "addr-123" = "0242D640"
jmp returnhere
0242d763:
addr: //данная метка будет находится по адресу 0242d763 (ориг. адрес ориг. инструкции)
jmp newmem
db 90 90 90
returnhere:

[DISABLE]
addr:
divsd xmm0,[addr-123]

unregistersymbol(addr)
dealloc(newmem)

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

В вашем скрипте установлена метка "ammo" на адрес, где расположен заменяемый хекс-байт "05", т.е. в данном скрипте эта метка = этот адрес. Следовательно, в секции "[DISABLE]" у вас должен быть код


ammo:
db 05
unregistersymbol(ammo)

И никакой дополнительный aobscan не нужен.

Тут нужно просто разобраться что к чему.

Имеем иснтрукцию


0242D763 - F2 0F 5E 05 40 D6 42 02 - divsd xmm0,[0242D640]

"0242D763" - адрес инструкции, который постоянно меняется, поэтому мы находим его при помощи массива байт с обозначением "aob_ammo"

И получается


0242D763 F2 //aob_ammo
0242D764 0F //+1
0242D765 5E //+2
0242D766 05 //+3 ---> то, что нужно изменять
0242D767 40 //+4
0242D768 D6 //+5
0242D769 42 //+6
0242D76A 02 //+7

Нам нужен изменить хекс-байт "05", который находится выше на 3 от "aob_ammo", поэтому и пишем "aob_ammo+3" (или можно сразу искать адрес именно этого хекс-байта, а не адрес всей инструкции)

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

искали через

F2 0F 5E 05 xx xx xx xx 8B 74 24 50 8B 7C 24 54 8B 5C 24 58 8B 4C 24 5C 2B F3

но уже это выглядит как

F2 0F 5E 0D xx xx xx xx 8B 74 24 50 8B 7C 24 54 8B 5C 24 58 8B 4C 24 5C 2B F3

Поэтому, в секции [DISABLE] нужно делать еще один "aobscan", но с измененным массивом байт.


[ENABLE]
aobscan(aob_ammo,F2 0F 5E 05 xx xx xx xx 8B 74 24 50 8B 7C 24 54 8B 5C 24 58 8B 4C 24 5C 2B F3)

aob_ammo+3:
db 0d

[DISABLE]
aobscan(aob_ammo2,F2 0F 5E 0D xx xx xx xx 8B 74 24 50 8B 7C 24 54 8B 5C 24 58 8B 4C 24 5C 2B F3)

aob_ammo2+3:
db 05

Но чтобы не делать этого (лишняя работа, да и "aobscan" не всегда выполняется быстро) нам нужно просто отметить для Cheat Engine этот адрес и мы ставим метку "ammo" (и зарегистрируем её при помощи "registersymbol")

Аналогично тому, если вы будете искать свой дом на карте через Континент->Страна->Город->Улица->Дом, а можете просто отметить точку фломастером.

Грубо говоря, получается


0242D763 F2
0242D764 0F
0242D765 5E
ammo:
0242D766 0D //наша точка фломастером
0242D767 40
0242D768 D6
0242D769 42
0242D76A 02

И получается


[ENABLE]
aobscan(aob_ammo,F2 0F 5E 05 xx xx xx xx 8B 74 24 50 8B 7C 24 54 8B 5C 24 58 8B 4C 24 5C 2B F3)
label(ammo)
registersymbol(ammo)

aob_ammo+3:
ammo:
db 0d

[DISABLE]
ammo:
db 05
unregistersymbol(ammo)

По поводу первой ошибки:

Конечно, можно сделать и как вы вначале


aob_ammo:
ammo+03: //у вас происходит смещение на 3 выше от метки "ammo", но самой метки то нет нигде
...

Тогда нужно делать вот так


aob_ammo:
ammo:
ammo+03:
...

Будет работать, но так делать глупо

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.