Tzeentch Опубликовано 17 марта, 2021 Поделиться Опубликовано 17 марта, 2021 Всем доброго дня. Вот к примеру как оформляется 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения