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

Shadow Of Mordor: Инъекция Се


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

Всем привет!

 

Ломаю недавно вышедшую игрушку - Shadow of Mordor. Нашел концентрацию (без прокачки - 100 float, 0 когда концентрации нет)

Сначала нашел указатели к значению, но они в один прекрасный момент, таинственным образом перестали работать. Просто взяли и перестали работать. (где значение стали вопросительные знаки???)

Потом решил сделать убийство (nop), получилось. Хотел модифицировать код до инъекции. 

Вот такой скрипт получился:

[ENABLE]alloc(newmem,2048,"ShadowOfMordor.exe"+CC1FBC) label(returnhere)label(originalcode)label(exit)newmem:mov [rbx+54],200(float)originalcode:movss [rbx+54],xmm7exit:jmp returnhere"ShadowOfMordor.exe"+CC1FBC:jmp newmemreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC1FBC:movss [rbx+54],xmm7dealloc(newmem)

и почему-то не компилируется... Проблема в 10 строке (мой код, не удивительно :) )

Кто знает, как обойти проблему? Или как лучше записать, что это значение в типе данных - float?

Либо как сделать так, чтобы было всегда 200 значение?

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

Странный какой-то АА скрипт, если честно...

Попробуй так:

[ENABLE]alloc(newmem,2048)label(returnhere)newmem:mov [rbx+54],(float)200jmp returnhere"ShadowOfMordor.exe"+CC1FBC:jmp newmemreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC1FBC:movss [rbx+54],xmm7dealloc(newmem)
Ссылка на комментарий
Поделиться на другие сайты

Странный какой-то АА скрипт, если честно...

Попробуй так:

[ENABLE]alloc(newmem,2048)label(returnhere)newmem:mov [rbx+54],(float)200jmp returnhere"ShadowOfMordor.exe"+CC1FBC:jmp newmemreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC1FBC:movss [rbx+54],xmm7dealloc(newmem)

Спасибо) как выяснилось - переставление (float) на первое место помогло, но в игре не работает... Может есть идеи как превратить это в рабочий код? Я просто слабо знаком с ассемблерными инструкциями и их практическим применением.

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

Спасибо) как выяснилось - переставление (float) на первое место помогло, но в игре не работает... Может есть идеи как превратить это в рабочий код? Я просто слабо знаком с ассемблерными инструкциями и их практическим применением.

А саму инструкцию проверял? Попробуй сначала так:

[ENABLE]alloc(newmem,2048)label(returnhere)newmem:sub [rbx+54],0jmp returnhere"ShadowOfMordor.exe"+CC1FBC:jmp newmemreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC1FBC:movss [rbx+54],xmm7dealloc(newmem)
И проверь, будет отниматься, или нет (разумеется, не за одно применение, а несколько раз выполни какое-то действие, чтобы точно было ясно, рабочая-ли эта инструкция).

Но вообще, все проблемы могут быть как-раз из-за работы со специфичными регистрами xmm#.

Варианты решения:

1. Выполнить пошаговую отладку, и попробовать выйти на другую инструкцию, работающую с нужной характеристикой в игре.

2. Читать про работу с числами с плавающей точкой, и такими регистрами, как xmm#

Конкретно с movss и регистром xmm1 у меня недавно был затык, проблему решил способом, предложенным в первом пункте, т.к. так и не смог победить этого зверя.

Может кто на форуме более прошаренный в асме подскажет...

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

Попробуй так, код писал так без игры.

[ENABLE]alloc(newmem,2048,"ShadowOfMordor.exe"+CC1FBC)label(returnhere)label(originalcode)label(exit)label(roxana)newmem:mov [roxana],(float)200movss xmm7,(rohana)originalcode:movss [rbx+54],xmm7exit:jmp returnhererohana:dd 0"ShadowOfMordor.exe"+CC1FBC:jmp newmemreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC1FBC:movss [rbx+54],xmm7dealloc(newmem)
Ссылка на комментарий
Поделиться на другие сайты

