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

[Need For Speed Underground 2] Autoassembler


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

Приветствую пользователей форума, ковыряю игру из названия темы

 

Скрытый текст

XDmHT

 

 

Под спойлером картинка

Цель изменить значение адреса 0BD2CE88, выделено в рамку помечено как Addr Value

Я пытался сделать Code injection по конкретному адресу, пользователь @ReWanet  поправил меня, и сказал что стоит делать AOBScan, я сделал AOBScan рамка справа, но проблема заключается в том, что если автомобиль стоит на месте, и у адреса значение скорости будет 0, соответственно и сигнатура будет одна, обусловим ее так "C7 78 A6 42", если машина будет стоять, и я активирую скрипт, то в теории все сработает, но что делать если машина поедет, а ведь у адреса сменится значение скорости, а соответственно изменится сигнатура, она станет например  такой

"0A D7 23 3C C8 EB 07", а значит AOBScan не сработает в этом случае, как быть?
Если я не понятно объяснил, то сигнатура AOBScan постоянно меняется по ходу игры, и AOBScan теоретически применить нельзя, либо я не знаю каких то тонкостей с работой AOBScan'a

 

Когда я делал Code Injection @Garik66 поправил меня, указав на то что так делать нельзя в метку newmem: я записал команду mov ebx, #1000,

надеясь что в ebx запишется флоат значение 1000, но как мне сказали, это не так и я задаю вопрос по поводу занесения значений через автоассемблер
1. Как в регистр в автоассемблере записать флоат значение?
2. Что значит решетка перед записываемым числом?
3. Какая разница между #1000 и float(1000)?

 

               

 

 

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

13 минуты назад, CHBS сказал:

1. Как в регистр в автоассемблере записать флоат значение?
2. Что значит решетка перед записываемым числом?
3. Какая разница между #1000 и float(1000)?

1. mov reg, (float)1000, где reg - любой регистр конечно ;) 

2. # число в десятичной системе

3. #1000 = 000003E8 (HEX) float(1000) = 447A0000 (HEX)

13 минуты назад, CHBS сказал:

Под спойлером картинка

Картинки нет.

 

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

26 минут назад, CHBS сказал:

Почему-то не может скомпилировать такую инструкцию

С недосыпа я не там скобки поставил.

mov eax, (float)1000

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

4 минуты назад, Garik66 сказал:

mov eax, (float)1000

Заработало, сам запамятовал правильное приведение в флоат)))

Еще пару вопросов, колеса у меня 4, и нужно записать в 4 адреса это флоат значение, как я могу это сделать одним code injection?

ведь я выполняю инъекцию в определенный адрес, а таких подобных адреса еще 3, но у них есть смещение от первого колеса по (28 + 1A0)

Далее, если я запишу значение в эти 4 адреса, как мне заморозить их на постоянно\на время?

Я делаю буст авто, нужно в эти 4 адреса получается кратковременно подержать флоат 1000 едениц

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

1 минуту назад, Garik66 сказал:

Брат ты не то совсем делаешь.

А можешь написать конкретно что я не так делаю, хотелось бы исправится, и сделать все правильно))

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

1. Добавь нужный адрес в таблицу.

2. ПКМ по адресу "Найти инструкции. записывающие по этому адресу.

3. Из инструкции, которая появиться в новом окне, перейти в дизсамблер.

4. И вот уже здесь писать скрипт.

 

Лучше посмотри любое видео по взлому.Быстрее поймешь. Ну например глянь эту тему. А мне пора спать - завтра в пять опять.

 

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

PS: А ошибка твоя - ты в отладчике перешёл на адрес 0BD2CE88 (а значение в нём конечно динамическое), а тебе нужно перейти на адрес инструкции работающий с адресом 0BD2CE88. 

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

Я же тебе говорил в дискорде про это? ( Или нет? Я не помню :D )

