2017년 2월 10일 금요일

오버워치 에임핵 ct의 모든 것 1 - 조준점편 - MouseHook 패치법

오버워치에서 에임핵을 실현하려면 조준점을 적이 있는 방향으로 변경할 수 있어야 한다. 오버워치가 조준 방향을 어떻게 처리하는지 알아보고 해킹해 보자.

오버워치에서는 조준 방향을 일반적으로 고등학교때 배우는 방향벡터로 표시한다. 단 계산이 편하게 벡터 크기는 1로 정규화되어 있다. 좀더 간지있게 말하면 직교좌표계라고 한다. 오버워치는 에임핵 구현이 쉬운 편에 속한다. 왜냐하면 구면좌표계를 사용하는 게임에서 에임핵을 구현하려면 직교좌표계와 구면좌표계의 변환이 필요하기 때문이다.

직교좌표계는 실수 값 3개, 구면좌표계는 실수 값 2개로 표현하지만 어떤 좌표계를 취하던 간에 조준점을 이리저리 돌리면 메모리 안에 값이 바뀐다. 따라서 이 값의 주소를 찾으려면 마우스를 이리저리 돌리며 스캔하면 된다. 영상을 보자.

찾은 3개의 float값에 각각 제곱을 하여 모두 더하면 1이 됨을 확인할 수 있다. 궁금하면 직접 계산기를 돌려 보시라. 찾은 주소에 파인드를 걸어보면 몇 가지 결과가 나온다.

필자는 이 중에서 빈번하게 콜되는 가장 위의것을 후킹 지점으로 삼도록 하였다. 메모리 뷰어를 통해 좀 더 자세히 살펴보자.

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 코드를 변경하면 된다. 물론 후킹 주소와, 복귀 주소같은 것도 적절히 설정해 주어야 한다. 오버워치는 패치마다 옵코드가 바뀌기 때문에 리버서의 재량이 조금은 필요하다. (지금까지 열심히 설명했으니 조금 필요하다고 한 것이다.) 어쨋든 직접 눈으로 직접 파악하고 패치하는 수밖에 없다. 다른 파트도 마찬가지이므로 이 뒤 포스팅부터는 설명을 줄이겠다.

댓글 11개:

  1. 이방법으로 값따는거 막혔나요 ?
    아무리 스캔해봐도 진값이 안나오네요

    답글삭제
  2. 3개는 찾았는데 find out 걸면 게임이 꺼져버립니다. 엔진 세팅 해야하는게 있을까요?

    답글삭제
  3. ㄹㅇ 찾음? 제가 알려드릴게요 네톤 적으세요

    답글삭제
  4. 값암호화 되서 ㄸ로하는거잇음

    답글삭제
  5. 네톤이나 톡디 알수없을가요?

    답글삭제
  6. 한국껀 다 카서스 어셈이야 게이들아

    답글삭제
  7. 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

    답글삭제