Это что-то новое! Какой то новый регистр rbx, я такое в первые вижу, и он чё реально работает?  O-=

Сам регистр? А от чего же ему не работать... Если он и присутствует в процессе - то выполняет какую-либо функцию) Или ты про что-то конкретное?

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

[ENABLE]

alloc(newmem,2048,"ShadowOfMordor.exe"+CC1FBC)

label(returnhere)

label(life)

label(exit)

newmem:

movss xmm7,[life]

movss [rbx+54],xmm7

exit:

jmp returnhere

life:

dd (float)200

"ShadowOfMordor.exe"+CC1FBC:

jmp newmem

returnhere:

[DISABLE]

"ShadowOfMordor.exe"+CC1FBC:

movss [rbx+54],xmm7

dealloc(newmem)

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

А саму инструкцию проверял? Попробуй сначала так:

[ENABLE]alloc(newmem,2048)label(returnhere)newmem:sub [rbx+54],0jmp returnhere"ShadowOfMordor.exe"+CC1FBC:jmp newmemreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC1FBC:movss [rbx+54],xmm7dealloc(newmem)
И проверь, будет отниматься, или нет (разумеется, не за одно применение, а несколько раз выполни какое-то действие, чтобы точно было ясно, рабочая-ли эта инструкция).

Но вообще, все проблемы могут быть как-раз из-за работы со специфичными регистрами xmm#.

Варианты решения:

1. Выполнить пошаговую отладку, и попробовать выйти на другую инструкцию, работающую с нужной характеристикой в игре.

2. Читать про работу с числами с плавающей точкой, и такими регистрами, как xmm#

Конкретно с movss и регистром xmm1 у меня недавно был затык, проблему решил способом, предложенным в первом пункте, т.к. так и не смог победить этого зверя.

Может кто на форуме более прошаренный в асме подскажет...

 

Я вот еще что выяснил: оказывается эта инструкция, отвечающая за концентрацию - работает еще и силой натяжения лука! 

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

В нормальном состоянии - натянул стрелу и стреляй, а после убийства этот процесс натяжения стрелы циклится. Как только стрела приходит в натянутое положение - вновь делается НЕнатянутой и так по кругу. Странно...

[ENABLE]alloc(newmem,2048,"ShadowOfMordor.exe"+CC1FBC) label(returnhere)label(life)label(exit)newmem:movss xmm7,[life]movss [rbx+54],xmm7exit:jmp returnherelife:dd (float)200"ShadowOfMordor.exe"+CC1FBC:jmp newmemreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC1FBC:movss [rbx+54],xmm7dealloc(newmem)

Работает, но до перезагрузки

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

Попробуйте воспользоваться AOB сканом при создании скрипта.

 

Оказывается инструкция мертвая была. Переписал на новую, работает)

AOBScan - идея неплохая... Но слабо оптимизированная, ибо писать буду в том же СЕ :(

Вот еще одна непослушная инструкция ))

[ENABLE]alloc(newmem,2048,"ShadowOfMordor.exe"+CC19E4) label(returnhere)label(originalcode)label(exit)newmem:originalcode:mov [rbx+50],ecxcmp qword ptr [rdx+00000088],00exit:jmp returnhere"ShadowOfMordor.exe"+CC19E4:jmp newmemnopnopnopnopnopnopreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC19E4:mov [rbx+50],ecxcmp qword ptr [rdx+00000088],00dealloc(newmem)

Не посоветуешь, как лучше ее "укротить" ?)

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

Оказывается инструкция мертвая была. Переписал на новую, работает)

AOBScan - идея неплохая... Но слабо оптимизированная, ибо писать буду в том же СЕ :(

Вот еще одна непослушная инструкция ))

