yummyKit - Hacking Tool

[yummyKit] 브리핑 3일차

yummyHit 2017. 9. 29. 21:20

※주의사항※
연구 목적으로 작성된 것이며, 허가 받지 않은 공간에서는 테스트를 절대 금지합니다. 악의적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신한테 있습니다. 이는 해당 글을 열람할 때 동의하였다는 것을 의미합니다.

 

1...10일만에... 쿨럭... 죄송해여ㅜㅠ 슬럼프인가바여.. 요즘 라즈베리파이에 [vpn server] - [ddns server] - ['AngularJS + Firebase' Web Server] 하다보니 정신이없네여ㅜㅠ 웹은 정녕 재밌으면서도 하기싫숩니다...헿헤 우리 전공은 역시 취존아닌가여!? 전 시스템/네트워크가 좋다구여!!

넵... 그래도 반성해야져 ㅜㅠ공부 더 열씸히 하고!! 밥도 묵고!! 다해야져!!

 

 

크 갓민식.. 연기를 어쩜 이렇게 실제처럼 할 수 있을까여 넘나 멋찐것~

최근에 yummyKit을 대폭 수정해써여!! 사실 제가 저번에 yummyKit을 오랜만에 보니까 막 strncmp() 함수와 strncpy() 함수, sprintf() 함수를 사용해도 되는 부분인데 함수를 직접 만들어서 무슨 flag_check() 라는 함수와 filter() 라는 함수를 만들었더라구여... 그래서 싹다 없애고 고치려고 했더니!!

뚜둔!! QT에서 u_char * 자료형과 const char * 자료형이 변환될 수 없다능 ㅜㅠㅜ GCC에선 되던 것인데 슬프네영... 그래서 다시 살려두고 변수 명만 축약하면서 코드 간결화를 수행해써여!!

두 번째로 중간 중간 오류가 있더라구여ㅜㅠ 같이 카페에서 밤새준 친구가 발견해주어서 그 부분들 싹다 고쳤더니 이쁘게 잘 돌아가여!!

 

이렇게 말씀드려도 아직 제 코드 리뷰를 안했으니 모르시겠져?! 늉늉.. 나중에 다시 읽어주신다면 아하! 그말이구나! 하고 아시리라 믿어여!

오늘은 먼저 이 전 포스팅에서 설명드린 HTTP GET 헤더를 갖고있는 pcap 파일을 이용해서 패킷 분석하는 코드를 구현해보려고 해요.

넵? pcap 파일이 뭐냐구여?

 

Packet CAPture 의 줄임말이예요! Wireshark와 같은 패킷 분석 프로그램을 이용해서 캡쳐된 패킷을 저장할 때 저장되는 확장자로 .cap / .pcap / .pcapng가 있어요. cap은 capture일테고.. pcap은 packet capture일텐데... ng는 머징?!

Next Generation이라고 하네용! 이제 차세대에서는 pcap 확장자보다 pcapng 확장자를 사용하겠다는 것 같아여!

 

먼저 테스팅용 HTTP_GET pcap 파일을 드릴게여! 이 파일을 이용해서 이제 코드를 구현해 볼 거예요!

 

httpGet.pcap

 

이 파일을 와이어샤크로 보시면 어랏!!? 이 전 포스팅에서 설명드린 HTTP_GET 헤더와 같은 패킷인 것을 확인하실 쑤 있어여!!

사실 저 패킷을 마구 뿌리는 이유는 현재 폐기된 노트북이자.. 사설 IP임을 인지 하셨다면 어딘가의 NAT일테니깐여 ㅎ핳하하.. 아마 괜찮겠져? 소심.. ☞☜

