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

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

Всем привет!
 
Продолжаю взлом FC4. И т.к. на одной и той же версии игры может быть несколько разных таблеток - решил сделать свой трейнер более универсальным.
А именно - припилить AOBScan. 
Все шло хорошо, перебил на новый лад: огенестрел, очки навыков, деньги... 
Но с особенными патронами случилась какая-то беда.
Вот код:

Но почему-то он не работает.
Кстати, для сравнения - вот код, который работает через простую инъекцию:

И он прекрасно работает.
Вот то, что стоит между нашей инструкцией из мемори вьювера:

fUxoddmcptA.jpg
 
Так в чем же проблема?

[ENABLE]alloc(newmem,2048,FC64.dll+B87009) label(returnhere)label(ammo)  //создаем метку ammoregistersymbol(ammo) aobscan(aob_ammo, 89 03 48 8B 5C 24 30 C6 47 39 01) //создаем функцию aobscan с нашим адресом и байтамиnewmem:mov [rbx],eaxmov [rbx],10 //записываю в регистр rbx значение 10.mov rbx,[rsp+30]//mov [rbx],eax  --- оригинальный код, который присутствовал в метке Originalcode//mov rbx,[rsp+30] --- origcodeaob_ammo:ammo:jmp newmemnopreturnhere:[DISABLE]dealloc(newmem)unregistersymbol(ammo) //уничтожаем метку ammoammo:mov [rbx],eax // возвращаем оригинальный кодmov rbx,[rsp+30]//Alt: db 89 03 48 8B 5C 24 30
[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048,"FC64.dll"+B87009) label(returnhere)label(originalcode)label(exit)newmem:originalcode:mov [rbx],eaxmov [rbx],10mov rbx,[rsp+30]exit:jmp returnhere"FC64.dll"+B87009:jmp newmemnopnopreturnhere:[DISABLE]"FC64.dll"+B87009:mov [rbx],eaxmov rbx,[rsp+30]dealloc(newmem)
Изменено пользователем RockHamer
Ссылка на комментарий
Поделиться на другие сайты

Вот попробуй, этот скрипт. у меня версия Far cry 4 1.4

 

alloc(newmem,2048,FC64.dll+B87009)  ////////dll+B8D179label(returnhere)label(ammo)registersymbol(ammo)aobscan(aob_ammo, 89 03 48 8B 5C 24 30 C6)newmem:mov [rbx],#99mov rbx,[rsp+30]aob_ammo:ammo:jmp newmemnopnopreturnhere:[DISABLE]ammo:mov [rbx],eaxmov rbx,[rsp+30]dealloc(newmem)unregistersymbol(ammo)
 

Рабочий на сто процентов Far Cry 4 v1.4

//Используй тег [co de] (без пробела)

//NullAlex

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

Вот попробуй, этот скрипт. у меня версия Far cry 4 1.4

alloc(newmem,2048,FC64.dll+B87009)  ////////dll+B8D179label(returnhere)label(ammo)registersymbol(ammo)aobscan(aob_ammo, 89 03 48 8B 5C 24 30 C6)newmem:mov [rbx],#99mov rbx,[rsp+30]aob_ammo:ammo:jmp newmemnopnopreturnhere:[DISABLE]ammo:mov [rbx],eaxmov rbx,[rsp+30]dealloc(newmem)unregistersymbol(ammo)
Рабочий на сто процентов Far Cry 4 v1.4
 

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

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

Ты с начало попробуй, а потом говори.


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

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

Ты с начало попробуй, а потом говори.

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

 

Я, кстати, так и не понял зачем нужны эти нупы. 

Кто объяснит?

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

Для балансировки длины инструкции.

Была инструкция, допустим, 7 байтов длиной, а ты прыжком ее забил.

Стала инструкция 5 байт длиной, и образовались два лишних байта.

А процессор выполняет инструкции последовательно.

И тут ему два каких-то непонятных байта суют.

Вот и вылет. А если вместо эти двух лишних байт поставить nop (No operation),

процессор их выполнит ничего не делая (но оперейшн - нет операции)

и дальше пошпарит по порядку как надо.

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

Для балансировки длины инструкции.

Была инструкция, допустим, 7 байтов длиной, а ты прыжком ее забил.

