본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]이상만_110927

by 알 수 없는 사용자 2011. 9. 28.
728x90
반응형

PROTOCOL

전체소스 보기


소스분석하기

네트워크 디바이스 열기

man pcap의 내용

 

pcap_t *pcap_open_live(char *device, int snaplen, int promisc, int to_ms, char *ebuf)

pcap_t *stpNIC

pcap_open_live(cpNIC_name,1500,1,0,errbuf);

 인자값 설명

1)char * device : cpNIC_name

– device 인자에 디바이스 이름(예, eth0, hme())을 지정


2)int snaplen : 1500세팅

- snaplen은 캡쳐할 크기

TCP 헤더를 캡쳐할 경우 : 이더넷 헤더 +IP헤더+TCP헤더


3)int promisc : 1세팅

– promisc

0 : 목적지가 자신인 패킷, 브로드캐스트 패킷, 멀티캐스트 패킷을 캡쳐

1 : promiscous 1 : promiscous 모드로 설정되어 전송되는 모든 패킷((모든 이더넷  프레임))

을 캡쳐


4)int to_ms : 0세팅

– to_ms는 ms 단위의 시간인데 네트워크 디바이스에 패킷이 도착했을

때 커널이 이를 즉시 읽지 않고 잠시 기다리는 타임아웃 시간을 지정

커널이 한번의 읽기로 많은 패킷을 가져오게 한다

0이면 충분한 패킷이 도착할 때까지 대기한다.


5)char *ebuf : errbuf

– ebb fuf는는 에러발생시 에러 원인을 저장

– 성공하면 디바이스 디스크립터를 리턴하고, 실패하면 NULL을 리턴

 

네트워크 디바이스 닫기

pcap_close(stpNIC)

열었던 장치 eth0을 닫습니다

 

네트워크 정보 읽어오기

ucpData = pcap_next(stpNIC, &stInfo);

pcap_next() 함수는 자동으로 콜백 함수를 호출하지않고 캡쳐한 패킷 자체를 u_char 타입의 포인터로 리턴한다

이제 컴파일을 하겠습니다

gcc o test test.c MSDFunction.o lpcap

참고>>

-lpcap의 의미는

-l : 라이브러리를 추가시켜라 그건 pcap이야~~라는 의미입니다

BUT warning이 발생하였습니다!!!

헤더파일에 type이 일치하지 않는 것을 확인하기 위해

vi /usr/include/pcap/pcap.h를 해서 해더파일을 열었습니다

const가 있는 것을 확인 할 수 있습니다

다시 수정하고 실행하니 정상적으로 출력하였습니다

SUCCESS!!

자 이제 수업시간에 좀 해매었던 부분입니다

 

루트계정에서의 컨트롤

cd /home/ 계정확인

 

uec를 확인 하였습니다 이제 uec로 복사를 합니다

LINUX 명령어 복습

cp 대상파일 대상디렉토리

cp test / (test를 루트에 복사하라)

 

복사를 하고 루트로 이동후

su – uec합니다 그럼 $표시가 보이는 것을 확인 할 수 있습니다

sudo와 su의 차이

sudo를 사용하면 패스워드 노출을 막을수 있습니다.

sudo

root 권한을 필요로 하는 프로그램을 실행하였을 때, sudo 는 여러분의 일반 사용자 패스워드를 입력할 수 있도록 물어볼 것입니다. 이 것은 악의적인 프로그램이 시스템을 손상시킬 수 없도록 확인하고, 여러분이 주의가 필요한 관리적인 동작을수행하는 것에 대하여 상기하도록 도와 줍니다. 명령어 줄을 사용할 때 sudo 를 사용하려면, 실행할 명령어 앞에 "sudo" 라고 간단히 입력하십시오. sudo 는 여러분의 패스워드를 묻게 될 것입니다.

많은 사람들이 su가 ‘super user'를 의미하는 말로 생각하지만, 사실 ’substitute user'를 의미합니다

계정을 전환한다는 의미에 가깝습니다 uec계정으로 전환하면서 $로 전환된것을 확인 할 수 있습니다

ls –al

-rwx------일 경우 chmod 777 test로 속성값을 변경하여 줍니다

chmod 그것이 알고싶다!!!!

