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

При инъекции АА-скрипта падает игра


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

Я так никогда не делал, вообще не в курсе как делать фильтр через поинтеры, а найти адреса то которые получают доступ к инструкции это не проблема. Мне нужен именно фильтр. В структуре всех жизней как союзников так и врагов нет ни одного фильтра, через регистры искать фильтр тоже как иголку в стогу сена. Если объяснишь подробнее как делать такой фильтр через поинтеры буду очень благодарен.

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

  • Ответов 71
  • Создана
  • Последний ответ

Топ авторов темы

Я писал выше. Фильтр не делал, так как там в мегаструктуре мира копаться надо (сами структурки игроков размером 0x1C всего). Я просто нашел инструкцию, которая работает только с игроком. Союзники тоже смертны вроде, особо в игру не играл ) 

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

Я писал выше. Фильтр не делал, так как там в мегаструктуре мира копаться надо (сами структурки игроков размером 0x1C всего). Я просто нашел инструкцию, которая работает только с игроком. Союзники тоже смертны вроде, особо в игру не играл ) 

Ясно)) Я то взламывал ещё и союзников, а там в структуре нет не хрена фильтров, спрошные структуры НПС))) Причём не большие как и ты сказал. А здоровье самого персонажа я и не имел в виду сейчас))

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

Я так никогда не делал, вообще не в курсе как делать фильтр через поинтеры, а найти адреса то которые получают доступ к инструкции это не проблема. Мне нужен именно фильтр. В структуре всех жизней как союзников так и врагов нет ни одного фильтра, через регистры искать фильтр тоже как иголку в стогу сена. Если объяснишь подробнее как делать такой фильтр через поинтеры буду очень благодарен.

 

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

Скрипт на здоровье для выживших, только что сделал.

 

 

1. Начинаем игру, доходим до двух выживших. Тетка и парень.

2. Ищем свое здоровье

3. Ставим брекпоинт на него

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

5. Находим инструкции, которые работают только с выжившими

6. Пишем скрипт выше и тестим.

 

Он работает как с персонажами, которые бегают за главным персонажем, так и для тех, кто стоит и ждет помощи. Но я особо не тестил, так что не знаю как там дальше.

{ Game   : deadrising3.exe  Version:   Date   : 2015-07-15  Author : MasterGH  This script Здоровье для выживших}[ENABLE] aobscanmodule(INJECT,deadrising3.exe,66 41 0F 6E 71 10 * * * * 41) // should be uniquealloc(newmem,$1000,"deadrising3.exe"+2CAE0B)label(code)label(return)newmem:code:  movd xmm6, [r9+14]  movd [r9+10],xmm6  jmp returnINJECT:  jmp code  nopreturn:registersymbol(INJECT)[DISABLE]//code from here till the end of the code will be used to disable the cheatINJECT:  db 66 41 0F 6E 71 10unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: "deadrising3.exe"+2CAE0B"deadrising3.exe"+2CADE1: 48 8B 88 B0 00 00 00     -  mov rcx,[rax+000000B0]"deadrising3.exe"+2CADE8: 8B 41 10                 -  mov eax,[rcx+10]"deadrising3.exe"+2CADEB: 85 C0                    -  test eax,eax"deadrising3.exe"+2CADED: 48 0F 4E 0D 23 22 3A 01  -  cmovle rcx,[deadrising3.exe+166D018]"deadrising3.exe"+2CADF5: 8B 41 10                 -  mov eax,[rcx+10]"deadrising3.exe"+2CADF8: 85 C0                    -  test eax,eax"deadrising3.exe"+2CADFA: 48 0F 4E 0D 16 22 3A 01  -  cmovle rcx,[deadrising3.exe+166D018]"deadrising3.exe"+2CAE02: 4C 8B 49 08              -  mov r9,[rcx+08]"deadrising3.exe"+2CAE06: 4D 85 C9                 -  test r9,r9"deadrising3.exe"+2CAE09: 74 46                    -  je deadrising3.exe+2CAE51// ---------- INJECTING HERE ----------"deadrising3.exe"+2CAE0B: 66 41 0F 6E 71 10        -  movd xmm6,[r9+10]// ---------- DONE INJECTING  ----------"deadrising3.exe"+2CAE11: 66 41 0F 6E 41 14        -  movd xmm0,[r9+14]"deadrising3.exe"+2CAE17: 49 8B 44 24 28           -  mov rax,[r12+28]"deadrising3.exe"+2CAE1C: 41 8B 71 14              -  mov esi,[r9+14]"deadrising3.exe"+2CAE20: 0F 5B F6                 -  cvtdq2ps xmm6,xmm6"deadrising3.exe"+2CAE23: 0F 5B C0                 -  cvtdq2ps xmm0,xmm0"deadrising3.exe"+2CAE26: F3 0F 5E F0              -  divss xmm6,xmm0"deadrising3.exe"+2CAE2A: 66 0F 6E 40 20           -  movd xmm0,[rax+20]"deadrising3.exe"+2CAE2F: 0F 5B C0                 -  cvtdq2ps xmm0,xmm0"deadrising3.exe"+2CAE32: F3 0F 59 35 BA 6C 03 01  -  mulss xmm6,[deadrising3.exe+1301AF4]"deadrising3.exe"+2CAE3A: F3 0F 59 F0              -  mulss xmm6,xmm0}
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

