-
Автор темы
- #1
32бит, длл
перед инструкцией которая вычитает патроны из магазина(0x00622E86) у меня появляется вызов на функцию codecave
после вызова функции стоят 2 nop, после идёт код игры (начиная с 0x00622E8F)
в x32dbg смотрел вроде всё правильно, в том числе и функция
original:
modify:
codecave:
но после выстрела патрона игра сразу крашит, вопрос: схуяле он не работает? (даже урбаничка работает)
перед инструкцией которая вычитает патроны из магазина(0x00622E86) у меня появляется вызов на функцию codecave
после вызова функции стоят 2 nop, после идёт код игры (начиная с 0x00622E8F)
в x32dbg смотрел вроде всё правильно, в том числе и функция
original:
Пожалуйста, авторизуйтесь для просмотра ссылки.
modify:
Пожалуйста, авторизуйтесь для просмотра ссылки.
codecave:
Пожалуйста, авторизуйтесь для просмотра ссылки.
но после выстрела патрона игра сразу крашит, вопрос: схуяле он не работает? (даже урбаничка работает)
C++:
#include <Windows.h>
DWORD* base_address;
DWORD* offset1;
DWORD* offset2;
DWORD* offset3;
DWORD* offset4;
DWORD* offset5;
DWORD* offset6;
DWORD* ammo_count;
DWORD ret_address = 0x00622E8F;
__declspec(naked) void codecave() {
__asm {
pushad
}
base_address = (DWORD*)0x00400000;
offset1 = (DWORD*)(*base_address + 0x608F64);
offset2 = (DWORD*)(*offset1 + 0x60);
offset3 = (DWORD*)(*offset2 + 0x80);
offset4 = (DWORD*)(*offset3 + 0x4);
offset5 = (DWORD*)(*offset4 + 0x1B8);
offset6 = (DWORD*)(*offset5 + 0x194);
ammo_count = (DWORD*)(*offset6 + 0x8);
*ammo_count = 30;
__asm {
popad
mov edx, dword ptr ds : [esi + 76]
cmp dword ptr ds : [edx + 88] , 0
jmp ret_address
}
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
DWORD protect_address;
unsigned char* hook_location = (unsigned char*)0x00622E88;
if (fdwReason == DLL_PROCESS_ATTACH) {
VirtualProtect((void*)hook_location, 7, PAGE_EXECUTE_READWRITE, &protect_address);
*hook_location = 0xE9;
*(DWORD*)(hook_location + 1) = (DWORD)&codecave - ((DWORD)hook_location + 5);
*(hook_location + 5) = 0x90;
*(hook_location + 6) = 0x90;
}
return true;
}