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

[Splinter Cell: Pandora Tomorrow] Как короче оформить NoReload?


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

Всем доброго дня.

Вот к примеру как оформляется InfAmmo:

Там не тратятся в кармане. Но тратятся в обойме.

Спойлер

{ Game   : SplinterCell2.exe
  Version:
  Date   : 2021-03-06
  Author : Templar

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(InfAmmo,Core.dll,89 0A FF 0F 5F 5E 59) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
newmem:

code:
  mov [edx],ecx
  ///Фильтр
  cmp [edi+C],#20 ///пистолет - сравниваем с макс. обоймой
  je @F ///прыжок на next code если пистолет
  cmp [edi+C],#30 ///автомат  - сравниваем с макс. обоймой
  je @F ///прыжок на next code если автомат
  dec [edi] ///тут отнимает всё остальное
@@:///next code
  pop edi
  jmp return

InfAmmo:
  jmp newmem
return:
registersymbol(InfAmmo)

[DISABLE]

InfAmmo:
  db 89 0A FF 0F 5F 5E 59

unregistersymbol(InfAmmo)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Core.dll+32D56

Core.dll+32D3B: 80 38 42           - cmp byte ptr [eax],42
Core.dll+32D3E: 75 10              - jne Core.dll+32D50
Core.dll+32D40: 8B 4E 08           - mov ecx,[esi+08]
Core.dll+32D43: 6A 00              - push 00
Core.dll+32D45: 40                 - inc eax
Core.dll+32D46: 56                 - push esi
Core.dll+32D47: 89 46 0C           - mov [esi+0C],eax
Core.dll+32D4A: FF 15 10 9B 1F 10  - call dword ptr [Core.GNatives+108]
Core.dll+32D50: 8B 0F              - mov ecx,[edi]
Core.dll+32D52: 8B 54 24 14        - mov edx,[esp+14]
// ---------- INJECTING HERE ----------
Core.dll+32D56: 89 0A              - mov [edx],ecx 89 0A FF 0F 5F 5E 59
// ---------- DONE INJECTING  ----------
Core.dll+32D58: FF 0F              - dec [edi]
Core.dll+32D5A: 5F                 - pop edi
Core.dll+32D5B: 5E                 - pop esi
Core.dll+32D5C: 59                 - pop ecx
Core.dll+32D5D: C2 08 00           - ret 0008
Core.dll+32D60: CC                 - int 3
Core.dll+32D61: CC                 - int 3
Core.dll+32D62: CC                 - int 3
Core.dll+32D63: CC                 - int 3
Core.dll+32D64: CC                 - int 3
}

 

 

Вот мой скрипт на NoReload:

Спойлер

{ Game   : SplinterCell2.exe
  Version: 
  Date   : 2021-03-06
  Author : Templar

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(InfAmmo_NoReload,Core.dll,89 0A FF 0F 5F 5E 59) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(filter_1)
label(code_work)
newmem:

code:

  mov [edx],ecx
///my code
  cmp [edi+C],#20 ///пистолет - сравниваем с статичным смещением
  jne filter_1 ///прыгаем на следующий если не пистолет
  inc [edi] ///прибавляем назад - патроны в КАРМАНЕ
  inc [edi+8] ///No reload!!! - патроны в ОБОЙМЕ

filter_1:
  cmp [edi+C],#30 ///автомат  - сравниваем с статичным смещением
  jne code_work ///прыгаем на оригинальный код если не автомат
  inc [edi] ///прибавляем назад - патроны в КАРМАНЕ
  inc [edi+8] ///No reload!!! - патроны в ОБОЙМЕ
///my code
code_work:
  dec [edi] ///тут отнимает всё остальное
  pop edi

  jmp return

InfAmmo_NoReload:
  jmp newmem
return:
registersymbol(InfAmmo_NoReload)

[DISABLE]

InfAmmo_NoReload:
  db 89 0A FF 0F 5F 5E 59

unregistersymbol(InfAmmo_NoReload)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Core.dll+32D56

Core.dll+32D3B: 80 38 42           - cmp byte ptr [eax],42
Core.dll+32D3E: 75 10              - jne Core.dll+32D50
Core.dll+32D40: 8B 4E 08           - mov ecx,[esi+08]
Core.dll+32D43: 6A 00              - push 00
Core.dll+32D45: 40                 - inc eax
Core.dll+32D46: 56                 - push esi
Core.dll+32D47: 89 46 0C           - mov [esi+0C],eax
Core.dll+32D4A: FF 15 10 9B 1F 10  - call dword ptr [Core.GNatives+108]
Core.dll+32D50: 8B 0F              - mov ecx,[edi]
Core.dll+32D52: 8B 54 24 14        - mov edx,[esp+14]
// ---------- INJECTING HERE ----------
Core.dll+32D56: 89 0A              - mov [edx],ecx 89 0A FF 0F 5F 5E 59
// ---------- DONE INJECTING  ----------
Core.dll+32D58: FF 0F              - dec [edi]
Core.dll+32D5A: 5F                 - pop edi
Core.dll+32D5B: 5E                 - pop esi
Core.dll+32D5C: 59                 - pop ecx
Core.dll+32D5D: C2 08 00           - ret 0008
Core.dll+32D60: CC                 - int 3 
Core.dll+32D61: CC                 - int 3 
Core.dll+32D62: CC                 - int 3 
Core.dll+32D63: CC                 - int 3 
Core.dll+32D64: CC                 - int 3 
}

 

 

Как его оформить короче?

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

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

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

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