일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 성남은혜의강교회
- 김영권
- 금리인하
- 이지혜
- 뭉쳐야 찬다
- 은혜의 강 교회
- 픽크루
- 해킹
- 스페인 코로나
- 김영권 아내
- 학교 개학 연기 4월
- 고민정
- 성남 코로나 확진자
- 미국 금리인하
- 유튜버 김재석
- 홍혜걸
- 제넥신
- 이상형 만들기
- 불가피
- 조희연
- 킹덤 고근희
- libtins
- 리리남매
- 스콜피온킹
- 최강욱
- 이태원 클라쓰 15회 예고
- 김재석
- 폰폰테스트
- 양적완화
- 임영규
- Today
- Total
Dork's port
[C++] LibTins를 통한 802.11 Decrypt(무선패킷 복호화 하기) 본문
오늘은 802.11 패킷을 LibTIns를 통해 복호화 하는 간단한 예제를 알아보도록 하겠습니다.
LibTins에 대한 기초적인 예시가 많이 존재하지 않으므로, 알아가는것을 차츰차츰 포스팅 하도록 하겠습니다.
#include <iostream> #include <tins/tins.h> #include "printdata.h" using namespace Tins; using namespace std; void usage(); bool chkArgc(int argc); bool foo(PDU& packet) { const TCP& tcp = packet.rfind_pdu<TCP>(); // const TCP* tcp1 = packet.find_pdu<TCP>(); reference find // if(tcp.dport()!=80&&tcp.sport()!=80) return true; //parsing HTTP Packet cout<<"TCP Source Port : "<<tcp.sport()<<endl; cout<<"TCP Destination Port : " << tcp.dport()<<endl; const RawPDU& rawPDU = packet.rfind_pdu<RawPDU>(); if(rawPDU.size()>0){ printByHexData((uint8_t*) rawPDU.payload().data(),rawPDU.size()); cout<<"Payload Size : "<<rawPDU.size()<<endl; } return true; } int main(int argc, char* argv[]) { if(!chkArgc(argc)) exit(1); //init 802.11 Sniffer by Promiscuous Modes SnifferConfiguration config; config.set_filter("port 80"); config.set_promisc_mode(true); Sniffer sniffer(argv[1],config); auto decrypt_proxy = Crypto::make_wpa2_decrypter_proxy(&foo); decrypt_proxy.decrypter().add_ap_data("dorkdork","HanBin"); return 0; } void usage() { cout<<"Usage : ./IamU <Monitor mode Interface> <Channel>"<<endl; } bool chkArgc(int argc) { if(argc!=3) { usage(); return false; } return true; }
먼저 Sniffer객체를 이용해 Sniff할 장치를 지정하고, config 객체를 이용해 필터 및 설정을 할 수 있습니다.
그리고 decrypt_proxy 객체를 이용해 패킷이 수신되면 Decrypt를 진행합니다.
이때, 객체의 해당 Password(dorkdork) 및 SSID(HanBin)을 주어야 정상적으로 Decrypt가 진행되므로 알고 있어야 합니다(LibTIns는 패스워드 크래킹을 지원하지 않습니다).
패킷이 수신되고 정상적으로 패킷이 복호화가 되면 지정해준 함수(foo)로 가서 원하는 프로세스를 동작 시킬 수 있으며, 이때 패킷은 PDU의 형태로 지정됩니다.
그리고 foo함수에서 보시는 바와 같이 간단하게 패킷을 parsing하여 이용할 수 있습니다.
위의 예제는 80번 포트의 패킷을 수신(Decrypt)하여 포트를 출력하고 뒤의 데이터가 있다면 해당 데이터를 출력 하는 프로그램입니다.
위의 printByHexData는 제가 작성한 외부 함수(printdata.h)이므로 혼동없으시길 바랍니다. 해당 함수는 아래의 포스팅을 참조하시길 바랍니다.
2017/09/22 - [Develop] - 16진수로 값 출력 및 mac address 출력하기 (C++)
'Develop' 카테고리의 다른 글
[C++] thread invalid use of non-static member function error (0) | 2017.12.09 |
---|---|
[C++] LibTins를 통한 802.11 Packet Sniff (1) | 2017.12.01 |
[C++] 802.11(wireless) 라이브러리 사용하기 (tins Library 사용하기) (0) | 2017.11.20 |
[C++] MAC Address 저장하기 (0) | 2017.11.02 |
Class function과 const (0) | 2017.10.26 |