키젠을 알고 싶으면 쪽지나 이멜 주세용^^;

받아서 실습해 보자.

출처 : cafe.naver.com/cygwin

 

* cygwin을 windows XP에 설치한 후에 hello.c 프로그램을 컴파일 합니다.

 

hello.c 파일의 내용

=============================

1: #include<stdio.h>

2:

3: main()

4: {

5: printf("Hello,World!\n");

6: return 0;

7: }

=============================

 

모두 7줄인 이 프로그램을 컴파일하고 실행해 보겠습니다.

(줄번호 1: 2: 3: ... 7:은 실제 입력하지 않으며, 설명의 편의를 위해 붙인 것임)

 

 

먼저, hello.c 가 있는지 확인합니다. (없다면 편집기로 입력합니다.)

 

$ls

hello.c

 

이제 컴파일해 봅니다.

 

$gcc hello.c -o hello

 

컴파일이 정상적으로 완료되었으면, 실행파일을 찾아봅니다.

[-o 파일이름]은 생성되는 파일에 이름을 붙여주는 것입니다. 

 

$ls

hello.c    hello.exe

 

실행파일을 실행해 봅니다.

 

$./hello.exe

Hello,World!

 

가장 작은 C프로그램을 만들고, 실행합니다.


< Cygwin 홈페이지 > 이 주소의 시그윈 홈에 보면

Install or update
now!
(using setup.exe)


이런 곳이 있습니다. 'setup.exe를 사용해 인스톨/업데이트'하는 메뉴입니다. 그곳을 클릭하면 setup.exe 라는 조그만 파일이 다운로드됩니다. setup.exe 를 실행하면 인터넷 서버에서 실시간으로 파일을 받아오며 인스톨이 시작됩니다.

※ 시그윈은 무료이고 오픈소스입니다


인스톨 과정



* Install from Internet (인터넷으로부터 인스톨; 다운받은 파일들은 나중에 다시 사용할 수 있도록 지우지 않음)

* Download without Installing (필요한 파일을 다운로드만 하고, 인스톨은 하지 않음)

* Install from Local Directory (하드에 이미 다운받아 놓은 파일로 설치)

이런 옵션 대화상자가 나오는데, 처음 설치라면 Install from Internet (인터넷으로부터 인스톨) 을 선택합니다.



Select Root Install Directory (인스톨할 루트 디렉토리를 선택하세요) 라는 곳이 나오는데, 하드의 어디에 시그윈을 설치할지 물어보는 것입니다. 저의 경우
D:\cygwin
여기로 지정했습니다. 나머지는 기본값이 좋습니다.



Select Local Package Directory (설치 파일을 보관할 곳을 정하세요)

다운받은 시그윈 설치파일들을 지우지 않고 계속 보관할 폴더를 지정하는 곳입니다. 저의 경우에는
D:\Warehouse\cygwin_install_files
이런 폴더를 만들어서 지정해 주었습니다. 시그윈도 일종의 유닉스이기에, 디렉토리/파일명에는 공백문자가 들어가지 않는 것이 좋을 것 같습니다.



Select Your Internet Connection (인터넷 연결 방식을 선택하세요)

Direct Connection (직접 연결)을 선택했습니다.



Choose A Download Site (다운받을 사이트를 고르세요)

설치 파일들은 시그윈 홈페이지가 아닌 세계 각곳의 FTP 서버에 올려져 있습니다. 그래서 골라야 하는데, 서버에 따라 아주 느리거나 아예 다운로드가 안되는 경우가 많습니다.

예전에는 한국의 "리눅스사랑" 서버가 좋았는데 지금은 보이지 않습니다.

"초고속연구망 KREONET": ftp://ftp.kreonet.re.kr
여기가 속도도 빠르고 잘 되는군요. 아무튼 한국 서버에서 받는 것이 빠릅니다.



Select Packages (설치할 패키지를 고르세요)