аааа ну теперь понятно что ты имеешь в виду, только я вот думаю что не найдётся инструкция работающая только с союзниками. Хотя попробую поискать. Спасибо за скрипт, точнее за способ его реализации)) Потому что скрипт то я уже давно написал только через push, а не так как ты)) Теперь буду знать что с инструкциями такого рода можно работать и так, без пуша.

NullAlex: Полностью цитировать большое сообщение - совсем необязательно.

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

Если ты сделаешь push [r9+14] и pop [r9+10], то будет фигня, т.к. в стек полетит 8 байт, а не 4. Вылет из игры обеспечен. Так что не знаю, как там сумел  пропушить

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

Если ты сделаешь push [r9+14] и pop [r9+10], то будет фигня, т.к. в стек полетит 8 байт, а не 4. Вылет из игры обеспечен. Так что не знаю, как там сумел  пропушить

Я имею в виду такой пуш:

push ebx

mov ebx,[r9+14]

mov [r9+10],ebx

pop ebx.

Теперь понял о чём я?))) А у тебя по другому сделано, так как я бы и не подумал делать)))

NullAlex, ок учту)))

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

Если ты напишешь push ebx, то это будет ассемблироваться CE как push rbx и тоже самое pop ebx будет ассемблироваться как pop rbx

push rbxmov ebx,[r9+14]mov [r9+10],ebxpop rbx

Интересно, я тоже об этом мало что понимал, почему так можно делать, теперь знаю, спасибо что объяснил.

К стате говоря, как думаешь, Мастер, куда лучше все мои скрипты выложить наработанные по этой игре сюда (в эту тему) или в спец раздел? А может даже соберусь и трейнер сделать. А то в инете все трейнеры какие то "не полные", в одном есть функция(и) нужная, а в другом нет.

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

К стате говоря, как думаешь, Мастер, куда лучше все мои скрипты выложить наработанные по этой игре сюда (в эту тему) или в спец раздел?

 

Я не могу тебе тут помочь. Это вопрос к модератору или администраторам

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

куда лучше все мои скрипты выложить наработанные по этой игре сюда (в эту тему) или в спец раздел?

Korol2010, лучше в спец. раздел, если скрипты - то в скрипты, если трейнер - то в трейнер, если таблица - то в таблицы.

А залить файл на форум попроси модераторов или NullAlex, они помогут. 

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

Ясно, спасибо за инфу, только вот я вроде ещё на сайт заливать не имею доступа(( Там нужна вроде репа от 10 и выше что бы был доступ к заливке на сайт.

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

offtopic.gif

Возможность прикреплять файлы к сообщениям, а также заливать их в "Файлы" - имеет группа Разработчиков, и выше.

offtopic.gif

Тогда тем более долго мне ещё придётся Яндекс диском пользоваться :-D

Вот к стате мои наработки по игре, по мере прохождения и надобности (выложу сюда и отдельно в спец раздел):

P.S.: Надеюсь что при копировании скриптов не ошибся)))

