Programing

fps 게임에서 조준 봇은 어떻게 작동합니까?

lottogame 2020. 11. 15. 10:52
반응형

fps 게임에서 조준 봇은 어떻게 작동합니까?


Counter-Strike와 같은 온라인 FPS 게임에서 조준 봇에 대한 경험 / 지식이있는 사람이 있는지 궁금했습니다. 나는 호기심이 많고 커서가 상대 플레이어를 고정하는 방법을 어떻게 알고 있는지 자세히 알고 싶습니다. 분명히 내가 속임수를 쓰고 싶다면 속임수를 다운로드하여 배우는 것이 더 많습니다. 그것에 관련된 모든 것은 무엇입니까? 커서를 올바른 위치로 이동하기 위해 사용자의 마우스 / 키보드를 연결합니까? 치트 응용 프로그램은 정확히 커서를 가리키는 위치를 어떻게 알 수 있습니까? 치트 앱은 게임 애플리케이션 내의 데이터에 액세스 할 수 있어야합니다. 어떻게 수행됩니까?

편집 : sids 대답에 사람들은 데이터를 가져 오기 위해 알려진 메모리 위치를 어떻게 얻습니까? EDIT2 : 디버그 프로그램이나 다른 수단을 사용하여 0xbbbbbbbb 위치에서 원하는 값을 찾았다 고 가정 해 보겠습니다. 내가 그 메모리를 소유하고 있지 않기 때문에, 게임은 이제 어떻게 응용 프로그램 내의 해당 위치에 저장된 데이터에 액세스하고 사용합니까? 아니면 프로세스에 주입 했으므로 이제 액세스 할 수 있고 memcpy 등을 사용하여 해당 주소의 메모리를 복사 할 수 있습니까?

추가 할 사람이 있습니까? 이것에 대해 가능한 한 많이 배우려고!


게임 메모리 어딘가에는 각 플레이어의 X, Y, Z 위치가 있습니다. 게임은 플레이어의 모델을 렌더링 할 위치 등을 알 수 있도록이 정보를 알아야합니다 (비록 플레이어에 대한 플레이어 정보 만 전송하여 게임 클라이언트가 알 수있는 정도를 제한 할 수 있음).

조준 봇은이 정보에 대해 알려진 메모리 위치를 스캔하고 판독하여 플레이어와 적의 두 위치에 액세스 할 수 있습니다. 두 위치를 (벡터로) 빼면 두 위치 사이의 벡터가 제공되며 플레이어의 현재 룩 벡터에서 원하는 각도 벡터까지의 각도를 계산하는 것이 간단합니다.

게임에 직접 입력을 보내고 (이것은 사소한 일입니다) 일부 상수를 사용하여 미세 조정하면 자동으로 매우 빠르게 조준 할 수 있습니다. 프로세스에서 가장 어려운 부분은 위치가 메모리에 저장되는 위치를 파악하고 플레이어를 이동시키는 동적 데이터 구조 (예 : 절두체 컬링)를 조정하는 것입니다.

불가능하지는 않지만 주소 무작위 화를 사용하면 쓰기가 더 어렵습니다.

편집 : 프로그램이 다른 프로그램 메모리에 어떻게 액세스 할 수 있는지 궁금하다면 일반적인 방법은 DLL 주입을 사용하는 것 입니다.

편집 : 이것은 여전히 ​​일부 히트를 받고 있기 때문에 조준 봇이 작동하는 방법이 더 많이 있으며 현재 더 인기가 있습니다. 즉, Direct3D 또는 OpenGL DLL을 덮어 쓰기 (또는 제자리에 패치)하고 지오메트리를 그리는 함수 호출을 검사하고 자신의 지오메트리를 삽입 (월-핵과 같은 경우)하거나 aimbot의 모델 위치를 가져옵니다.


흥미로운 질문-정확히 답은 아니지만 Counter-Strike의 초기에 사람들이 opengl32.dll을 벽을 통해 볼 수 있도록 다각형을 투명하게 렌더링하는 잘못된 것으로 바꾸 곤했던 기억이납니다.

해킹이 개선되고 더 짜증이 나고 사람들은 더 창의적이되었습니다. 이제 Valve / Steam은 그것들을 제거하는 데 좋은 일을하는 것 같습니다. 이 물건을 가지고 플레이 할 계획이라면 약간의 경고 만하시면 Steam에서 '핵'을 검색하고 발견되면 영구적으로 차단합니다.