[ENABLE]alloc(newmem,2048,"ShadowOfMordor.exe"+CC19E4) label(returnhere)label(originalcode)label(exit)newmem:originalcode:mov [rbx+50],ecxcmp qword ptr [rdx+00000088],00exit:jmp returnhere"ShadowOfMordor.exe"+CC19E4:jmp newmemnopnopnopnopnopnopreturnhere:[DISABLE]"ShadowOfMordor.exe"+CC19E4:mov [rbx+50],ecxcmp qword ptr [rdx+00000088],00dealloc(newmem)

Не посоветуешь, как лучше ее "укротить" ?)

Ну тут проще вместо ecx пиши свое значение(смотря какой тип данных обрабатывает эта инструкция)

mov [rbx+50],(float)100

cmp qword ptr [rdx+00000088],00

 

или

 

mov [rbx+50],64

cmp qword ptr [rdx+00000088],00

 

все зависит от типа данных

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

Ну тут проще вместо ecx пиши свое значение(смотря какой тип данных обрабатывает эта инструкция)

mov [rbx+50],(float)100

cmp qword ptr [rdx+00000088],00

 

или

 

mov [rbx+50],64

cmp qword ptr [rdx+00000088],00

 

все зависит от типа данных

4 байта. В том то и дело... Я даже не знаю что в скобках писать, если такой тип данных. (4byte) почему-то не катит...

все зависит от типа данных

 

Не работает

mov [rbx+50],64

cmp qword ptr [rdx+00000088],00

 

Я прописал свое значение - 15, но оно не действует... Пробовал add [rbx+50],2  но даже оно не катит. 

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

4 байта. В том то и дело... Я даже не знаю что в скобках писать, если такой тип данных. (4byte) почему-то не катит...

Как вариант - можно написать число в HEX (шестнадцатеричной) системе счисления, например:

mov [eax+10],63 //в DEC (десятичная) = 99
Или в DEC:

mov [eax+10],#99 //в HEX = 63
Но lamalamaz правильно сказал, все зависит от типа данных. Можно вписать целое число, а в игре оно используется как тип Float, допустим. И дробная часть используется для каких-то дополнительных операций, отсюда и частые "баги", с "убегающими" полосками, или не отображаемыми числами.
Ссылка на комментарий
Поделиться на другие сайты

Как вариант - можно написать число в HEX (шестнадцатеричной) системе счисления, например:

mov [eax+10],63 //в DEC (десятичная) = 99
Или в DEC:

mov [eax+10],#99 //в HEX = 63
Но lamalamaz правильно сказал, все зависит от типа данных. Можно вписать целое число, а в игре оно используется как тип Float, допустим. И дробная часть используется для каких-то дополнительных операций, отсюда и частые "баги", с "убегающими" полосками, или не отображаемыми числами.

 

 

Проблему решил. Нужно было писать не в смещение, а в регистр (который после запятой в конце)

Однако я же победитель по жизни! Поэтому при компилировании трейнера в СЕ - вот такая штука происходит:

 

http://img-fotki.yandex.ru/get/5507/158357326.0/0_11bbef_5629635a_orig

 

При вот таких настройках:

http://img-fotki.yandex.ru/get/5411/158357326.0/0_11bbf0_5ac50faf_orig

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

Использование регистров зависит от того под какую версию написана программа. Есть ведь 32 и 64 битные приложения.

 

А ну теперь понятно! А то у меня винда 32 битная стоит.  ^_^

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

Написано что с хоткеями проблема. И в Features used зачем галочку ставить на veh debugger?

Покажи скрин со сборкой и хоткеями :)

veh debuger необходим для корректной работы чита, ибо обычный windows отладчик уже не тянет) 

Собственно, проект собрал) Помогло снятие галочки "вызов трейнера по клавише"

6747211.png

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

Выложил бы трейнер в раздел трейнеры,собственные поделки тут поощряются

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

Однако, создал во флудильне) 

Может кому нужно, вот - Трейнер на Shadow of Mordor + 3

Смотрите, оценивайте, тестируйте ^_^

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

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

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

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