Стала инструкция 5 байт длиной, и образовались два лишних байта.

А процессор выполняет инструкции последовательно.

И тут ему два каких-то непонятных байта суют.

Вот и вылет. А если вместо эти двух лишних байт поставить nop (No operation),

процессор их выполнит ничего не делая (но оперейшн - нет операции)

и дальше пошпарит по порядку как надо.

 

Получается... Как вычислить, сколько байтов будет в твоей инструкции уже после инжекта? Ну чтобы определить, сколько нупов нужно.

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

Привет, помагите, хочу высокую скорость ходьбы сделать, и высокий прыжок сделать, в FAR CRY 4 а не могу найти значение скорости ходьбы, и прыжка игрока,

пробовал подцепить отладчик olly 1.10 и 2.01 но, они выдают ошибку.

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

Получается... Как вычислить, сколько байтов будет в твоей инструкции уже после инжекта? Ну чтобы определить, сколько нупов нужно.

Прыжок на кодкейв (инжект) всегда составляет 5 байт (в общих случаях, частности не рассматриваю сейчас).

Обычно СЕ автоматически высчитывает длину инструкции и количество нопов для балансировки. Но если делаешь вручную - сначала подсчитай байты инструкции, которую ты будешь затирать прыжком на кодкейв (инжект).

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

Прыжок на кодкейв (инжект) всегда составляет 5 байт (в общих случаях, частности не рассматриваю сейчас).

Обычно СЕ автоматически высчитывает длину инструкции и количество нопов для балансировки. Но если делаешь вручную - сначала подсчитай байты инструкции, которую ты будешь затирать прыжком на кодкейв (инжект).

 

Т.е. если в оригинале, допустим, 3 байта - то как тогда быть? Один нуп оставлять?

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

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

Логика такая. Прыжок всегда занимает 5 байт. Из длины инструкции вычитаешь 5 байт и получаешь количество нопов (не нУпов), которые нужно проставить

Допустим, инструкция 8 байт, от 8 отнимаешь 5 - получаешь 3 нопа. Если инструкция 10 байт - отнимаешь 5, получаешь 5 нопов.

Если инструкция меньше 5 байт, нужно взять две инструкции (одну ту, что нужно, вторую - следующую), или три инструкции. В общем, столько инструкций, сколько их составит не меньше пяти байт.

То есть, если идут две инструкции по 3 байта, то их берешь две, и один ноп: (3 + 3) - 5 = 1

Может быть и такой случай, когда понадобится три инструкции. Например (3 + 1 + 1) - 5 = 0 (одна трехбайтная и две однобайтные инструкции, например)

В общем, суть, думаю, ты понял.

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

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

Логика такая. Прыжок всегда занимает 5 байт. Из длины инструкции вычитаешь 5 байт и получаешь количество нопов (не нУпов), которые нужно проставить

Допустим, инструкция 8 байт, от 8 отнимаешь 5 - получаешь 3 нопа. Если инструкция 10 байт - отнимаешь 5, получаешь 5 нопов.

Если инструкция меньше 5 байт, нужно взять две инструкции (одну ту, что нужно, вторую - следующую), или три инструкции. В общем, столько инструкций, сколько их составит не меньше пяти байт.

То есть, если идут две инструкции по 3 байта, то их берешь две, и один ноп: (3 + 3) - 5 = 1

Может быть и такой случай, когда понадобится три инструкции. Например (3 + 1 + 1) - 5 = 0 (одна трехбайтная и две однобайтные инструкции, например)

В общем, суть, думаю, ты понял.

Суть я понял, но в начале инжекта есть выделение памяти, вот такое:

alloc(newmem,2048,"FC64.dll"+D2F99C) 

Ну и вот пример:

notepad.exe+354D - 48 8B D8              - mov rbx,raxnotepad.exe+3550 - 66 8B 00              - mov ax,[rax]

Получается, я говорю АА, что работаю с notepad.exe+354D   и перепиливаю его инструкцию под себя и дальше, в newmem указываю mov ax,[rax]  , т.е. следующую инструкцию...

А ничего, что эта следующая инструкция будет дальше по списку? Мы же с ней не работали... Т.е. игра не вылетит?

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

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

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

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

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

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