많은 "조준 봇"은 조준 봇이 아니라 트리거 봇입니다. 조준선이 실제로 목표물 위에있을 때까지 대기하고 자동으로 실행되는 백그라운드 프로세스입니다. 이 작업은 여러 가지 방법으로 수행 할 수 있지만 많은 게임에서는 대상이 누군가를 지나갈 때마다 누군가의 이름을 표시하거나 트리거 봇이 지적 할 수있는 메모리의 다른 데이터를 표시하여 쉽게 수행 할 수 있습니다.

이런 식으로, 당신은 당신의 목표에 마우스를 흔들어 플레이하고 그들 위에 마우스를 올리 자마자 실제로 직접 발사하지 않고도 발사를 트리거합니다.

그들은 여전히 ​​메모리에서 그런 종류의 물건을 정확히 찾아 낼 수 있어야하고 더 진실한 "조준 봇"이하는 것과 같은 종류의 문제를 가지고 있어야합니다.


과거에 사용 된 또 다른 방법은 네트워크 패킷 형식을 리버스 엔지니어링하는 것입니다. 패킷 스트림에 대한 중간자 (man-in-the-middle) 공격 (게임이 실행되는 동일한 시스템에서 수행 될 수 있음)은 플레이어 위치 및 기타 유용한 관련 정보를 제공 할 수 있습니다. 위조 된 패킷은 게임에 따라 플레이어를 이동하거나 쏘거나 모든 종류의 작업을 수행하기 위해 서버로 전송 될 수 있습니다.


여기 에서 Fleep의 튜토리얼 시리즈를 확인 하십시오 . 그의 주석이 달린 C # 소스 코드는 여기에서 다운로드 할 수 있습니다 .

간단히 말해서
플레이어의 xyz 좌표, 커서 xy 좌표 및 모든 적 xyz 좌표를 찾습니다. 당신과 가장 가까운사이의 거리를 계산하십시오 . 이제 자동 조준을 얻기 위해 필요한 xy 커서 좌표를 계산할 수 있습니다.

또는 죽은 적을 제외 할 수 있으므로 (건강은 0)이 경우 적의 건강 주소도 찾아야합니다. 플레이어 관련 데이터는 일반적으로 메모리에서 서로 가깝습니다.

이 모든 것이 어떻게 작동하는지 자세히 알아 보려면 다시 소스 코드를 확인하십시오.


편집 : 나는이 주제를 벗어난 것을 알고 있습니다. 미안하지만 이것이 질문자를 도울 것이라고 생각했습니다.

해킹 업계가 시도해 보지 않았지만 제가 실험 해본 것은 소켓 하이재킹입니다. 실제보다 훨씬 더 많이 들릴 수 있지만 기본적으로 WinPCap 드라이버를 사용하여 프로세스 오프셋에 근접하지 않고 TCP (소켓)를 통해 프로세스의 인터넷 연결에 연결합니다.

그런 다음 TCP 신호가 전송되는 방식을 배우고 해시 테이블 또는 멀티 플레이어 (패킷) 클래스에 저장하기 만하면됩니다. 그런 다음 정보를 검색하고 정보를 창 (후킹되지 않음) 위에 오버레이하고, 창 게임의 화면 위에 투명한 레이블과 2D 상자 만 표시합니다.

저는 Call of Duty 4에서 테스트를 해왔고 TCP를 통해 4 명의 플레이어의 위치를 ​​얻었지만 Ron Warholic이 말했듯이 게임 개발자가 게임 서버 만 작성하면 모든 해킹 방법이 작동하지 않습니다. 현재 사용자가 플레이어를 봐야 할 때 플레이어를 출력합니다.

그리고 잘라낸 후 XYZ 및 플레이어에 대한 해당 플레이어의 위치 전송은 더 이상 저장되지 않으며 월핵을 중지하기 위해 렌더링되지 않습니다. 그리고 aimbots는 어떤 방식으로 스톨 작동하지만 효율적이지 않습니다. 어쨌든, 만약 당신이 월핵을 만들고자한다면, 그 과정에 얽매이지 말고, WinPCap을 배우고 인터넷 신호에 연결하려고 노력하십시오. 게임의 경우 인터넷 전송을위한 프로세스 목록을 검색하지 마십시오. 이것을 활용하는 예제가 필요하다면,지도에 플레이어의 위치를 ​​출력하고 인터넷 전송 TCP를 통해 전송되고 게임에 연결되지 않은 주변의 다른 플레이어도 출력하는 Rust Radar를 검색하십시오.

참고 URL : https://stackoverflow.com/questions/1749597/how-do-aim-bots-in-fps-games-work

반응형