네트워크 프로그램 리버스 엔지니어링시....

saose의 이미지

네트워크 프로그램을 리버스 엔지니어링 하려고 하는데...
일단 프로토콜을 분석 하는 일입니다.
근데 이게 쉽지 않더라고요.

일단 패킷을 로깅해서 일일이 확인하는데
너무 힘듭니다.

이 데이터가 뭐에 관한건지...
그런 것들을 쉽게 알수 있는 방법 있는지요?
노하우라든지....

LinuxMC의 이미지

리버스 엔지니어링이라.. 당연히 쉬운 일이 아니겠죠.
노하우 라기 보단 자신이 원하는 패킷만 받게끔 조작해주는게 좋겠죠.
일단 규칙적인 패킷이 날라오는 상황을 만들고 그 상황 하에서 자신이 원하는 패킷이 날라오게끔 유도하는 것 이외에 방법이 없습니다 ㅡ_ㅡ;;; 그리고 만에 하나 패킷이 암호화가 되어있다고 한다면 패킷 데이터를 읽는것은 일찌감치 포기하는편이 정신건강에 좋을듯 싶네요 ^^;
음 머 다른 의견들도 많겠지만 저 노하우 이외의 것은 좋은 결과를 얻은것이 없는듯 싶네요 물론 저의 능력안에서겠죠 :)

무제? 무죄!

Necromancer의 이미지

저도 회사 일 때문에 그거 해야 되는데

tcpdump로 패킷 캡쳐한 뒤

MAC layer 분해 툴 만들어서 분해하고

IP layer, TCP/UDP layer, ... 그위의 상위 레이어로 분해할 계획입니다.

TCP/UDP 위는 프로그램 고유의 프로토콜이 되는건 아시겠죠.

아무래도 자신이 원하는 정보를 뽑아내기 위한 툴을 잘 만들어야겠죠.

패킷 데이터를 직접 hex 덤프떠서 눈으로 분해할 생각을 하셨다면 일찌감치 포기하십쇼

TCP 패킷 하나 hex dump 떠서 하나 하나 눈으로 봐 가며 분해하는 것만도 시간 꽤 갑니다.

Written By the Black Knight of Destruction

saose의 이미지

흑기사 wrote:
tcpdump로 패킷 캡쳐한 뒤

MAC layer 분해 툴 만들어서 분해하고

IP layer, TCP/UDP layer, ... 그위의 상위 레이어로 분해할 계획입니다.

그정도는 Iris 사용하면 되지 않을까요?
Filter 기능도 있고, 각 레이어별로 정보 트리로 보여주고.

pynoos의 이미지

saose wrote:
네트워크 프로그램을 리버스 엔지니어링 하려고 하는데...
일단 프로토콜을 분석 하는 일입니다.
근데 이게 쉽지 않더라고요.

일단 패킷을 로깅해서 일일이 확인하는데
너무 힘듭니다.

이 데이터가 뭐에 관한건지...
그런 것들을 쉽게 알수 있는 방법 있는지요?
노하우라든지....


    1. 일단은 IP 어드레스를 십진수로 변환해서 생각하는 일은 버리십시오.
    16진수가 눈에 익숙해지도록 합니다.

    2. 1번을 위해서 16진수 덧셈뺄셈, 구구단(FF단) 등을 평소에 연습합니다.

    3. tcpdump 의 hexdump를 유심히 보아서 일단 IP packet의 위치별 정보는 몇가지 외워둡니다.

    4. switching hub 보다는 dummy hub를 이용한 네트워크에서 tcpdump -n 해놓고 애들이 뭐라고 주고받으면서 넘어가는지 가만히 들여다 봅니다.

    5. wellknown ports는 바로 보고 알수 있을 정도로 외워둡니다.

    6. 사설 IP 대역은 바로 보고 알수있을 정도로 외워둡니다. (가능하면 HEX로도..)

    7. Netmask에 따라 Broad cast와 ARP의 관계를 잘 이해해둡니다.

    8. tcpdump나 snoop 등의 option들은 자유자재의 조합이 될 정도로 훈련합니다.
    Broadcast 캡쳐안하기, 22,23번은 capture 안하기, hexdump하기 capture length 정하기, dest, src port에 따라 캡쳐하기 등은 기본입니다.

    9. Socket State Transition Diagram에 따라 어떤 패킷이 왔다갔다하는지 확인해두기..

    10. netstat, ifconfig, route 명령 자유자재로 사용하기...

생각나는대로 두서없이 적어봤습니다.

hex로 계산하는 것은... 사실 요즘 잠들때 마다, 16진수 덧셈, 곱셈, shift 놀이 하면서 잡니다... 10진수로 전혀 변환하지 않고 익숙해질때까지... -.- :shock:

[/]
지리즈의 이미지

tcpdump도 괜찮지만,
저같은 경우는 dummy gateway를 만들어 사용합니다.

A -> B
일때...

A -> dg -> B

A가 connect request를 하면,
dg는 b에게 connect request를 하고,
b가 connect accept를 하면,
dg는 A에게 connect accept를 해줍니다.
이러한 방식으로 dummy gateway를 만드는 것의 장점은
들어오는 데이터를 자신의 취향에 따라 처리할 수 있다는 점과,
부분부분 주고 받는 패킷의 내용을 변경을 가하여,
예상되는 결과를 유추할 수 있다는 점이 있지요.

어느정도 데이터가 싸이고,
분석결과에 확신이 생기면,
A의 데이터 내용을 중심으로
단독적인 B와의 통신으로 옮겨 가기도 쉬어집니다.

C보다는 보다 신속히 개발할 수 있고, 수정이
용이한 개발툴을 활용하는 것이 좋을 듯 합니다.

There is no spoon. Neo from the Matrix 1999.

choissi의 이미지

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.