RockHammer Опубликовано 24 октября, 2014 Поделиться Опубликовано 24 октября, 2014 Всем привет! Ломаю недавно вышедшую игрушку - 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 значение? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 октября, 2014 Поделиться Опубликовано 24 октября, 2014 Странный какой-то АА скрипт, если честно...Попробуй так:[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) Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 24 октября, 2014 Автор Поделиться Опубликовано 24 октября, 2014 Странный какой-то АА скрипт, если честно...Попробуй так:[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) на первое место помогло, но в игре не работает... Может есть идеи как превратить это в рабочий код? Я просто слабо знаком с ассемблерными инструкциями и их практическим применением. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 октября, 2014 Поделиться Опубликовано 24 октября, 2014 Спасибо) как выяснилось - переставление (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 у меня недавно был затык, проблему решил способом, предложенным в первом пункте, т.к. так и не смог победить этого зверя.Может кто на форуме более прошаренный в асме подскажет... Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 24 октября, 2014 Поделиться Опубликовано 24 октября, 2014 Попробуй так, код писал так без игры.[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) Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 24 октября, 2014 Поделиться Опубликовано 24 октября, 2014 Это что-то новое! Какой то новый регистр rbx, я такое в первые вижу, и он чё реально работает? Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 24 октября, 2014 Автор Поделиться Опубликовано 24 октября, 2014 Это что-то новое! Какой то новый регистр rbx, я такое в первые вижу, и он чё реально работает? Сам регистр? А от чего же ему не работать... Если он и присутствует в процессе - то выполняет какую-либо функцию) Или ты про что-то конкретное? Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 Это что-то новое! Какой то новый регистр rbx, я такое в первые вижу, и он чё реально работает? Если буковка r значит он 64-битный. rax, rbx и т.д. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 25 октября, 2014 Автор Поделиться Опубликовано 25 октября, 2014 Если буковка r значит он 64-битный. rax, rbx и т.д.У меня Win7x64 Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 У меня Win7x64 Использование регистров зависит от того под какую версию написана программа. Есть ведь 32 и 64 битные приложения. Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 [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 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 25 октября, 2014 Автор Поделиться Опубликовано 25 октября, 2014 А саму инструкцию проверял? Попробуй сначала так:[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)Работает, но до перезагрузки Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 Попробуйте воспользоваться AOB сканом при создании скрипта. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 25 октября, 2014 Автор Поделиться Опубликовано 25 октября, 2014 (изменено) Попробуйте воспользоваться 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)Не посоветуешь, как лучше ее "укротить" ?) Изменено 25 октября, 2014 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 Оказывается инструкция мертвая была. Переписал на новую, работает)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)100cmp qword ptr [rdx+00000088],00 или mov [rbx+50],64cmp qword ptr [rdx+00000088],00 все зависит от типа данных Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 25 октября, 2014 Автор Поделиться Опубликовано 25 октября, 2014 Ну тут проще вместо ecx пиши свое значение(смотря какой тип данных обрабатывает эта инструкция)mov [rbx+50],(float)100cmp qword ptr [rdx+00000088],00 или mov [rbx+50],64cmp qword ptr [rdx+00000088],00 все зависит от типа данных4 байта. В том то и дело... Я даже не знаю что в скобках писать, если такой тип данных. (4byte) почему-то не катит...все зависит от типа данных Не работаетmov [rbx+50],64cmp qword ptr [rdx+00000088],00 Я прописал свое значение - 15, но оно не действует... Пробовал add [rbx+50],2 но даже оно не катит. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 4 байта. В том то и дело... Я даже не знаю что в скобках писать, если такой тип данных. (4byte) почему-то не катит...Как вариант - можно написать число в HEX (шестнадцатеричной) системе счисления, например:mov [eax+10],63 //в DEC (десятичная) = 99Или в DEC:mov [eax+10],#99 //в HEX = 63Но lamalamaz правильно сказал, все зависит от типа данных. Можно вписать целое число, а в игре оно используется как тип Float, допустим. И дробная часть используется для каких-то дополнительных операций, отсюда и частые "баги", с "убегающими" полосками, или не отображаемыми числами. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 25 октября, 2014 Автор Поделиться Опубликовано 25 октября, 2014 Как вариант - можно написать число в 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 Написано что с хоткеями проблема. И в Features used зачем галочку ставить на veh debugger?Покажи скрин со сборкой и хоткеями Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 Использование регистров зависит от того под какую версию написана программа. Есть ведь 32 и 64 битные приложения. А ну теперь понятно! А то у меня винда 32 битная стоит. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 25 октября, 2014 Автор Поделиться Опубликовано 25 октября, 2014 Написано что с хоткеями проблема. И в Features used зачем галочку ставить на veh debugger?Покажи скрин со сборкой и хоткеями veh debuger необходим для корректной работы чита, ибо обычный windows отладчик уже не тянет) Собственно, проект собрал) Помогло снятие галочки "вызов трейнера по клавише" 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 Выложил бы трейнер в раздел трейнеры,собственные поделки тут поощряются Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 26 октября, 2014 Автор Поделиться Опубликовано 26 октября, 2014 Выложил бы трейнер в раздел трейнеры,собственные поделки тут поощряютсяВ раздел трейнеры я не могу выложить, потому что там только Trayner Maker может выкладывать темы.Однако, создал во флудильне) Может кому нужно, вот - Трейнер на Shadow of Mordor + 3Смотрите, оценивайте, тестируйте Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения