일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 개발 환경 준비
- vcruntime140.dll
- windows kernel debugging
- Windows Kernel
- HackCTF
- packet capture
- hacking
- Msvcrt.dll
- Windows Kernel Driver
- pcap packet capture
- arudino
- 시스템해킹
- Windows
- vcruntime.dll
- IAT Hooking
- 포너블
- 네트워크 바이트 오더
- 윈도우 커널 드라이버
- 바이트 오더
- pwnable
- 윈도우 커널
- C언어 패킷캡쳐
- Network Byte Order
- pcap packet
- ucrtbase.dll
- apphelp.dll
- 해킹
- 개발하기
- Windows Kernel Debug
- 윈도우 커널 디버깅
- Today
- Total
미친해커
[Wireshark] Dissector로 프로토콜 만들기 본문
Create a Protocol use Wireshark API
우선 Wireshark(와이어샤크)에서 제공하는 API를 활용해 직접 프로토콜을 정의한다.
MyProto = Proto.new("MyProto", "My Custom Protocol")
Define Dissector of MyProto
새롭게 생성한 프로토콜의 대한 dissector를 정의해준다.
function MyProto.dissector(buf, pinfo, root)
pinfo.cols.protocol = "MY_PROTOCOL"
root:add(MyProto, "MY PROTOCOL DATA", buf(0))
end
dissector 함수의 인자는 총 3개 이며 각각 패킷 데이터, 패킷 정보, 패킷 프레임?이다.
Parameter buf
dissector의 buf는 와이어샤크에서 실질적인 데이터를 버퍼를 가리킨다. (Tvb object)
하지만 이더넷 헤더와 같은 정보들은 포함되어 있지 않다. buf에 들어오는 데이터는 payload만 들어오게 된다.
Parameter pinfo
dissector의 pinfo는 와이어샤크의 패킷의 정보를 표시하는 테이블을 가리킨다. (Pinfo object)
pinfo에는 Number, Time, Protocol 등의 Column의 정보를 수정할 수 있고 또 새로운 Column을 추가할 수 있다. 다음 코드는 Protocol Column의 데이터를 수정한다.
pinfo.cols.protocol = "MY_PROTOCOL"
Parameter root
dissector의 root는 와이어샤크의 패킷의 데이터를 표시하는 트리를 가리킨다. (TreeItem object)
와이어샤크의 중앙에 있는 이 트리는 해당 패킷의 프로토콜에 맞춰서 패킷의 데이터를 보기 편하게 구분하여 보여준다. 우리가 만든 커스텀 프로토콜은 이러한 트리 구조가 등록되어 있지 않기 때문에 아무런 트리가 생성되지 않게 된다. root는 이 트리들이 모여있는 곳을 말한다. 다음 코드는 새로운 트리를 생성하는 코드이다.
root:add(MyProto, "MY PROTOCOL DATA", buf(0))
Set the MyProto
이제는 저 수 많은 패킷중 어떤 패킷이 MyProto에 속하는 패킷인지 설정해야 한다. 해당 방법은 와이어샤크의 필터를 사용하는 방법과 유사하다.
DissectorTable.get("tcp.port"):add(8080, MyProto)
위 코드는 TCP 프로토콜의 포트가 8080일 경우 MyProto로 설정한다는 말이다. 이렇게 설정하게 된다면 8080 포트로 통신하는 모든 TCP 패킷들이 MyProto.dissector 함수를 거치게 된다.
최종 코드
MyProto = Proto.new("MyProto", "My Custom Protocol")
function MyProto.dissector(buf, pinfo, root)
pinfo.cols.protocol = "MY_PROTOCOL"
root:add(MyProto, "MY PROTOCOL DATA", buf(0, buf:len()))
end
DissectorTable.get("tcp.port"):add(8080, MyProto)
마무리
여기까지 Lua 스크립트를 이용해 와이어샤크에 커스텀 프로토콜을 추가해 하위 트리를 생성 그리고 프로토콜의 이름을 수정하는 방법을 알아보았다.
다음 포스팅에서는 우리가 생성했던 하위 트리(MY PROTOCOL DATA)에 Item을 생성하여 데이터를 분류하여 표시하는 방법을 알아보려고 한다.
'Wireshark > Lua Script' 카테고리의 다른 글
[Wireshark] Tree에 Item을 추가해 데이터 시각화하기 (0) | 2022.07.30 |
---|---|
[Wireshark] Lua Script 개발 환경설정 (0) | 2022.07.28 |