이 부분이 좀 어렵습니다. 리눅스에 익숙하지 않다면 무엇을 설치해야 할지 알 수가 없을 것입니다. 시그윈은 Vim (VI; 빔) 같은 에디터조차도 기본적으로는 설치해 주지 않습니다.

필요한 것이 있으면 나중에 추가 설치하면 되기에 그냥 기본값으로 설치하는 것이 좋습니다. "다음" 버튼을 누릅니다.


최소한의 파일만 설치했는데도 D:\cygwin 폴더가 50MB나 됩니다.


바탕화면에 만들어진 시그윈 아이콘을 클릭하면 시그윈이 실행됩니다.


실행 결과:
Administrator@chessman-dsjf2pe ~
$


이런 아주 썰렁한 프롬프트 한 개가 나올 것입니다. 그러나 이것이 정상입니다. 정확히 말하자면 이것은 Cygwin의 Bash Shell 입니다. 윈도우의 cmd.exe 와 같은 명령어 처리기입니다.

프롬프트를 이루는 Administrator 는 현재 사용자의 로그인 ID이고, chessman-dsjf2pe 는 컴퓨터 이름입니다. 이런 프롬프트는 변경할 수 있습니다.

아무튼 이것으로 설치는 완료되었습니다.

퍼온글 : http://mwultong.blogspot.com/2006/06/cygwin.html

'기타 > Cygwin' 카테고리의 다른 글

cygwin 다운로드~  (0) 2009.08.23
cygwin에서 gcc 컴파일하기.  (0) 2009.08.23
Cygwin(시그윈) 메뉴얼 있는 곳은?  (0) 2009.08.20
저도 시그윈을 설치하고 매뉴얼이 어디 있는지 몰라서, 시그윈 사이트에 다시 가서 매뉴얼을 다운로드받았었는데, 알고 보니 시그윈을 설치할 때 매뉴얼을 같이 설치해주더군요.

Cygwin을 설치했다면, 윈도 시작메뉴의 Cygwin 이라는 곳에, 다음과 같은 '바로가기 파일'들이 있습니다:

Cygwin API Reference
Cygwin FAQ
Cygwin User's Guide
User's Guide (One file)
User's Guide (PDF)



User's Guide (PDF) 인, \cygwin\usr\share\doc\cygwin-doc-1.4\cygwin-ug-net.pdf <- 이 파일이 읽기에 편했습니다.

퍼온글 : http://mwultong.blogspot.com/

1. 네이밍 률

  이 문서 전반에 걸쳐 파스칼표기법과 카멜 표기법이 사용된다.  

  파스칼 표기법 - 모든 단어에서 첫번째 문자가 대문자이며 나머지는 소문자이다.

    예: BackColor

  카멜 표기법 - 최초에 사용된 단어를 제외한 첫번째 문자가 대문자이며 나머지는 소문자이다.

    예: backColor

 

1. 클래스 명에는 파스칼 표기법을 사용한다.

ICP 적용 예 :

public class ConnRS232

2. 함수(Method) 명에는 파스칼 표기법을 사용한다.

void OpenRS232(string name)

3. 변수와 함수 파라미터에는 카멜표기법을 사용한다.

string addressData = string.empty

void SayHello(string name)

4. 변수는 풀네임으로 의미를 명확히 한다

ex) addr -> address

txt -> text

5. 루프에서 반복을 의미하는 변수만 I, j, k를 사용한다

ex) for ( int i = 0; i <count; i++ )

6. 지역변수에는 밑줄(_)을 사용하지 않는다.

7. 모든 멤버 변수들은 앞에 밑줄(_)을 사용해야 한다. 그래야 다른 지역변수들과 구분할 수 있다.

8. 키워드와 비슷한 이름을 사용하지 않는다

9. boolean 이 들어가는 변수, 속성, 함수(method)등은 "is" 또는 유사한 접두사를 사용한다.

예: private bool _isFinished