Ты перешел по адресу в окно дизассемблера конечно у тебя будет меняться значение.. Тебе нужна инструкция которая работает с этим адресом и уже с нее делать AOB инъекцию.

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

53 минуты назад, ReWanet сказал:

Я же тебе говорил в дискорде про это?

Да вроде, в данный момент я так и поступил, нашел что туда пишет, делаю инъекцию по инструкциям которые пишут в этот адрес

 

Пробовал так:

newmem:
mov [esi-04], (float)10

originalcode:
fstp dword ptr [esi-04]
jne SPEED2.EXE+1AA550

Ничего не происходит

 

Попробовал вот так:

newmem:
mov [esi-04], (float)10
fstp dword ptr [esi-04]
jne SPEED2.EXE+1AA550

originalcode:
fstp dword ptr [esi-04]
jne SPEED2.EXE+1AA550

Вешается игровая отриосвка, становится 1fps, хотя я сразу после включения скрипта выключаю его, вообщем, он вешается, и с одним фпс приходится рестартать гонку, далее все стабилизируются, и кстати, когда крашится отрисовка, ломаются все значения в ранее найденых указателях, у меня есть подозрение, что я смещаю инструкции, и все соответственно ломается, зато не вылетает, вот что интересно))))))

 

Вот полный код инъекции

Скрытый текст

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

newmem:
mov [esi-04], (float)10
fstp dword ptr [esi-04]
jne SPEED2.EXE+1AA550

originalcode:
fstp dword ptr [esi-04]
jne SPEED2.EXE+1AA550

exit:
jmp returnhere
"SPEED2.EXE"+1AA564:
jmp newmem

returnhere:

 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"SPEED2.EXE"+1AA564:
fstp dword ptr [esi-04]
jne SPEED2.EXE+1AA550
//Alt: db D9 5E FC 75 E7

 

 

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

1 час назад, CHBS сказал:

fstp dword ptr [esi-04]

А в этой инструкции небось - ещо 255 адресов да ? Хочешь записать в 1,а получается пишешь во все 255 адресов, а там уже и анимация отпадает и не предсказуемые момент пошли. 

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

6 часов назад, CHBS сказал:

Ничего не происходит

1. Судя по твоему уровню, тебе придётся некоторое время позадавать вопросы в этом разделе, поэтому сразу привыкай выкладывать скрипты с аобсканом и стандартными СЕ-ными ЛОГАми. (Об этом у меня тоже есть видео). Также, для читабельности, пользуйся тегами спойлера и кода . (Об этом у меня тоже есть видео). 

2. Ничего не происходит потому что у тебя:  

Стандартнаяошибка в скриптах Cheat Engine всех новичков

Нужно так:

newmem:


originalcode:
fstp dword ptr [esi-04]
mov [esi-04], (float)10       // или можно и по другому
jne SPEED2.EXE+1AA550

3. Фильтр: Скорее всего инструкция, которую ты выбрал, работает не только с 4 колесами твоей машины, но и с колесами противников, т.е. нужно отфильтровывать свою машину от машин соперников. В таких играх обычно это не сложно (ID участников гонок лежат на поверхности в регистрах (в структуре).

Об фильтрах у меня практически в каждом видео есть упоминание (по-моему в сумме 6 или 7 способ написания фильтра рассмотрено). Почему в каждом видео - при взломе современных игр 90 % твоих скриптов будут выглядеть так:

cmp ..............// сравнение
je................// (jne, ja,jb) условный переход (прыжок)
mov...............// запись нужного значения в адрес (регистр) 

Видео находятся в этом рахделе.

Удачи во взломе!!!

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

23 часа назад, LIRW сказал:

А в этой инструкции небось - ещо 255 адресов да

Скорее всего так и есть, или

 

В 18.11.2017 в 01:19, CHBS сказал:

у меня есть подозрение, что я смещаю инструкции, и все соответственно ломается, зато не вылетает, вот что интересно))))))

