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

Killing Floor 2 фильтр свой\чужой


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

Здравия желаю, форумчане.
В деле геймхакинга зеленый, но пытался ковыряться в современных играх, а не в старых (сложнее - значит опыта в этом деле будет больше)
Конкретно в Killing Floor 2(steam-версия) столкнулся с проблемой написания фильтра свой\чужой
Исходя из уроков на канале gamehacklab[ru], для фильтра нужна строка со значениями, которые будут для меня одно, для всех остальных другое. т.е. выделяться фиолетовым.
 

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

16596923.gif

да не тут-то было, почти все "статичные" значения, по ходу игры меняются. Соответственно, каждый раз, когда брал любое из фиолетовых, сравнивал в скрипте 
например
cmp dword ptr [r8+сc], 140
jne code
то игра вылетала уже сразу на этом этапе, даже не добавляя махинаций со значениями.

p.s. заодно интересно, как выйти на структуру оружия, если единственный адреc с патронами - экранный, или зашифрованый(не смог понять, но в код выше\ниже смотрел, нигде нет call'ов и xor, бряк на запись выводит указатель на тот же адрес, что у меня в таблице)

Перенес тему в соответствующий раздел (от MasterGH)

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

Ох ну и игру ты выбрал, она на UE написана.

11 минуту назад, lizzmack сказал:

cmp dword ptr [r8+сc], 140

 

и тут так:

 

cmp dword ptr [r8+сc], #140

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

 

Кстати, возможно взял не ту инструкцию в Dishonored(UE3) была одна инструкция, которая работала только со здоровьем ГГ.

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

6 минут назад, partoftheworlD сказал:

Ох ну и игру ты выбрал, она на UE написана.

Извините, не в курсах, с UE что-то не так?
 

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

cmp dword ptr [r8+сc], #140

крашнуло

сейчас гляну что с другими инструкциями, хотя там все в списке работают более чем 8 адресов

 

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

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

Извините, не в курсах, с UE что-то не так?

 

Сложный движок для разбора, т.е там одна функция может быть вложенная вида:

 

call fnc
   {
    ...
    call fnc_tier1
    {
     ...
     call fnc_tier2
     и т.д
     ...
    }
    ...
   }

 

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

Скрин инструкций

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

16597297.png

пробовал нопить 3 и 4 инструкцию, отнимать 0 от текущего значения и писать максимальное в текущее. но из-за кривого фильтра все пока пустой труд был.
конкретно одной инструкции на здоровье гг я так и не увидел тут, поэтому сижу, сейчас список указателей делаю.

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

5 минут назад, Dison сказал:

Попробуй так -  cmp dword ptr [r8+сc],0000008C

Крашнуло(по калькулятору ввел свое значение с пересчетом на hex), + после перезапуска значение в смещении сс, которое было   0000008C  сменилось на другое (000000F5) ,даже если не перезапускать игру, то значение в фиолетовых областях все равно меняется каждые несколько минут. Или я 

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

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

Крашнуло(по калькулятору ввел свое значение с пересчетом на hex), + после перезапуска значение в смещении сс, которое было   0000008C  сменилось на другое (000000F5) ,даже если не перезапускать игру, то значение в фиолетовых областях все равно меняется каждые несколько минут. Или я 

Значит не правильно найден фильтр

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

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

2017032521_9670838_25633792.jpg

забыл, указать, та инструкция, что с 1 адресом работала. Она вообще непонятно как вылезла. по сути, когда бьют, и играю - вылезают только первые 4.

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

 

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

newmem:
  movd xmm1,[rdx+00000388]
code:
  movd xmm1,[rdx+00000384]
  jmp return

 

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

Надо писать так

newmem:
  mov dword ptr [rdx+00000388],(float)100 - Например устанавливаем 100
code:
  movd xmm1,[rdx+00000384]
  jmp return

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

5 минут назад, Dison сказал:

Надо писать так

newmem:
  mov dword ptr [rdx+00000388],(float)100 - Например устанавливаем 100
code:
  movd xmm1,[rdx+00000384]
  jmp return

Попробовал разные типы переменных
float
double
int
#
скрипт все еще не реагирует на активацию. =\ (здоровье в 4 байта)

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

 

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

Попробовал разные типы переменных
float
double
int
#
скрипт все еще не реагирует на активацию. =\ (здоровье в 4 байта)

Скинь полностью скрипт сюда

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

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

{ Game   : KFGame.exe
  Version: 
  Date   : 2017-03-25
  Author : ??????

  This script does blah blah blah
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique
alloc(newmem,$1000,"KFGame.exe"+ACEE82)

label(code)
label(return)

newmem:
  mov dword ptr [rdx+00000384],(double)100 //на double остановился на момент копирования. по смещению 384 текущее здоровье, 388 - макс.
code:
  movd xmm1,[rdx+00000384]
  jmp return

INJECT:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(INJECT)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
INJECT:
  db CC 0F 6E 8A 84 03 00 00

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "KFGame.exe"+ACEE82

"KFGame.exe"+ACEE52: 45 0F B6 E0              -  movzx r12d,r8l
"KFGame.exe"+ACEE56: 48 8B F2                 -  mov rsi,rdx
"KFGame.exe"+ACEE59: 48 8B E9                 -  mov rbp,rcx
"KFGame.exe"+ACEE5C: 48 85 D2                 -  test rdx,rdx
"KFGame.exe"+ACEE5F: 0F 84 C7 02 00 00        -  je KFGame.exe+ACF12C
"KFGame.exe"+ACEE65: F6 82 E8 00 00 00 02     -  test byte ptr [rdx+000000E8],02
"KFGame.exe"+ACEE6C: 0F 85 BA 02 00 00        -  jne KFGame.exe+ACF12C
"KFGame.exe"+ACEE72: 48 8B 81 4C 02 00 00     -  mov rax,[rcx+0000024C]
"KFGame.exe"+ACEE79: 48 85 C0                 -  test rax,rax
"KFGame.exe"+ACEE7C: 0F 84 AA 02 00 00        -  je KFGame.exe+ACF12C
// ---------- INJECTING HERE ----------
"KFGame.exe"+ACEE82: 66 0F 6E 8A 84 03 00 00  -  movd xmm1,[rdx+00000384]
// ---------- DONE INJECTING  ----------
"KFGame.exe"+ACEE8A: 0F 57 C0                 -  xorps xmm0,xmm0
"KFGame.exe"+ACEE8D: 0F 5B C9                 -  cvtdq2ps xmm1,xmm1
"KFGame.exe"+ACEE90: 0F 2F C8                 -  comiss xmm1,xmm0
"KFGame.exe"+ACEE93: 0F 82 93 02 00 00        -  jb KFGame.exe+ACF12C
"KFGame.exe"+ACEE99: 48 3B D0                 -  cmp rdx,rax
"KFGame.exe"+ACEE9C: 0F 84 8A 02 00 00        -  je KFGame.exe+ACF12C
"KFGame.exe"+ACEEA2: 48 89 5C 24 50           -  mov [rsp+50],rbx
"KFGame.exe"+ACEEA7: 33 DB                    -  xor ebx,ebx
"KFGame.exe"+ACEEA9: 48 89 7C 24 58           -  mov [rsp+58],rdi
"KFGame.exe"+ACEEAE: 33 FF                    -  xor edi,edi
}

 

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

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

[ENABLE]
aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique
alloc(newmem,$1000,"KFGame.exe"+ACEE82)
registersymbol(INJECT)
label(code)
label(return)

newmem:
  mov dword ptr [rdx+00000384],(float)100 //Попробуй так
code:
  movd xmm1,[rdx+00000384]
  jmp return

INJECT:
  jmp newmem
  nop
  nop
  nop
return:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
INJECT:
  db CC 0F 6E 8A 84 03 00 00
unregistersymbol(INJECT)
dealloc(newmem)

Или

[ENABLE]
aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique
alloc(newmem,$1000,"KFGame.exe"+ACEE82)
registersymbol(INJECT)
label(code)
label(return)

newmem:
  push [rdx+00000388]
  pop [rdx+00000384]
code:
  movd xmm1,[rdx+00000384]
  jmp return

INJECT:
  jmp newmem
  nop
  nop
  nop
return:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
INJECT:
  db CC 0F 6E 8A 84 03 00 00
unregistersymbol(INJECT)
dealloc(newmem)

 

 

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

12 минуты назад, lizzmack сказал:
  Показать содержимое

{ Game   : KFGame.exe
  Version: 
  Date   : 2017-03-25
  Author : ??????

  This script does blah blah blah
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique
alloc(newmem,$1000,"KFGame.exe"+ACEE82)

label(code)
label(return)

newmem:
  mov dword ptr [rdx+00000384],(double)100 //на double остановился на момент копирования. по смещению 384 текущее здоровье, 388 - макс.
code:
  movd xmm1,[rdx+00000384]
  jmp return

INJECT:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(INJECT)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
INJECT:
  db CC 0F 6E 8A 84 03 00 00

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "KFGame.exe"+ACEE82

"KFGame.exe"+ACEE52: 45 0F B6 E0              -  movzx r12d,r8l
"KFGame.exe"+ACEE56: 48 8B F2                 -  mov rsi,rdx
"KFGame.exe"+ACEE59: 48 8B E9                 -  mov rbp,rcx
"KFGame.exe"+ACEE5C: 48 85 D2                 -  test rdx,rdx
"KFGame.exe"+ACEE5F: 0F 84 C7 02 00 00        -  je KFGame.exe+ACF12C
"KFGame.exe"+ACEE65: F6 82 E8 00 00 00 02     -  test byte ptr [rdx+000000E8],02
"KFGame.exe"+ACEE6C: 0F 85 BA 02 00 00        -  jne KFGame.exe+ACF12C
"KFGame.exe"+ACEE72: 48 8B 81 4C 02 00 00     -  mov rax,[rcx+0000024C]
"KFGame.exe"+ACEE79: 48 85 C0                 -  test rax,rax
"KFGame.exe"+ACEE7C: 0F 84 AA 02 00 00        -  je KFGame.exe+ACF12C
// ---------- INJECTING HERE ----------
"KFGame.exe"+ACEE82: 66 0F 6E 8A 84 03 00 00  -  movd xmm1,[rdx+00000384]
// ---------- DONE INJECTING  ----------
"KFGame.exe"+ACEE8A: 0F 57 C0                 -  xorps xmm0,xmm0
"KFGame.exe"+ACEE8D: 0F 5B C9                 -  cvtdq2ps xmm1,xmm1
"KFGame.exe"+ACEE90: 0F 2F C8                 -  comiss xmm1,xmm0
"KFGame.exe"+ACEE93: 0F 82 93 02 00 00        -  jb KFGame.exe+ACF12C
"KFGame.exe"+ACEE99: 48 3B D0                 -  cmp rdx,rax
"KFGame.exe"+ACEE9C: 0F 84 8A 02 00 00        -  je KFGame.exe+ACF12C
"KFGame.exe"+ACEEA2: 48 89 5C 24 50           -  mov [rsp+50],rbx
"KFGame.exe"+ACEEA7: 33 DB                    -  xor ebx,ebx
"KFGame.exe"+ACEEA9: 48 89 7C 24 58           -  mov [rsp+58],rdi
"KFGame.exe"+ACEEAE: 33 FF                    -  xor edi,edi
}

 

Скрипт примерное такой:
 

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

aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique
alloc(newmem,$1000,"KFGame.exe"+ACEE82)
label(code)
label(return)

newmem:
  fld dword ptr [rdx+388]                           // Берем значение из [rdx+388]
  fstp dword ptr [rdx+384]                         // Помещаем значение из [rdx+388] в [rdx+384]

code:
  movd xmm1,[rdx+00000384]
  jmp return

INJECT:
  jmp newmem
  nop
  nop
  nop

return:
registersymbol(INJECT)

 

Для работы с double нужно делать так вроде:
 

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

aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique
alloc(newmem,$1000,"KFGame.exe"+ACEE82)
label(Hp_Pl)
label(code)
label(return)
label(ValueOnDouble) // Рандом название

newmem:

ValueOnDouble:
  dq(double)0  // Заместо 0 любое твое число

Hp_Pl:
  fld dword ptr [ValueOnDouble] // Берем значение из [ValueOnDouble]
  fstp dword ptr [rdx+384]      // И помещаем сюда

code:
  movd xmm1,[rdx+00000384]
  jmp return

INJECT:
  jmp Hp_Pl
  nop
  nop
  nop

return:
registersymbol(INJECT)

 

 

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

21 минуты назад, what228 сказал:

Скрипт примерное такой:
 

  Скрыть содержимое


aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique
alloc(newmem,$1000,"KFGame.exe"+ACEE82)
label(code)
label(return)

newmem:
  fld dword ptr [rdx+388]                           // Берем значение из [rdx+388]
  fstp dword ptr [rdx+384]                         // Помещаем значение из [rdx+388] в [rdx+384]

code:
  movd xmm1,[rdx+00000384]
  jmp return

INJECT:
  jmp newmem
  nop
  nop
  nop

return:
registersymbol(INJECT)

 

Для работы с double нужно делать так вроде:
 

  Скрыть содержимое


aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique
alloc(newmem,$1000,"KFGame.exe"+ACEE82)
label(Hp_Pl)
label(code)
label(return)
label(ValueOnDouble) // Рандом название

newmem:

ValueOnDouble:
  dq(double)0  // Заместо 0 любое твое число

Hp_Pl:
  fld dword ptr [ValueOnDouble] // Берем значение из [ValueOnDouble]
  fstp dword ptr [rdx+384]      // И помещаем сюда

code:
  movd xmm1,[rdx+00000384]
  jmp return

INJECT:
  jmp Hp_Pl
  nop
  nop
  nop

return:
registersymbol(INJECT)

 

 

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


UPD: инструкция, на которую мне говорили писать - за 10 минут не появилась в отладчике. Подозреваю, она упорота. Остается писать фильтр для второй или четвертой, даже если значения в структурке меняются каждые пару минут. 

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

UPD2: сумел найти инструкцию эту же инструкцию,вписал фильтр, вписал значение - РАБОТАЕТ.
но в силу того, что инструкция вызывается раз в ХЗ сколько времени - ненадежный скрипт получился, хз даже почему он вообще работает. Подозреваю, что мне нужна одна из первых 4 какая-нибудь, которая срабатывает много раз в секунду. но фильтр у меня там не получается написать( все значения меняются бешено быстро). Попробую полазить еще утром уже, поскольку уже хоть какой-то прогресс увидел.

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

9 минут назад, lizzmack сказал:

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

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

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

22 минуты назад, lizzmack сказал:

UPD2: сумел найти инструкцию эту же инструкцию,вписал фильтр, вписал значение - РАБОТАЕТ.
но в силу того, что инструкция вызывается раз в ХЗ сколько времени - ненадежный скрипт получился, хз даже почему он вообще работает. Подозреваю, что мне нужна одна из первых 4 какая-нибудь, которая срабатывает много раз в секунду. но фильтр у меня там не получается написать( все значения меняются бешено быстро). Попробую полазить еще утром уже, поскольку уже хоть какой-то прогресс увидел.

Сейчас скачал KF2 ( repack nemos ) установлю и гляну что там с хп.

Цитата

В деле геймхакинга зеленый, но пытался ковыряться в современных играх, а не в старых (сложнее - значит опыта в этом деле будет больше)

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

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

4 часа назад, lizzmack сказал:

UPD2: сумел найти инструкцию эту же инструкцию,вписал фильтр, вписал значение - РАБОТАЕТ.
но в силу того, что инструкция вызывается раз в ХЗ сколько времени - ненадежный скрипт получился, хз даже почему он вообще работает. Подозреваю, что мне нужна одна из первых 4 какая-нибудь, которая срабатывает много раз в секунду. но фильтр у меня там не получается написать( все значения меняются бешено быстро). Попробую полазить еще утром уже, поскольку уже хоть какой-то прогресс увидел.

Вот работает при получении урона:
 

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

[ENABLE]
aobscanmodule(PlayerHealth,KFGame.exe,CC 07 89 06 48 83 C4 20)
alloc(newmem,$1000,"KFGame.exe"+55CD0)

label(code)
label(return)

newmem:
  cmp [rdi+310],8110C000
  jne code
  cmp [rdi+434],00008387
  jne code
  mov [rdi],64
  jmp code

code:
  mov eax,[rdi]
  mov [rsi],eax
  add rsp,20
  jmp return

PlayerHealth:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(PlayerHealth)

[DISABLE]

PlayerHealth:
  db CC 07 89 06 48 83 C4 20

unregistersymbol(PlayerHealth)
dealloc(newmem)

 

Еще на пробу с таким работал но игра крашится не знаю почему:
 

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

[ENABLE]
aobscanmodule(pl_HP,KFGame.exe,41 8B 00 41 89 02 C3)
alloc(newmem,$1000,"KFGame.exe"+E8EBE)

label(code)
label(return)

newmem:
  cmp [r8+310],8110C000
  jne code
  cmp [r8+434],00008387
  jne code
  mov [r8],64
  jmp code

code:
  mov eax,[r8]
  mov [r10],eax
  jmp return

pl_HP:
  jmp newmem
  nop
return:
registersymbol(pl_HP)

[DISABLE]
sl_HP:
  db 41 8B 00 41 89 02

unregistersymbol(pl_HP)
dealloc(newmem)

 

Думаю просто нужно еще фильтр накинуть и мб норм будет. Т.к. в самые первые моменты я с скриптом #2 ( mov eax,[r8] ) побегал 2 волны и не вылетало. Потом после первого вылета стало вылетать очень часто. Но не буду этим заниматься т.к. игра мне не понравилась извини.

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

8 часов назад, what228 сказал:

Вот работает при получении урона:
 

  Показать содержимое


[ENABLE]
aobscanmodule(PlayerHealth,KFGame.exe,CC 07 89 06 48 83 C4 20)
alloc(newmem,$1000,"KFGame.exe"+55CD0)

label(code)
label(return)

newmem:
  cmp [rdi+310],8110C000
  jne code
  cmp [rdi+434],00008387
  jne code
  mov [rdi],64
  jmp code

code:
  mov eax,[rdi]
  mov [rsi],eax
  add rsp,20
  jmp return

PlayerHealth:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(PlayerHealth)

[DISABLE]

PlayerHealth:
  db CC 07 89 06 48 83 C4 20

unregistersymbol(PlayerHealth)
dealloc(newmem)

 

Еще на пробу с таким работал но игра крашится не знаю почему:
 

  Показать содержимое


[ENABLE]
aobscanmodule(pl_HP,KFGame.exe,41 8B 00 41 89 02 C3)
alloc(newmem,$1000,"KFGame.exe"+E8EBE)

label(code)
label(return)

newmem:
  cmp [r8+310],8110C000
  jne code
  cmp [r8+434],00008387
  jne code
  mov [r8],64
  jmp code

code:
  mov eax,[r8]
  mov [r10],eax
  jmp return

pl_HP:
  jmp newmem
  nop
return:
registersymbol(pl_HP)

[DISABLE]
sl_HP:
  db 41 8B 00 41 89 02

unregistersymbol(pl_HP)
dealloc(newmem)

 

Думаю просто нужно еще фильтр накинуть и мб норм будет. Т.к. в самые первые моменты я с скриптом #2 ( mov eax,[r8] ) побегал 2 волны и не вылетало. Потом после первого вылета стало вылетать очень часто. Но не буду этим заниматься т.к. игра мне не понравилась извини.

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

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

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

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

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