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

"S.T.A.L.K.E.R. - Lost Alpha DC" v1.4007 - Очки навыков


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

Для интереса решил покопаться в коде отвечающем за скилл поинты гг. И столкнулся с тем что модуль отвечающий за эту инструкцию написан на Lua скриптах(со слов LIRW). Поэтому смена значения на прямую приводит к вылету, если менять инструкцию обычным методом.

 

Инструкция же обращается к одному адресу.

Спойлер

 

JpPl5abbDKzgs2r56ceMg2tMs1IA_JyLSJIGXzmT

 

 

 

 

Соответственно я привёл в Auto assembler две инструкции ниже.

 

1

Спойлер

[ENABLE]

aobscan(MaxSkill,F3 0F 7E 07 89 4B 78 66 0F D6 43 70 83 7B 78 03 0F 85 02) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  movq xmm0,[edi]
  mov [ebx+78],ecx
  jmp return

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

[DISABLE]

MaxSkill:
  db F3 0F 7E 07 89 4B 78

unregistersymbol(MaxSkill)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 6666383D

""+66663818: 8D BB C0 00 00 00        -  lea edi,[ebx+000000C0]
""+6666381E: 89 7E 08                 -  mov [esi+08],edi
""+66663821: 8B 4B 78                 -  mov ecx,[ebx+78]
""+66663824: F3 0F 7E 43 70           -  movq xmm0,[ebx+70]
""+66663829: 89 4B 18                 -  mov [ebx+18],ecx
""+6666382C: 66 0F D6 43 10           -  movq [ebx+10],xmm0
""+66663831: 8B 43 F0                 -  mov eax,[ebx-10]
""+66663834: 8B 48 1C                 -  mov ecx,[eax+1C]
""+66663837: 8B 79 08                 -  mov edi,[ecx+08]
""+6666383A: 8B 4F 08                 -  mov ecx,[edi+08]
// ---------- INJECTING HERE ----------
""+6666383D: F3 0F 7E 07              -  movq xmm0,[edi]
""+66663841: 89 4B 78                 -  mov [ebx+78],ecx
// ---------- DONE INJECTING  ----------
""+66663844: 66 0F D6 43 70           -  movq [ebx+70],xmm0
""+66663849: 83 7B 78 03              -  cmp dword ptr [ebx+78],03
""+6666384D: 0F 85 02 07 00 00        -  jne 66663F55
""+66663853: D9 EE                    -  fldz 
""+66663855: DD 43 70                 -  fld qword ptr [ebx+70]
""+66663858: DF E9                    -  fucomip st(0),st(1)
""+6666385A: DD D8                    -  fstp st(0)
""+6666385C: 0F 8A 55 01 00 00        -  jp 666639B7
""+66663862: 0F 86 4F 01 00 00        -  jbe 666639B7
""+66663868: 8B 43 F0                 -  mov eax,[ebx-10]
}

 

 

2

Спойлер

[ENABLE]

aobscan(SKILLPOINT,89 17 89 47 04 0F 83 60) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  mov [edi],edx
  mov [edi+04],eax
  jmp return

SKILLPOINT:
  jmp newmem
return:
registersymbol(SKILLPOINT)

[DISABLE]

SKILLPOINT:
  db 89 17 89 47 04

unregistersymbol(SKILLPOINT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: BC8E1B04

BC8E1AE6: DC 63 20                 -  fsub qword ptr [ebx+20]
BC8E1AE9: DD 5B 30                 -  fstp qword ptr [ebx+30]
BC8E1AEC: 8B 43 F0                 -  mov eax,[ebx-10]
BC8E1AEF: 8B 48 1C                 -  mov ecx,[eax+1C]
BC8E1AF2: 8B 79 08                 -  mov edi,[ecx+08]
BC8E1AF5: 8B 43 38                 -  mov eax,[ebx+38]
BC8E1AF8: 8B 53 30                 -  mov edx,[ebx+30]
BC8E1AFB: 89 47 08                 -  mov [edi+08],eax
BC8E1AFE: 83 F8 04                 -  cmp eax,04
BC8E1B01: 8B 43 34                 -  mov eax,[ebx+34]
// ---------- INJECTING HERE ----------
BC8E1B04: 89 17                    -  mov [edi],edx
BC8E1B06: 89 47 04                 -  mov [edi+04],eax
// ---------- DONE INJECTING  ----------
BC8E1B09: 0F 83 60 04 00 00        -  jae BC8E1F6F
BC8E1B0F: 8B 4B 08                 -  mov ecx,[ebx+08]
BC8E1B12: F3 0F 7E 03              -  movq xmm0,[ebx]
BC8E1B16: 89 4B 48                 -  mov [ebx+48],ecx
BC8E1B19: 66 0F D6 43 40           -  movq [ebx+40],xmm0
BC8E1B1E: B9 80 CB 5A 14           -  mov ecx,145ACB80
BC8E1B23: 8D 13                    -  lea edx,[ebx]
BC8E1B25: 83 C3 30                 -  add ebx,30
BC8E1B28: C7 46 18 40 5C 83 14     -  mov [esi+18],14835C40
BC8E1B2F: 53                       -  push ebx
}

 

 

Как я думаю стоит копать первый вариант.

 

movq xmm0,[edi]

 

Я посмотрел что инструкция "edi" напрямую связана со значением очков прокачки. Но как я сказал на прямую её менять нельзя.

И тут мне вновь нужна помощь ваша помощь.

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

13 часов назад, Tzeentch сказал:

Инструкция же обращается к одному адресу.

  Показать контент

 

JpPl5abbDKzgs2r56ceMg2tMs1IA_JyLSJIGXzmT

 

 

 

 

 

Вот прямая ссылка на скрин

 

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

13 часов назад, Tzeentch сказал:

Как я думаю стоит копать первый вариант.

Копать можно любой, только ты вначале проверь со сколькими адресами работают инструкции.

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

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

Копать можно любой, только ты вначале проверь со сколькими адресами работают инструкции.

Да вроде все с одним адресом. По крайней мере при уменьшении очков прокачки.

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

Извращенцы, распакуйте игру, в скрипт %game_folder%\gamedata\scripts\bind_actor.script в функцию actor_binder:on_item_drop
добавьте в конец
if pdaSkills then
pdaSkills.add_points_amount(50)
end
Рестартаните игру и будет вам счастье

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

В 07.01.2019 в 00:47, gonarh сказал:

Извращенцы, распакуйте игру, в скрипт %game_folder%\gamedata\scripts\bind_actor.script в функцию actor_binder:on_item_drop
добавьте в конец
if pdaSkills then
pdaSkills.add_points_amount(50)
end
Рестартаните игру и будет вам счастье

Нормально, мы вообще-то изначально пишем трейнеры и скрипты для игр. А изменение игровых файлов не интересно.

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

В 02.01.2019 в 14:05, Garik66 сказал:

Вроде - не, не подходит, нужно точно.

dbg срабатывает при bp на lua.dll .. а там уже не как с одним адресом работать не может.. Так что Игорь там не вроде :) Он и не смотрел видать...  

 

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

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

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

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