[ENABLE]aobscanmodule(Healt,deadrising3.exe,87 00 00 00 66 0F 6E 48 10)alloc(newmem,100,"deadrising3.exe"+1912DD)label(return)newmem:movd xmm1,[rax+14]movd [rax+10],xmm1jmp returnHealt+04:  jmp newmemreturn:registersymbol(Healt)[DISABLE]Healt+04:  db 66 0F 6E 48 10unregistersymbol(Healt)dealloc(newmem) 
[ENABLE]aobscanmodule(healtoponents,deadrising3.exe,66 41 0F 6E 71 10 * * * * 41) // should be uniquealloc(newmem,100,"deadrising3.exe"+2CBBAB)label(return)newmem:movd xmm6,[r9+14]movd [r9+10],xmm6jmp returnhealtoponents:jmp newmemnopreturn:registersymbol(healtoponents)[DISABLE]healtoponents:db 66 41 0F 6E 71 10unregistersymbol(healtoponents)dealloc(newmem) 
[ENABLE]aobscanmodule(oponents,deadrising3.exe,66 0F 6E 48 10 66 0F 6E 40 14 48) // should be uniquealloc(newmem,100,"deadrising3.exe"+12F07E)label(return)newmem:movd xmm1,[rax+14]movd [rax+10],xmm1jmp returnoponents:jmp newmemreturn:registersymbol(oponents)[DISABLE]oponents:db 66 0F 6E 48 10unregistersymbol(oponents)dealloc(newmem) 
[ENABLE]aobscanmodule(oponents,deadrising3.exe,43 66 0F 6E 48 10) // should be uniquealloc(newmem,100,"deadrising3.exe"+14F978)label(return)newmem:movd xmm1,[rax+14]movd [rax+10],xmm1jmp returnoponents+01:jmp newmemreturn:registersymbol(oponents)[DISABLE]oponents+01:db 66 0F 6E 48 10unregistersymbol(oponents)dealloc(newmem) 
[ENABLE]aobscanmodule(Nocrashweapon,deadrising3.exe,66 0F 6E 50 10)alloc(newmem,100,"deadrising3.exe"+6D2E57)label(return)newmem:movd xmm2,[rax+14]movd [rax+10],xmm2jmp returnNocrashweapon:jmp newmemreturn:registersymbol(Nocrashweapon)[DISABLE]Nocrashweapon:db 66 0F 6E 50 10unregistersymbol(Nocrashweapon)dealloc(newmem) 
[ENABLE]aobscanmodule(ammo,deadrising3.exe,F3 0F 10 41 28 EB) // should be uniquealloc(newmem,100,"deadrising3.exe"+274F4F)label(return)newmem:mov [rcx+28],(float)999movss xmm0,[rcx+28]jmp returnammo:jmp newmemreturn:registersymbol(ammo)[DISABLE]ammo:db F3 0F 10 41 28 
[ENABLE]aobscanmodule(granades,deadrising3.exe,F3 0F 10 47 10 48 8B 4A) // should be uniquealloc(newmem,100,"deadrising3.exe"+36A443)label(return)newmem:mov [rdi+10],(float)100movss xmm0,[rdi+10]jmp returngranades:jmp newmemreturn:registersymbol(granades)[DISABLE]granades:db F3 0F 10 47 10unregistersymbol(granades)dealloc(newmem) 
[ENABLE]aobscanmodule(cars,deadrising3.exe,00 00 66 0F 6E 48 10 66) // should be uniquealloc(newmem,100,"deadrising3.exe"+5651B)label(return)newmem:movd xmm1,[rax+14]movd [rax+10],xmm1jmp returncars+02:jmp newmemreturn:registersymbol(cars)[DISABLE]cars+02:db 66 0F 6E 48 10unregistersymbol(cars)dealloc(newmem) 
[ENABLE]aobscanmodule(freeztimer,deadrising3.exe,03 42 2C 6B C0 3C 03 42 30 C3 CC CC CC CC) // should be uniquealloc(newmem,100,"deadrising3.exe"+1CE0AE)label(return)newmem:mov [rdx+2C],#1imul eax,eax,3Cjmp returnfreeztimer:jmp newmemnopreturn:registersymbol(freeztimer)[DISABLE]freeztimer:db 03 42 2C 6B C0 3Cunregistersymbol(freeztimer)dealloc(newmem) 
Изменено пользователем Korol2010
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

NullAlex, ок, спасибо за комплимент :-D  Но я думаю до разработчика мне ещё долго пилить))) К тому же я довольно редко играю и взламываю игры, так если только что-то интересное найду, то тогда играю и взламываю.


Да, забыл ещё кое что спросить. Как нужно сделать скрипт, чтобы именно заморозить таймер, а не устанавить его, как это реализовано в моём скрипте. Пример: время идёт, на таймере показывает 17:30, задача остановить таймер на именно этой отметке с помощью скрипта, НЕ СТАТИЧЕСКОГО АДРЕСА.

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

