오버워치에서는 조준 방향을 일반적으로 고등학교때 배우는 방향벡터로 표시한다. 단 계산이 편하게 벡터 크기는 1로 정규화되어 있다. 좀더 간지있게 말하면 직교좌표계라고 한다. 오버워치는 에임핵 구현이 쉬운 편에 속한다. 왜냐하면 구면좌표계를 사용하는 게임에서 에임핵을 구현하려면 직교좌표계와 구면좌표계의 변환이 필요하기 때문이다.
직교좌표계는 실수 값 3개, 구면좌표계는 실수 값 2개로 표현하지만 어떤 좌표계를 취하던 간에 조준점을 이리저리 돌리면 메모리 안에 값이 바뀐다. 따라서 이 값의 주소를 찾으려면 마우스를 이리저리 돌리며 스캔하면 된다. 영상을 보자.
필자는 이 중에서 빈번하게 콜되는 가장 위의것을 후킹 지점으로 삼도록 하였다. 메모리 뷰어를 통해 좀 더 자세히 살펴보자.
Overwatch.exe+105BFE4 - movaps xmm0,[rdx+00000D20] 여기에서 rdx+D20이 조준점 벡터값의 주소를 나타낸다. rdx는 상위 함수에서부터 세팅된 파라미터이고 특별히 rdx를 변경하는 곳도 없기 때문에 후킹 장소는 주변에 아무데나 골라 잡아도 된다. 하지만 현재 치트엔진에는 디버깅을 걸면 xmm 레지스터가 클리어되는 버그가 있기 때문에, xmm 레지스터를 활용되기 전에 후킹 포인트를 잡아야 한다. 따라서 적절한 후킹 지점은 함수의 제일 처음 부분, 즉 push ebx가 있는 부분이다.
마지막으로 현재 에임핵 ct에서 조준점 벡터의 주소를 저장해두는 곳을 살펴 보도록 하자. ct의 MouseHook 부분을 보자.
Overwatch.exe+105bf90 - push rbx 에서 rip를 MouseHook 으로 변경한다. 그리고 [mouse] 변수에 조준점 벡터의 주소를 넣어 두고 원래 코드로 귀환시킨다. [mouse] 값은 실제로 적이 있는 곳을 가리키도록 할 때 활용된다. 나중에 계산편을 보면 [mouse]값이 어떻게 다뤄지는지 알 수 있을 것이다.
마지막으로 ct 패치법에 대해 간략히 말하겠다. 게임이 패치되면 다시 디버깅을 해서 파인드를 통해 옵코드를 보고 [mouse]에 다시 올바른 값을 넣도록 MouseHook 코드를 변경하면 된다. 물론 후킹 주소와, 복귀 주소같은 것도 적절히 설정해 주어야 한다. 오버워치는 패치마다 옵코드가 바뀌기 때문에 리버서의 재량이 조금은 필요하다. (지금까지 열심히 설명했으니 조금 필요하다고 한 것이다.) 어쨋든 직접 눈으로 직접 파악하고 패치하는 수밖에 없다. 다른 파트도 마찬가지이므로 이 뒤 포스팅부터는 설명을 줄이겠다.
대단하시네..
답글삭제대단하시네..
답글삭제이방법으로 값따는거 막혔나요 ?
답글삭제아무리 스캔해봐도 진값이 안나오네요
3개는 찾았는데 find out 걸면 게임이 꺼져버립니다. 엔진 세팅 해야하는게 있을까요?
답글삭제ㄹㅇ 찾음? 제가 알려드릴게요 네톤 적으세요
답글삭제값암호화 되서 ㄸ로하는거잇음
답글삭제좀 알려주셈
삭제네톤이나 톡디 알수없을가요?
답글삭제ㅎㅇ
답글삭제한국껀 다 카서스 어셈이야 게이들아
답글삭제The Golden Nugget - Tunica & Casino - JT Hub
답글삭제The Golden Nugget Casino has more than 1,000 slot machines. 세종특별자치 출장샵 All the games 안양 출장안마 are based 사천 출장샵 on the original, original machines 충청북도 출장안마 built in the late 1980's. The Golden 화성 출장안마 Nugget