사용방법 chmod [옵션] 파일이름
7 rwx 읽기,쓰기,실행
5 r-x 읽기,실행
4 rw- 읽기,쓰기
3 -wx 쓰기,실행
2 -w- 쓰기
1 --x 실행
r (read :읽기) -파일내용을 볼 수 있음
w (write :쓰기) -파일을 변경 or 삭제할 수 있음
x (excute:실행) -파일을 프로그램으로 실행할 수 있음
권한을 부여할 때 '751'과 같이 8진수를 이용할 수 도 있는데 이 때 첫 번째 숫자인 7은 소유권자의 권한 두번째 숫자인 5는 사용자가 속한 그룹의 권한, 세 번째 숫자인 1은 다른 사용자에 대한 권한을 의미합니다. 'chmod 777 test'를 입력하면 사용자(소유자), 그룹, 다른 사용자에게 모두 읽기, 쓰기, 실행 권한을 주어집니다

실행결과

장비를 함부러 열수 없다 아뉘 에러~~!!!!우웩~~

 

$을 해제하고 싶을때는 ?

su – root

 

-lpcap없이 컴파일

의미 설명

gcc컴파일러가 컴파일시 tmp에 ccduVPov.o파일을 생성하면 컴파일을 하는데

해당.o파일에 pcap라이브러리가 정의되어 있지 않아서 나타나는 에러입니다

pcap자체가 기본적인 내장 라이브러리가 아닌 추가 라이브러리이기 때문에 lpcap로 알려주어야 합니다

ccduVPov.o임임의 파일이 이름이 각자 다른이름을 가지는 것은 멀티유저가 동시 컴파일시

구분을 할 수 없기 때문에 tmp에 임의적으로 파일을 생성하는 것입니다

password capture

ftp접속 => id : test / pass : ********()아직모름 => ./test 실행후 pass입력

결과확인

pass가 1234578로 확인 되었습니다

연속으로 실행해 보았습니다

수만이가 잡혔습니다 ㅡ..ㅡ+ 오호 우리모두 피시방으로~~~ㅋㅋ 헤킹 ㄱㄱ

 

위의 헥사뷰를 살펴 보겠습니다 제일윗줄을 보시면

HWaddr = machine address = mac address입니다

분석을 하면 아래 그림과 같습니다

 

위의 그림의 오늘 수업의 내용의 대부분을 설명 해주고 있습니다 데이터에 헤더정보를 얻어서 목적지로 보내는 일련의 과정을 확인하시면 됩니다

보너스 layer 7계층 위의 그림을 조금 더 이해하기 쉽게 인터넷에서 그림을 가져왔습니다

 

API 대화상자

응용프로그램과 사용자간의 대화 수단에는 여러가지 있습니다 버튼 에디트등 앞에서 다루어 보았습니다

하지만 이러한 간단한 컨트롤은 사용자로부터 복잡한 정보를 입력받기

어려운데 많은 양의 정보를 효율적으로 입력받기 위해 주로 대화상자를 사용합니다

대화상자는 프로그램과 사용자간의 대화 곧 명령 및 정보 전달을 위한 특별한 윈도우 입니다

대화상자에는 버튼 에디트등의 컨트롤이 배치되는데 그래서 대화상자를 컨트롤의 컨테이너라고도 합니다

사용자는 대화상자를 호출한 후 컨트롤을 통해 자신의 의사를 표시하고

명령을 내리며 대화상자에 배치된 컨트롤을 통해 현대 상태를 보여줍니다

 

 

모달형 : 대화상자를 닫기전에 다른 윈도우로 전환 할 수 없다 ok/취소를 눌러야 한다

모델리스형 : 대화상자를 닫기전에 다른 윈도우로 전환 할 수 있습니다 위의 그림은 ctrl F를

눌려 나오는 찾기 대화상자인데 대화상자가 있는 상태에서도 문서작성이 가능하므로 모델리스 형입니다

 

ABOUT

대화상자 템플릿 : 대화상자의 모양과 대화상자 내의 컨트롤 배치 상태가 저장되는 이진 정보이며 리소스로 작성 됩니다

 

대화상자 프로시저 : 윈도우 프로시저가 윈도우에서 발생하는 메시지를 처리하는 것과

마찬가지로 대화상자 프로시저는 대화상자에서 발생하는 메시지를 처리한다

그럼 대화상자를 만들어봅시다

 

NEW에서 about.rc를 추가해줍니다

Dialog를 더블클릭합니다

클릭을 하면 아래와 같이 나옵니다

오른쪽 상단에 Aa를 눌러 static을 추가합니다