"Установить значение" и "заморозить значение" - это одно и то же, если это действие выполняется в таймере (т.е. - постоянно).

Но как альтернатива - можно "убить" таймер (заNOPить инструкцию, или сделать выход из функции при попытке перезаписи значения таймера игрой - крайний случай).

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

"Установить значение" и "заморозить значение" - это одно и то же, если это действие выполняется в таймере (т.е. - постоянно).

Но как альтернатива - можно "убить" таймер (заNOPить инструкцию, или сделать выход из функции при попытке перезаписи значения таймера игрой - крайний случай).

Ясно, спасибо за объяснение, хотя установить и заморозить я бы не сказал что это одно и то же, т.к. при установке значения, ты записываешь какое-то определённое значение, а при заморозке можно заморозить любое текущее значение, в данном случае с использованием скрипта. А у меня как раз реализована сейчас именно установка значения, потому что я записываю единицу, вместо того что бы остановить таймер на текущем значении.

А вот занопить инструкцию, это вариант, мне чёт даже и в голову то это не пришло :-D

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

"Заморозка" текущего значения происходит также, как и установка своего значения.

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

В АА скрипте для второго нужно:

  • Создать метку (регистрировать ее необязательно)
  • Перед началом установки текущего значения - запомнить это значение в созданную метку
  • Устанавливать значение метки
label(originalcode) // Оригинальный кодlabel(flag) // Флаг, который будет служить переключателем между режимами (установка своего значения, и установка неизвестного (текущего) значения)registersymbol(flag) // Регистрируем метку, чтобы использовать ее в таблицеlabel(value) // Значение, которое будет устанавливаться при срабатывании скрипта{ Примем за условные значения для метки-флага: 0 - Устанавливаем свое значение 1 - Устанавливаем текущее значение}newmem:cmp byte ptr [flag],#0jne @F // Если значение метки-флага не равно нулю - прыгаем на следующую меткуmov byte ptr [value],#1 // Устанавливаем нужное значение (единица - как в твоем скрипте)jmp originalcode // Выполняем оригинальный код@@: // Прыжок произойдет сюда, если первое условие не выполненоcmp byte ptr [flag],#1jne originalcode // Если значение метки-флага не равно единице - прыгаем на метку оригинального кодаpush eaxmov eax,[ecx] // Где "ecx" - нужный тебе регистр и смещениеmov byte ptr [value],eaxpop eaxjmp originalcode // Выполняем оригинальный кодoriginalcode:// Устанавливаем значение метки "value" - в значение таймера// И выполняем оригинальный код (без изменений)jmp returnhereflag:db 0 // Создаем метку (флаг) с типом "1 байт", со значением равным нулю
0 - Значение не запомнено1 - Значение запомнено

Добавляем в таблицу метку "flag", с типом 1 байт, переключаем - когда нужно, и радуемся.

P.S.

В секции DISABLE скрипта обязательнонужно снять регистрацию с метки-флага.

P.S. #2

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

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

И далее - проверять, если значение равно нулю - значит, надо запомнить значение, если же оно равно единице - выполняем скрипт, перепрыгнув через безымянную метку (с перезаписью "value").
Ссылка на комментарий
Поделиться на другие сайты

Спасибо большое за объяснение, смысл скрипта понял))) Попробую осуществить на досуге. Вот только я ещё 1 момент не знаю. Как добавить в таблицу метку "flag"? Просто я никогда не добавлял метки в таблицу, знаю что так можно, но делать никогда не делал.

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

Спасибо большое за объяснение, смысл скрипта понял))) Попробую осуществить на досуге. Вот только я ещё 1 момент не знаю. Как добавить в таблицу метку "flag"? Просто я никогда не добавлял метки в таблицу, знаю что так можно, но делать никогда не делал.

1. В основном окне СЕ (в центре, справа) кнопка "Добавить адрес".

2. В окне "Изменение адреса" вместо адреса пишем flag, в описании то что Вам нужно.\

3. Результат на картинке.

post-11229-0-96196000-1437999308_thumb.j

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

1. В основном окне СЕ (в центре, справа) кнопка "Добавить адрес".

2. В окне "Изменение адреса" вместо адреса пишем flag, в описании то что Вам нужно.\

3. Результат на картинке.

Благодарствую)

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


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

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

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