Такой вариант может быть?

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

18 часов назад, Garik66 сказал:

Стандартнаяошибка в скриптах Cheat Engine всех новичков

Посмотрел видео, спасибо, решился вопрос все таки, как лучше написать скрипт, но по факту я писал изначально правильно, по второму варианту

т.е если в оригинальной инструкции будет такое -

mov [ecx+04], ebx

То очевидно что лучше записать в регистр ebx, потому что следующая инструкция возьмет из этого регистра данные, поэтому собственно с записью я сделал все верно

18 часов назад, Garik66 сказал:

3. Фильтр:

Да, все верно, потому что я зашел в обычную кольцевую гонку, и на мое удивление мои соперники тоже притягивались к дороге, я написал скрипт правильно еще вчера, просто почему то машину не тянуло вперед, а ее тянуло вниз, будто я бустил не координату X/Y а бустил координату Z по вектору

 

18 часов назад, Garik66 сказал:

поверхности в регистрах (в структуре).

Ну мне на самом деле проблематично выйти на эту структуру

 

18 часов назад, Garik66 сказал:

Удачи во взломе!!!

Спасибо, сейчас буду пробовать, если что напишу результат))

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

18 часов назад, Garik66 сказал:

fstp dword ptr [esi-04]
mov [esi-04], (float)10 // или можно и по дру

 

Еще вопрос такой

fstp dword ptr [esi-04]
// float store обращается через dword ptr
// нужно ли делать тоже самое в измененении значения, т.е
mov dword ptr [esi-04], (float)1000
// т.е в каких случаях нужно указывать dword ptr в mov, просто в fstp он указан, а в mov нет

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

Но опытным путем выяснилось то что если написать

mov dword ptr [esi-04], (float)1000
//будет краш из-за dword ptr
mov [esi-04], (float)1000 
// полет нормальный

 

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

Только что, krocki сказал:

dword ptr можно не писать

Получается если напишу при использовании флоата, хуже я не сделаю, тогда почему происходит краш?

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

1 час назад, CHBS сказал:

но по факту я писал изначально правильно, по второму варианту

По какому? из этого сообщения? Если да, то оба варианта в посту не верны.

1 час назад, CHBS сказал:

Но опытным путем выяснилось то что если написать


mov dword ptr [esi-04], (float)1000
//будет краш из-за dword ptr
mov [esi-04], (float)1000 
// полет нормальный

Оба варианта записи абсолютно одинаковы.

В СЕ по умолчанию в [address] - 4 байта ( поэтому я предпочитаю писать без дворд), float значение тоже 4 байта, так что оба варианта верны.

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

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

2 минуты назад, Garik66 сказал:

По какому? из этого сообщения?

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

 

3 минуты назад, Garik66 сказал:

сказать не могу.

Понял, спасибо, наверное просто мне таким образом повезло)

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

1 минуту назад, CHBS сказал:

просто мне таким образом повезло)

Скорее всего инструкция работает не только с колесами машин, но и с чем то ещё это уже нужно смотреть в игре при написании фильтра и вот в это что-то ещё :rolleyes: писать (f;oat)1000 нельзя.

 

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

3 минуты назад, krocki сказал:

А она точно только с одним адресом робит

Так черт его дери в том то и дело, что она работает с колесами, противника 3+Я(4), колеса 4, 1 колесо = 1 адресс с значением, 4*4=16, 16 адресов с которыми она работает это точно, но я не могу написать фильтр, точнее пока не пойму как мне найти свою машину потому что в первые 8 адресов при бряке на запись, там идут машины противников, и хлам адреса, но колеса моей машины находятся после 8-и этих адресов, и я вот не знаю как мне посмотреть с какими адрессами она работает конкретно моей машины, вот как обойти ограничение в 8 адресов?

 

Картинка с адресами

Скрытый текст

9ZiMX

 

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

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

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

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