10. 닷넷에서 사용되는 컨트롤의 표준 네임 정의

 Control

 prifix

 Control

 prifix

 Label

 lbl

 Checkbox

 chk

 TextBox

 txt

 CheckBoxList

 cbl

 DataGrid

 dtg

 RadioButton

 rdo

 Button

 btn

 RadioButtonList

 rbl

 ImageButton

 imb

 Image

 img

 Hyperlink

 hlk

 Panel

 pnl

 DropDownList

 ddl

 PlaceHolder

 phd

 ListBox

 lst

 Table

 tbl

 DataList

 dtl

 Validators

 val

 Repeater

 rep

 

 

   

11. 파일명은 클래스 명과 같아야 한다.(파일명 또한 파스칼 명명법 적용)

ex)클래스명이 RS232면 파일명은 RS232.cs

2. 들여쓰기

1. 들여쓰기에는 TAB 을 사용한다. SPACE를 사용하지 않는다. Tab 사이즈는 4로 정의한다.

2. 주선은 코드와 같은 레벨에 있어야 한다(들여쓰기의 레벨을 같이 사용한다.).

3. 중괄호는 중괄호 밖에 있는 코드와 같은 레벨에 있어야 한다.

           4. 중괄호는 다른 라인과 분리되어 있어야하며 라인을 같이 쓰면 안된다.

5. 지시자(operator)와 괄호 앞뒤로는 한 칸의 공간을 남긴다.

좋은 예:

               if ( showResult == true )

               {

                       for ( int i = 0; i <10; i++ )

                       {

                              //

                       }

               }

6. 연관된 코드를 묶을때는 #region을 사용해라. #region을 사용해서 묶는다면 그 페이지는 훨씬 간략해질 것이다.

아직 미완성 률 이지만 예전에는 이렇게 썼다고 한다. 좀더 보강해서 완벽한 률을 만들어 한눈에 보기 싶게 유지보수가 최대한 잘될수 있도록 정하여 개발의 착수하였으면 좋겠다.

'기타 > 코딩의 규칙' 카테고리의 다른 글

코딩의 규칙  (0) 2009.07.29

1. 상대방 IP 알아낸다. : netstat -na

- nmap : nmap을 이용하여 대상 서버를 알아본다.(리눅스,유닉스,윈도우NT 계열인지...)

http://insercure.org/nmap 사에트에서 리눅스, 윈도우 버전으로 제공중이다.

- fport : fport로 자신의 포트가 열려 있는지 확인한다.

fport /? -> 명령어로 원하는대로 정렬이 가능하다.

http://www.foundstone.com 사이트에 가면 다운로드 할수 있다.

- Windows 2000 Or Windows 2003 서버일경우에는 아래와 같은 공격이 통함.

- 단, Message 서비스가 켜져있어야 한다.

2. 명령어

net send IP 전할 말

3. 명령어 응용

for /L %1 IN (5,-1,1) do net send [IP] [메세지]

4. 공유 폴더확인 : net share

5. 공유 폴더삭제 : net share [폴더명] /delete

가. DLL 인젝션과 API 후킹

1. DLL 인젝션 정의

만일 어떻게든 A프로세스의 주소 공간에 서브클래싱을 위한 윈도우 프로시저를 포함시킬 수 있다면, SetWindowLongPtr을 사용하여 A프로세스 주소 공간에 포함된 MySubclassProc의 주소로 해당 윈도우의 윈도우 프로시저를 변경할 수 있을 것이다. 이러한 기법을 우리는 프로세스의 주소 공간으로 DLL 인젝션 한다고 한다.

2. 서브클래싱 이란?

서브클래싱(SubClassing)이란 윈도우 프로시저로 전달되는 메시지를 중간에 가로채는 방법이다. 중간에서 메시지를 조작하게 됨으로써 윈도우의 모양을 변경하거나 동작을 감시하거나 하는 작업을 할 수 있게 되는 것이다.

윈도우는 CreateWindow()를 통해 만들어진다. 이 때 CreateWindow()의 첫번 째 인수인 윈도우 클래스에서 윈도우 생성에 필요한 정보를 구하게 되는데, 그 중 가장 중요한 것이 메시지를 처리하는 윈도우 프로시저의 번지(lpfnWndProc)이다. 이는 윈도우 클래스에 보관되는 것이 아니고 윈도우별로 별도로 보관된다.

