2009-11-16 5 views
1

인기있는 네트워크 용 채팅 클라이언트를 작성하려고합니다. 원래 클라이언트는 독점적이며, 원하는 것보다 약 15GB 더 큽니다. (공정하게하려면 다른 게임이라고 부릅니다.)서버의 소스 코드에서 네트워크 프로토콜을 어떻게 추출합니까?

인터넷 프로토콜에는 사용할 수있는 설명서가 전혀 없으며 대부분의 검색 결과는 클라이언트의 스크립팅 인터페이스로 만 제공됩니다. 나는 잘못된 방식으로 사용 되었기 때문에 다른 사람들의 경험을 망칠 수 있음을 이해할 수 있습니다.

  • 저조한 주석
  • 내가 연결할 것을 포함하여 다른 서버의 몇 가지의 소스 코드를 다운로드 한

    , 그러나 그

    • 지침을 설치 이외의 어떤 문서를 포함하지 (I 한 피상적 브라우징)
    • 이 거대은 (대상 서버의 src 폴더 .cpp의 가치 12메가바이트 및 .h 파일)을 포함하고, grep 관련 내용을 찾지 못 하셨나요

    나는 또한 그들의 포럼을 검색하고 서버의 유지 보수 담당자에게 연락을 시도했지만, 지금까지는 운이 없다.

    프로토콜이 암호화에 크게 의존하기 때문에 패킷 스니핑이 도움이되지 않습니다.

    이 시점에서, 모든 희망은 경건하지 않은 양의 코드를 씹을 수있는 나의 능력입니다. 어떻게 시작합니까?

    편집 : A related question.

    답변

    3

    원본 코드가 OpenSSL 또는 Crypto ++와 같은 잘 알려진 라이브러리로 암호화 된 경우 이러한 라이브러리의 기본 진입 점에 대한 래퍼를 작성한 다음 실제 라이브러리 호출을 지연시키는 것이 유용 할 수 있습니다. 그러한 대체 작업을 수행하고 프로젝트를 성공적으로 빌드하면 일반 텍스트 방식으로 나가는 모든 것을 추적 할 수 있습니다.

    프로젝트에서 타사 암호화 라이브러리를 사용하지 않는 경우 암호화 루틴을 입력 코드를 추적하고 실제 코드에 위임하는 일부 래퍼로 대체 할 수 있기를 바랍니다. 일반적으로 상대적으로 적은 수의 소스 파일에 일반적으로 enctyption을 구현하므로 이러한 파일의 입출력을 쉽게 추적 할 수 있어야합니다.

    행운을 빈다.

    2

    나는

  • 이 명령의 참고 문헌을 찾아 거기에서 풀다 (호출이 네트워크 라이브러리에 따라 다름) 소켓을 통해 데이터를 전송하는 데 사용되는 명령을 찾을 수

    1. 을 말할 것입니다. 서버 코드를 수정하거나 다시 컴파일 할 수 있다면 도움이 될 것입니다.

    한편, 해독 된 (또는 아직 암호화되지 않은) 네트워크 활동을 기록 할 수 있습니다.

  • 1

    IMO, 가장 좋은 대답은 대체 서버의 소스 코드를 읽는 것입니다. 좋은 C++ IDE를 사용해보십시오. 그것은 많은 차이를 만들 것입니다.

    이해해야 할 프로토콜 관련 자료가 파일의 하위 집합으로 제한 될 수 있습니다. 여기에는 네트워크 소켓 및 사물에 대한 참조가 포함됩니다. 거기에서 시작하여 필요한만큼 바깥쪽으로 작업하십시오.

    0

    가능한 접근법은 이것을 암호화 시도로 처리하는 것입니다. 그렇게하면 쉽게 제어 할 수 있기 때문에 쉽습니다.

    예를 들어, 현재 클라이언트를 사용하여 알려진 메시지를 서버에 보내고 서버 메모리에서 해당 문자열을 확인할 수 있습니다. 문자열이 끝나는 객체를 찾으면 코드를 통해 그 조상을 추적 할 수있게됩니다. 개체의 const가 아닌 메서드에 중단 점을 설정하고 스택 추적을 찾습니다. 이렇게하면 메시지가 서버에 도착하는 방식과 메시지 처리에 필수적인 핵심 기능 목록을 실시간으로 볼 수 있습니다. 다음으로 관련 기능 (목록에있는 기능의 발신자/수신자)을 찾을 수 있습니다.