그리고 코드를 구현하기 위해선(여러분의 대다수가 윈도우 사용자라고 생각할게여! 그 외 야미가튼 맥뿍유저나 리눅스 유저는 헤더, 라이브러리, 컴파일 방법(gcc에서 옵션이 붙어요!), 함수 명 등이 다르기 때문에 정말 필요한 부분은 알려드릴게여!

 

먼저 Visual Studio(저는 Visual C++ Express 2010 버전을 너무나 사랑한답니닿ㅎㅎ제일 편하더라구여)에서 pcap 라이브러리를 포함하기 위해 winpcap 사이트로 가서 다운로드를 받아야해요. 절대 위험한 것이 아니니 절 믿고 다운로드 받으셔두 된답니당 ㅜㅠ 저 그렇게 못미더운 사람 아니겠져..?

 

https://www.winpcap.org/devel.htm

 

위 URL로 이동하시면 아래 그림같은 페이지로 이동하는데, 여기서 첫 번째로 있는 Developer Pack Download를 진행해주시면 됩니당!

 

 

그냥 무작정 winpcap 홈페이지에 들어가 눈 앞에 보이는 download를 클릭하시면 와이어샤크용 pcap 라이브러리밖에 되지 않아여ㅜㅠ 개발자 라이브러리가 있어야 한다구욧!!

이제 다운로드 후 압축을 풀어주시면 WpdPack이라는 폴더가 튀어나오는데, 이 폴더를 편하신 경로에 넣어주세요! 어차피 어느 경로든 그 경로 적어야하니까 그냥 편하신 곳에 두시는 게 낫지 않나~ 싶어요!

만약 '나는 Visual Studio 라이브러리와 헤더파일이 있는 곳에 같이 두고 싶다!' 하시는 저같은 변태분들이 계시다면...

 

"C:\Program Files(x86)\Microsoft Visual Studio 버전\VC" 디렉토리 안에 두시면 됩니당!

 

여기서 버전은 2010 10.0 / 2012 & 2013  12.0 / 2015 14.0 / 2017은 16.0인가여? 못찾겠네여 ㅜㅠ

 

자! 이제 개발자용 winpcap을 받았으니, Visual Studio에서 설정해봐야겠져!? 그 전에 먼저 http_get_test와 같이 알아볼 수 있는 프로젝트명으로 프로젝트를 생성해봅씨다!!(앞으로 할 코딩에서도 계속 winpcap 라이브러리 종속성이 필요하기 때문에 차라리 pcap_test와 같이 프로젝트 명을 만들고 소스파일만 추가해서 실행하는 방법으로 하는게 더 나을 것 같아요!)

 

프로젝트를 만드셨따면!! 자 이제 프로젝트 환경설정을 해봅씨다!!

pcap.h 헤더파일을 include 하는 방법으로는 두 가지가 있어요. 첫 번째로는 절대경로를 이용하는 방법이 있지요!

 

#include "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\WpdPack\Include\pcap.h"

 

크... 뭐 pcap.h 헤더 하나 추가하려고 저렇게 길게 써야하나여... 절대경로가 있다면 상대경로방법도 있지 않을까여!?

상대경로는 현재 소스파일이 위치한 곳부터생각하셔야해요! 기본적으로 "C:\Users\사용자명\Documents\Visual Studio 버전" 디렉토리 안에 프로젝트 폴더가 위치할텐데, 만약 변경하셨다면 그 위치로 가셔서... 못찾으시겠다구여? ㅜㅜ 어쩔 수 없이 C:\에서 Ctrl + F를 살포~시 눌러 프로젝트 이름을 검색해보세영...

자 그럼 상대경로를 이용하면 어떻게 헤더파일을 추가할 수 있을까여?

 

#include "..\..\..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio 10.0\VC\WpdPack\Include\pcap.h"

 

더 길어진 것 같은 느낌... 만약 WpdPack 폴더를 프로젝트 안에 넣으셨다면 "..\..\WpdPack\Include\pcap.h" 로도 가능하실 것 같네여!

 

사용할 때마다 이렇게 길고 긴 경로를 적어주긴 싫지 않나여?! 아님 말구영... 쭈굴...

 

메뉴 표시줄 → 프로젝트 탭 → 가장 아래의 '프로젝트 속성' → 구성 속성 → VC++ 디렉터리 → '포함 디렉터리' 부분의 옆 칸 클릭하면 [...] 버튼 혹은 [편집] 버튼이 있는데 클릭 → 위치한 WpdPack\Include 폴더까지 기재(예를 들어 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\WpdPack\Include 처럼 기재하시면 돼요!) → 확인 클릭

 

 

이로케 야미의 사용자명과 WpdPack 폴더 경로가 들통나다닛... 여러분을 위해 이 한몸 바쳐..

자 드디어 pcap.h 헤더파일은 이 프로젝트 내에서 언제 어디서든 사용할 수 있게 되었답니다!! 다른 헤더파일 속성 추가하실 때에도 위와 같이 해주시면 되니 참고하세여!!

이제 드디어 pcap 개발자 모드를 사용 할 수 있는 거신가..!! 했더니 라이브러리가 필요하대여 늉늉...

개발자의 고생은 환경설정부터인가 봅니다 T^T

라이브러리 추가하는 것은 헤더파일 폴더 추가하는 것과 또오오옥 같아여!! 단지 Include 폴더가 아닌 Lib 폴더일 뿐이구, 추가해야 하는 부분이 '포함 디렉터리'가 아닌 '라이브러리 디렉터리'라는 것이 다를 뿐이져!!

 

 메뉴 표시줄 → 프로젝트 탭 → 가장 아래의 '프로젝트 속성' → 구성 속성 → VC++ 디렉터리 → '라이브러리 디렉터리' 부분의 옆 칸 클릭하면 [...] 버튼 혹은 [편집] 버튼이 있는데 클릭 → 위치한 WpdPack\Lib 폴더까지 기재(예를 들어 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\WpdPack\Lib 처럼 기재하시면 돼요!) → 확인 클릭

 

 

이제 pcap 개발자모드가 완성!! 된 것 같지만 정말정말 마지막으로 두 개 남았어여!! 포기하지 마세여!!(하나라고 할 줄 알았져? 꺌꺌.. 죄송해여 미쳤나바여 헿)

너무 귀츈하져? ㅜㅠ 이거 한 번만 해두면 이제 남은 포스팅동안 하실 필요 없으니 걱정마세여!!(물론 프로젝트를 새로 생성하거나, 프로그램을 새로 설치하거나.. 그럴 때엔 다시 설정해주셔야 할 것입니다 핳하)

 

오늘은 너무 딱딱한 것 같나여? 쵸큼 더 스무쓰하게.. 라고 하기보단 아직 프로젝트 속성만 설정중이고 코딩은 시작도 못했네여!? 끄아아 이러다 스압이 되면 사람들이 싫어할텐데 말이예여!! 최대한 스압을 아끼고자.. 재미가 없더라도 빨리빨리 속성부터 마무리 해보아여!

 

메뉴 표시줄 → 프로젝트 탭 → 가장 아래의 '프로젝트 속성' → 구성 속성 → C/C++ → 전처리기 → '전처리기 정의' 부분의 옆 칸 클릭하면 [...] 버튼 혹은 [편집] 버튼이 있는데 클릭 → HAVE_REMOTE 와 WPCAP 기재 → 확인 클릭

 

 

뭔가 보다보니 위 세 개의 사진 크기가 제각각인 것 같지 않나여? 넵.. 저는 크기를 고려하지 않고 이정도면 되겠지~ 하고 줄여버려서 이런 불상사가 일어나게 된 것입니당 ㅜㅠ 막 사는 야미네영 늉늉

전처리기란 무엇이게~~요!

 

#define 하면서 먼저 정의해 주는 것들, 프로그램이 시작되기 전 미리 컴파일되는 것들을 전처리기라고 불러여! 종류로는 #include, #ifndef, #define, #endif, #pragma, ... 등등 많습니당! 한 번 찾아보세여!

 

그리고 이제 딱 하나남았네여!! 링커에 추가 종속성을 넣어주는 것인데, 이 방법으로는 두 가지 방법이 있어여! 아까 절대경로, 상대경로, 포함 디렉터리로 #include 하는 방법이 있듯이 이 방법도 2가지가 있지용!

 

먼저, 메뉴 표시줄 → 프로젝트 탭 → 가장 아래의 '프로젝트 속성' → 구성 속성 → 링커 → 입력 → '추가 종속성' 부분의 옆 칸 클릭하면 [...] 버튼 혹은 [편집] 버튼이 있는데 클릭 → wpcap.lib 기재 → 확인 클릭

 

 

요로케 넣어주시는 방법이 있구여!! 다른 하나는 전처리기를 이용하는 방법인데, 이것은 pcap 라이브러리를 이용해야 하는 소스파일마다 넣어줘야하는 단점이 있어여 ㅜㅠ

 

#pragma comment(lib, "wpcap.lib")

 

매 소스파일 상단부에 적어주시면 됩니다!(저는 #include 다음으로 적는데, 첫 번째 라인부터 #pragma 사용하시는 분들도 많더라구여... 저는 완벽한 개발자가 아니기 때문에 정답은 모릅니당 ㅜㅜ)

자!! 드디어 환경설정이 빠밤~ 끝났어여!! 환경설정이 끝나면 뭐하냐구여? 코딩해야져 코딩코딩!!

 

winpcap 홈페이지에서 문서로 주어지는 예제들이 있어요. 이 예제들을 참고해서 먼저 연습해보신다면 좋을 것 같아요!!

URL로 남겨드릴게여!

 

winpcap의 함수들 : https://www.winpcap.org/docs/docs_412/html/group__wpcapfunc.html

winpcap 함수 사용법 및 예제 : https://www.winpcap.org/docs/docs_40_2/html/group__wpcap__tut4.html

 

제가 네트워크를 강의할 때 여기까지 알려준 후 '다음 주까지 httpGet.pcap 파일 분석하는 프로그램 만들어서 보내라'고 하는데... 여러분께는 그럴 슈가 업네영 ㅜㅠ

이 전 포스팅에서 HTTP_GET 헤더 분석한 것처럼 출력시켜주면 됩니다! 저두 처음 시작할 때 저 사이트에서 튜토리얼 따라 다 해보고.. 바꿔보고.. 요로케하는구나! 조로케하는구나! 하면서 했었어요.

 

 

크... 이게 벌써 1년 2개월 전이라니 싱기방기하네영! 참 여기서 소스파일에 빨간색 뜨는 것은 프로젝트에서 빌드 제외하는 속성이예요!

제가 이번 포스팅에서 프로젝트 생성할 때 말씀드렸던 "차라리 pcap_test와 같이 프로젝트 명을 만들고 소스파일만 추가해서 실행하는 방법으로 하는게 더 나을 것 같아요!" 라는 구문 기억나시나영!? 아.. 넵.. 기억하실 필요 없져.. 이런 말 했었어여..

프로젝트 빌드에서 제외를 하면 컴파일 / 빌드할 때 제외된 파일은 제끼거든여!(제낀다는 말 옛날 말 같은데... 아재 하앍...)

그렇게 한 프로젝트에 여러 소스파일을 넣어서 편리하게 정리해두면서 사용할 쑤 있게 되는거져!!

 

솔루션 탐색기(혹시 솔루션 탐색기가 없으신 분들은 보기 탭 → 다른 창 → 솔루션 탐색기 클릭하시면 됩니당!) → 소스파일 마우스 우 클릭 → 속성(단축키 R) → 구성 속성 → 일반 → '빌드에서 제외' 부분의 옆 칸 '아니오/예' → 확인 클릭

 

 

빌드에서 제외가 '예'로 되어있으면 컴파일 및 빌드를 실행하지 않는 것이고, '아니오'로 되어있으면 컴파일 및 빌드를 하는 것이니 실행이 되는 소스파일이라는 것이죠!!

 

오늘 코딩을 더 나가려고 했는데 T^T 죄송해여 속성 설정만 하다가 하루가 지날 줄이야... 제가 드린 winpcap 예제를 통해 한 번 실습해보시구, 이 다음 포스팅에서 예제 리뷰와 저의 첫 HTTP_GET 헤더 분석 프로그램 소스를 보여드릴게여!! 그럼 마지막으로 열 코딩하실 여러분을 위해 코딩짤을 보여드리며 다음 포스팅에서 뵐게영!!!