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

[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 
}

 

 

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

Поделиться сообщением


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр

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

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

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