https://imoracle.tistory.com/48
핵툴 개발
리버스 엔지니어링을 통해 동작중인 게임의 메모리주소를 얻은 후 프로세스에 접근하는 방식은 내부접근과 외부접근으로 두가지의 방식이 존재합니다.
Internal (내부접근)
- Process에 DLL을 Injection 하는 DLL-Injection 기법을 사용합니다.
직접적으로 주입하므로 메모리에 직접 접근이 가능해 빠르게 읽고 쓸 수 있으며, 코드구현 또한 보다 간결하며 강력합니다.
External (외부접근)
- Win32 API를 이용해 프로세스의 메모리와 작용합니다. DLL을 직접적으로 Injection 하는게 아닌 EXE 실행파일을 주로 사용하며, Kernel32!OpenProcess()를 통해 HANDLE을 받아오고 VirtualProtectEx()를 사용해 메모리 보호속성을 변경해주고 ReadProcessMemory(), WriteProcessMemory() 함수를 통해 메모리와 상호작용합니다.
이와 같은 방식은 Internal(내부접근) 방식에 비해 커널(ring0)에 api호출도 해야하므로 처리시간이 걸려 속도가 느립니다.
예를 들어 OpenProcess()를 호출하게되면 Usermode(ring3)에서 Kernel32!OpenProcess -> ntdll!ZwOpenProcess ->
ntdll!KiFastSystemcall -> SYSENTER(명령) -> msr(레지스터) 를 거쳐 Kernelmode(ring0)에 접근합니다, 그 후 이어서
-> nt!KiFastCallEntry -> nt!NtOpenProcess 를 가져오게 됩니다.
고작 4줄에 불과하며, 하드코딩으로 값 입력시 API 사용조차 필요없는 Internal 방식에 비해 External 방식은
HANDLE을 얻고, PID를 구해 접근권한을 얻어 메모리보호 속성을 변경해주고 메모리를 읽어와 오프셋을 더해 계산후
메모리를 변조하고는 보호속성을 원래대로 돌려줍니다.
글쓴이는 External 방식을 이용해 만들어 보겠습니다.
차근차근 시작
Sleep() 을 이용해 과부하를 막아주었습니다.
뭐 설명할게 따로 없네요
대충 모듈 스냅샷을 구해오고 구조체 사용을 위해 dwSize를 초기화 해주었습니다.
Module32First로 모듈에 대한 정보를 검색하고 szModule로 내가 찾는 모듈과 이름이 같은지 비교합니다.
modBaseAddr로 베이스 주소를 저장하고
Module32Next로 맞는 프로세스를 찾을 때까지 다음으로 넘깁니다.
MODULEENTRY32 구조체의 모습입니다.
베이스주소를 가져와 저장해두고 플레이어구조체 포인터를 더해줍니다.
기능을 넣어주었습니다.
잠깐 ! 이전글에서 탄약주소를 구해놨는데 다르게 구현한거 같아요 라고 의문을 품는다면
89 08 - mov [eax], ecx
8B 46 14 - mov eax, [esi +14]
FF 08 - dec, eax
8D 44 24 1C - lea eax, [esp+1C]
였고
탄약값을 직접적으로 줄이는 인스트럭션은
FF 08 - dec [eax] 였습니다. 그 부분을 90 90 으로 nop처리해주며 아무런 기능도 하지않게 만들었습니다.
한마디로 총을 쏴도 총알갯수가 줄어들거나 늘거나 하지않고 20발에 고정됩니다.
만들고보니 좀 복잡하네요
한결 깔끔해 졌네요
이제 잘 동작하는지 확인해 봅시다.
작동확인
기능들이 잘 동작합니다
총기반동제거는 어떻게 찾았냐구요?
힌트는 총을쏘고나서 따라가다보면 반동을주는 부분이 나오지 않을까요?
마치며
3편으로 돌아오게된다면 월핵과 에임봇을 구현하겠네요
일단은 현재는 생각이 없지만 나중에 생각이 나면 구현해보겠습니다
https://imoracle.tistory.com/48
'Reverse Engineering > GAMEHACK' 카테고리의 다른 글
[Anti - Reversing] 보안솔루션 직접 제작하기 - 2 - (0) | 2024.07.05 |
---|---|
[Anti - Reversing] 보안솔루션 직접 제작하기 - 1 - (0) | 2024.07.04 |
[Game] 지뢰찾기 월핵 제작 - 2 - (1) | 2024.07.04 |
[Game] 지뢰찾기 월핵 제작 - 1 - (0) | 2024.07.04 |
[Assaultcube] FPS게임 분석 및 핵 제작 - 1 - (0) | 2024.07.04 |