21. 간단한 게임 치트 도전 - 월핵(d3d11)
본문 바로가기
Reversing & Cheat Engine

21. 간단한 게임 치트 도전 - 월핵(d3d11)

by boosting 2024. 3. 7.
728x90

이번에는 화면 쪽을 건드려보자

무릇 fps 하면 항상 떠오르는 핵 중 하나가 바로 월핵이겠죠.
벽 뒤쪽에 누가 있는지 봄으로써 엄청난 이득을 갖고 시작하는 치트가 아닐까
생각합니다.
 
이 게임에서는 상대하는 게 몬스터에 가깝기 때문에 굳이 필요는 없지만
d3d11 간단하게 다뤄본다고 생각하고 보면 될 거 같아요.
 
우선 치트엔진에 기본적으로 D3D Hook이라는 기능이 있습니다.
이를 이용하여 찾아보도록 할 거예요.
 

SCMarine

 
Writable을 체크해제 하고 언노운 스캔을 해줍니다.
왜냐면 이 게임은 언리얼 엔진으로 만들어졌고 d3d11.dll 기반이라 이쪽 메모리 속성이
Execute/Read Only여서 다른 건 배제하려고 그렇습니다.
 

SCMarine

 
Hook Direct3D를 눌러주세요.
단 이 게임은 메모리 변조 감지가 없어서 이 방법이 가능한 겁니다.
일반적인 온라인 fps의 경우 웬만하면 메모리 변조 감지가 있기 때문에 그걸 우회하고
이 기능을 쓰셔야 할 것입니다.
 
저 기능을 눌러준 이후 Changed Value로 스캔해 줍시다.
 

SCMarine

 
이런 식으로 d3d9.dll 하고 d3d11.dll 쪽이 떴습니다.
이 게임은 d3d11.dll을 쓰기 때문에 d3d9.dll은 그냥 걸러주시면 됩니다.

 


 

SCMarine

 
하나씩 hook이 되어 있을 텐데, 이 부분들을 하나씩 디버깅을 걸어서 반응이 있는지 살펴봅니다.
이게 모든 곳이 반응하는 게 아니기 때문에 이 노가다 과정은 좀 고쳐야 합니다...
어차피 몇 개 없으니까 오래 걸리지도 않습니다.
 

SCMarine

 
자 걸리는 것을 찾았습니다.
이러면 이제 저 Parameters라고 하는 곳들을 좀 봐야 합니다.
이곳에 계속 디버깅을 걸고 F9로 쭉 돌려보면 Parameters들이 단순한 숫자들로
구성되어 있는 경우가 있는지를 확인해 봅니다.
 

SCMarine

 
해보니까 있네요.
그러면 이 리턴 주소를 따라가 줍니다.
 

SCMarine

 
이곳인데, 이 부분을 쭉 돌려보면 rsi가 숫자가 담기는 레지스터임을 확인할 수 있었습니다.
그리고 r8d로 옮겨주는 걸로 봐서, 스택에다가 push 하려는 인자임을 알 수 있습니다.
32Bit 명령어에서는 push x 식으로 하지만 64Bit 명령어에선 mov r8d,x 식으로 합니다.
일단 이 게임의 Stride와 Vertex 등은 현재 모르기 때문에 벽구분은 힘들듯..
그 정도로 노가다할 게임은 아닌 거 같아요 ㅋㅋ
 
우선 r8d 부분을 살짝 건드려보았는데 다음과 같이 변했습니다.

 
이런 식으로 벽을 투과하여 저그 유닛들이 보이는 걸 확인할 수 있었습니다.
여기서 이제 플레이어 좌표와 저그 유닛들의 좌표와 뼈대를 읽어서 위치를 그려준다던가 하면
그게 esp라고 불리는 핵이겠죠.
 
d3d11.dll은 저도 막 풀어서 설명할 정도로 잘 아는 편이 아니기에...
더 깊이 공부하시려면 구글링을 좀 해야 할 듯합니다. 저도 이 분야 쪽은 매번 찾아보거든요..

728x90