예전에 한번 0xCC를 이용하여 함수 스니핑에 관한 글을 읽은 적이 있습니다.

실제로 개발하고 디버깅하면서 원리는 대충 알고 있었지만 한번은 그대로 만들어 보고 싶어서  간단히 만들었습니다.
중간 중간 원문에 기술되어 있는 코드가 애매하거나 적절하게 구현되어 있지 않은 부분이 있어 codewiz님으로 부터 조언을 듣고 만들었습니다.

다만 WS2_32.DLLrecvsend 에만 0xcc 를 박기 때문에 다른 API 를 통해서 통신을 하게 된다면 스니핑을 할 수 없다는 것이 아쉽습니다.

간단히 사용방법을 알려드리겠습니다.

사용자 삽입 이미지

먼저 실행시키면 위와 같습니다.
네트워크 패킷을 감청할 프로그램을 선택해야 합니다.
만약 스파이넷을 실행시키고 난중에 실행시킨 거라면 새로고침을 클릭하여 목록을 갱신합니다.

사용자 삽입 이미지

테스트에 참여해줄 프로그램은 P2P 프로그램인 파일구리입니다.
파일구리 메인 실행프로세스인 filegurimain.exe 를 선택합니다.

사용자 삽입 이미지

그리고 시작 버튼을 누르면 스파이넷은 파일구리의 send(), recv() 함수에 0xcc를 박아서 이 함수를 사용할 때 프로그램 실행을 중단하고 파일구리의 통신 내용을 볼 수 있게 합니다.


사용자 삽입 이미지

위의 화면은 파일구리에 id/pass 를 입력하고 로그인 버튼을 눌렀을 때 입니다.
제가 살펴본 바로는 id/pass 를 암호화 하여 서버로 전송하더군요.
이 상태에서 변조도 가능하겠지만.. 악용의 소지가 다분하여 기능을 추가하지 않았습니다.
여기서 계속 버튼을 누르면 파일구리가 다시 작동하게 됩니다.
다만 너무 오랫동안 있으면 파일구리는 통신이 되지 않는 다면서 이상한 말을 내 뱉으니
퍼뜩 계속 버튼을 눌러야 됩니다.

사용자 삽입 이미지

그럼 서버에서 로그인을 처리하고 결과를 보내옵니다.

사용자 삽입 이미지

그리고 감청을 끝낼 때에는 반드시 분리 버튼을 클릭해서 끝내야 합니다.
디버깅상황에서 디버거가 종료되면 디버기도 종료되기 때문에 반드시 분리버튼을 클릭하세요.

애초에 네이트온 오프라인 유저를 판별하기 위한 방법으로 사용하려고 했습니다만 초기 네이트온이 버전을 업데이트 하면서 초기에 오프라인으로 로그인하는 유저를 식별하는 X 플래그를 사용하지 않고 그냥 오프라인 플래그인 F 를 사용하는 것으로 통일하는 바람에 클라이언트 단에서는 프로토콜 상으로 오프라인 표시로 로그인 하는 유저를 판별하는 것이 불가능하게 되어 버렸더군요. ^^;

머.. 어쨋든 기능상으로는 구현을 다 한 것 같아 이 부분에 대해서는 손을 떼야겠습니다.

( 원문 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=7097&ref=7097 )


첨부파일은 단일 실행파일이며 어떠한 정보도 외부로 전송하지 않습니다.
임의의 파일을 새로 생성하지 않으며 임의의 정보를 레지스트리에 기록하지 않습니다.




Basic
Minimum of 4 years of C++ development.
Extensive knowledge of object oriented design, concurrency and multithreading.
Outstanding problem-solving skills and demonstrated experience with debugging and diagnostic tools.
Solid knowledge of software engineering processes for building enterprise scale, commercial applications is required.
Demonstrated ability to understand, refactor and extend large bodies of code.
Excellent written and verbal communication skills are required
Proven track record of producing quality estimates and subsequent implementations that meet those estimates
Proven ability to work effectively in a team environment
BS/MS in Computer Science or equivalent knowledge and experience is required.

Kernel Mode Development
Minimum of 2 years experience with kernel mode development on the Windows platform
Strong knowledge of Windows XP and Windows Vista internals is required; other OS internals experience is a plus.
Experience writing kernel mode drivers and interacting with the OS at the kernel level.
Strong debugging skills in kernel mode are desired.
Deep understanding of system services in kernel mode.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기