static을 추가하였습니다

이제 이름(caption)을 바꿔보겠습니다 static을 더블클릭합니다

 

그럼 이제 소스코드를 수정하겠습니다 소스코드가 길어서 추가되는 내용들에 대하여만 하겠습니다

main.cpp

HWND hDIgMain;

BOOL CALLBACK MainDIgProc(HWND,UINT,WPARAM,LPARAM);

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE g_hInst; //프로그램의 인스턴스 핸들

LPCTSTR lpszClass = TEXT("myAbout");

typedef struct DMESSAGEMAP{

      UINT iMessage;

      BOOL (*lpfnMsgProc)(HWND,WPARAM,LPARAM);

}DMESSAGEMAP;

BOOL CALLBACK MainDIgProc(HWND hDIg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

      int i;

      static DMESSAGEMAP DMessageMaps[] = {

               {WM_INITDIALOG,OnInitdiag},

               {WM_COMMAND,OnCommand},

      };

      for(i=0; i<sizeof(DMessageMaps)/sizeof(DMessageMaps[0]); i++)

      {

             if(DMessageMaps[i].iMessage == iMessage)

            return(*DMessageMaps[i].lpfnMsgProc)(hDIg,wParam,lParam);

      }

      return FALSE;

}

MsgProc.cpp

BOOL OnInitdiag(HWND hDIg,WPARAM wParam, LPARAM lParam)

{
           return TRUE;
}

BOOL OnCommand(HWND hDIg,WPARAM wParam, LPARAM lParam)

{

       switch(LOWORD(wParam))

       {

               case IDOK:

                     EndDialog(hDIg,IDOK);

               case IDCANCEL:

                     EndDialog(hDIg,IDCANCEL);

               return TRUE;

       }

         return FALSE;

}

MsgProc.h

#include "resource.h"

BOOL OnInitdiag(HWND,WPARAM, LPARAM);

BOOL OnCommand(HWND,WPARAM, LPARAM);

BOOL CALLBACK AboutDlgProc(HWND,UINT,WPARAM,LPARAM);

 

Dialogbox : 대화상자를 호출할때 사용합니다 이 함수는 대화상자의 출력 운영 및 종료까지 대화상자에 관한 모든 처리를 책임집니다

 

int Dialog(HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc);

DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1),hWnd,AboutDlgProc);

 

첫번째 인수는 인스턴스의 핸들이며

 

두번째 인수는 대화상자 템플릿의 리소스 ID입니다

 

세번째 인수는 대화상자를 소유할 부모윈도우 이며 네번째 인수는 대화상자 프로시저의 이름입니다

DialogBox는 함수는 hInstane의 리소스중 lpTemplate가 지정하는 템플릿을 읽어와 대화상자를 만들어 화면에 출력합니다

 

결과확인

마우스 왼쪽버튼을 클릭하면 대화상자가 출력합니다

 

대화상자 프로시저와 윈도우 프로시저의 차이점

첫번째 : 두프로시저의 리턴값이 다릅니다 윈도우 프로시저는 LRESULT지만 대화상자의 경우는 BOOL형의 값을 리턴합니다

두번째 : 대화상자는 WM_CREATE 대시 WM_INITDIALOG메시지를 받아들이며 이 메시지를 받은 시점에서

대화상자에 필요한 초기화를 하면 됩니다 위 예제에서는 특별히 초기화할 필요가 없으므로 TRUE를 하면됩니다

대화상자 프로시저에서는 WM_COMMAND를 사용하는데 컨트롤이나 매뉴항목이 선택될 경우

컨트롤들이 부모윈도우인 대화상자로 보내는 통지메세지 입니다

 

LOWORD                 HIWORD

보낸 컨트롤 ID

통지코드

 

OK / CANCEL을 눌릴경우 EndDiag가 호출되어 대화상자가 닫히게 됩니다

대화상자 프로젝트

앞에서 구현한 소스는 모달대화상자였습니다

처음에 찾기 대화상자처럼 대화상자만으로 프로그램을 구성 할 수 있습니다

책에서는 계산기가 좋은예라고 설명하고 있습니다

실행시 대화상자만 출력되는 프로그램을 작성...소스생략


       *개인적으로 보고서()가 있어서 호출만하면 보고서를 리턴했으면 좋겠다 ㅋㅋ


결과확인>>대화상자만 출력 됩니다



728x90