윈도우는 메시지를 받게 되면 해당 윈도우의 윈도우 프로시저 번지를 조사한 후 조사된 번지로 메시지를 보내고 메시지를 받은 윈도우 프로시저는 이 메시지를 받아 해당 윈도우에서 작성한 코드대로 처리를 하게 된다.

이 때 윈도우 프로시저를 다른 윈도우 프로시저로 변경을 한다면, 모든 메시지는 새로 만든 윈도우 프로시저로 전달이 될 것이다.

이렇게 새로 만들어진 윈도우 프로시저를 서브클래스 프로시저(SubClass Procedure)라고 한다.

윈도우 프로시저의 번지를 변경하기 전에 원래의 윈도우 프로시저 번지를 보관해 두고 서브클래스 프로시저에서 처리하지 않은 메시지는 반드시 원래 윈도우 프로시저로 전달하도록 해야한다.

서브클래스 프로시저를 등록하기 위해서는 아래와 같은 함수를 사용한다.

LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG_PTR dwNewLong )

hWnd - 프로시저를 바꾸려는 윈도우에 속한 클래스의 핸들

nIndex - MSDN 참고

GWL_EXSTYLE : Sets a new extended window style

GWL_STYLE : Sets a new Window style

GWLP_WNDPROC : Sets a new address for the window procedure.

GWLP_HINSTANCE : Sets a application instance handle.

...

dwNewLong - 대체할 값(프로시져)을 지정.

예)

원래번지 = SetWindowLongPtr(변경 윈도우, GWLP_WNDPROC, 서브클래스 프로시져);

위와 같이 하면, 변경 윈도우로 보내지는 모든 메시지는 일단 서브클래스 프로시져로 전달 될 것이다.

변경 윈도우는 일반적인 윈도우가 될 수도 있고, 버튼, 에디트박스와 같은 윈도우도 될 수 있다. 버튼이나 에디트박스가 변경 윈도우가 될 경우 그 윈도우에서 처리하고 싶은 이벤트, 메시지에 관련된 부분을 서브클래스 프로시져에 넣어주면 된다.

추가로 서브클래스 프로시져를 작성한다.

LRESULT CALLBACK 프로시져(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)

{

switch(iMessage){

case XXX:

...

break;

}

return CallWindowProc(원래번지, hWnd, iMessage, wParam, lParam);

}

CallWindowProc() 는 위 예제의 서브클래스의 case 에 속하지 않은 메시지를 처리하는 부분이다. 이 메시지들은 lpPrevWndFunc에 정의된 윈도우 프로시져로 보내저 처리가 될 것이다.

LRESULT CallWindowProc (WNDPROC lpPrevWndFunc,

HWND hWnd,

UINT Msg,

WPARAM wParam,

LPARAM lParam )

lpPrevWndFunc - 서브클래스 등록(SetWindowLongPtr)시 리턴된 값으로 원래의 윈도우 프로시저(번지)

hWnd - 메시지를 받을 윈도우 프로시저의 핸들

Msg - 메시지 내용

wParam - 메시지의 추가적인 정보

lParam - 메시지의 추가적인 정보

예)

return CallWindowProc(원래번지, hWnd, iMessage, wParam, lParam);

윈도우즈 API 정복을 참고한 간단하게 본 서브클래스의 개념과 주요 함수들이다.

3. 레지스트리를 이용하여 DLL 인젝션하기.

- 전체시스템의 구성 정보는 레지스트리에 저장된다.

- 이 설정 값을 변경함으로써 시스템의 동작 방식을 변경할 수 있다.

'기타 > 리버스엔지니어링' 카테고리의 다른 글

올리디버거  (0) 2009.07.29
리버싱 관련 툴  (0) 2009.07.29
리버스엔지니어링이란 무엇인가?  (0) 2009.07.29

+ Recent posts