1. 개요 MyCrackIt.exe 프로그램은기본적으로대화상자기반의윈도우용프로그램이다. 분석을위해서해당프로그램에서사용되는 API에대한내용을사전에조사하게될경우빠른분석이가능하다. 따라서, 이번 MyCrackIt.exe 에서사용하는 API 함수에대해서사전에조사하는것이필요하며

Size: px
Start display at page:

Download "1. 개요 MyCrackIt.exe 프로그램은기본적으로대화상자기반의윈도우용프로그램이다. 분석을위해서해당프로그램에서사용되는 API에대한내용을사전에조사하게될경우빠른분석이가능하다. 따라서, 이번 MyCrackIt.exe 에서사용하는 API 함수에대해서사전에조사하는것이필요하며"

Transcription

1 2007 년 2 학기해킹및크래킹 분석자료 #1 MyCrackIt.exe 분석자료 분석대상프로그램다운로드 : 분석도구 : OllyDebugger 질문연락처 : kyegeun.kim@initech.com < 문서열람후질문이있을시에는상기메일주소로연락할것 > [ 1/34 ]

2 1. 개요 MyCrackIt.exe 프로그램은기본적으로대화상자기반의윈도우용프로그램이다. 분석을위해서해당프로그램에서사용되는 API에대한내용을사전에조사하게될경우빠른분석이가능하다. 따라서, 이번 MyCrackIt.exe 에서사용하는 API 함수에대해서사전에조사하는것이필요하며이에대한설명은프로그램을분석하는과정에서설명하도록한다. 사용되는 API 함수는다음과같다. 1 DialogBoxParam 2 SendMessage 3 GetDlgItem 4 StrToInt 5 GetModuleHandle 6 GetProcAddress 7 lstrcat 8 MessageBox 9 EndDialog 또한, 다음의사항을기본적으로알고있는것이분석을위해서도움이된다. 1) 함수의전처리과정 (Prolog) 상응하는후처리과정이존재하는것은숙지하도록한다. 2) 스택의위치와계산법 EBP, ESP 레지스터를통한스택의계산 3) 자동변수, static 변수, 전역변수등의저장위치 stack인지? heap인지? 어떻게저장되는지? 저장시에어떤크기 (bytes) 단위로할당이되는지? 4) 약간의어셈블리언어해석능력 어셈블리명령은 reference를보면서이해하면된다 5) 윈도우프로그래밍개념 기본적인구조와 API함수에대한지식 [ 2/34 ]

3 2. 분석과정 분석을위해서올리디버거를통하여역어셈블된코드를보면서설명을한다. 프로그램을실행시켜보면알겠지만해당프로그램은대화상자를기반으로동작하는프로그램이다. 윈도우프로그램을분류하자면, SDI, MDI, Dialog Based 등으로나뉠수있는데 MycrackIt.exe는대화상자기반 (Dialog Based) 의프로그램이다. 따라서, 대화상자기반의프로그램을작성하기위한기본골격을알면된다. 일반적으로 MFC가아닌 SDK로작성된대화상자기반의프로그램은 WinMain과 rm 안에위치한 DialogBox 혹은 DialogBoxParam과메시지처리함수 ( 일반적으로 DlgProc를많이사용 ) 로이루어져있다. 즉, 다음과같은코드형태를지닌다. int APIENTRY WinMain( 변수들 ) { DialogBoxParam( 변수들 ); } BOOL CALLBACK DlgProc( 변수들 ) { switch( 메시지 ) { case WM_XXXXX : case WM_XXXXX : case WM_XXXXX : } } break; break; break; 올리디버거를통해서해당프로그램을역어셈블하여살펴보게되면두개의함수로이루어진것을쉽게알수있다. 올리디버거에서함수의시작과끝을크게연결시켜보여주기때문이다. 다음그림을보면알수있다. 두번째칸의왼쪽에굵은검정색으로위아래를연결하는굵은검정색선이보일것이다. 이게함수의시작과끝을알려주는것으로해석하면된다. ( 화면표시를위하여조금강조해서그렸음 ) [ 3/34 ]

4 전체적인구조를확인하였으면함수를하나씩분석해보기로한다. [ 4/34 ]

5 2.1. WinMain 함수분석 분석과정에서일반적인윈도우프로그램과약간의상이한점이있더라도이프로그램은초보자를위한 프로그램이므로불필요한부분은삭제된상태로만들어졌다고보면된다. 이제코드분석을위해서올리디버거에서역어셈블한 WinMain 함수부분을살펴보도록한다 XOR EAX,EAX ; kernel32.basethreadinitthunk PUSH EAX ; /lparam => NULL PUSH MyCrackI ; DlgProc = MyCrackI PUSH EAX ; howner => NULL PUSH 81 ; ptemplate = E PUSH EAX ; hinst => NULL F CALL DWORD PTR DS:[<&USER32.DialogBoxParamA>] ; \DialogBoxParamA XOR EAX,EAX INC EAX RETN 위의코드는올리디버거에나온것을복사해놓은것이다. PE(Portable Executable) 형식의윈도우실행프로그램은적재시에기본시작주소번지인 에서부터시작되며이부분이프로그램의진입점 (EntryPoint) 가된다. 또한, 주소번지 에서부터 F 까지를보면 PUSH 명령과 CALL 명령의조합으로이루어져있다. 이는함수를호출하기전에함수로전달되는인자값을스택에저장하고함수를호출하는전형적인형태로함수를호출하는것을알수있다. 호출하는함수는 DialogBoxParam함수이다 번에서 E 에이르기까지코드가차례대로수행되면스택에는다음과같은데이터가 들어가있게된다. 스택은우리의개념과달리 위에서아래로쌓인다. [ 그림 2-1] 스택에넣은인자값 여기서각각의값에해당하는것은 API 함수와비교해보면쉽게알수있다. 주소번지 F 번 지의내용은 [ 5/34 ]

6 F CALL DWORD PTR DS:[<&USER32.DialogBoxParamA>] 으로 USER32.DLL 함수에속한 DialogBoxParam 함수를호출하라는코드이다. 함수의호출은역어셈블을하게되면 PUSH 명령과 CALL 명령의조합으로나타나게되는데함수의인자로전달되는값을스택에넣고 CALL 하게되면해당인자를호출된함수에서스택에서꺼내어사용하도록되어있다. DialogBoxParam 함수의원형을보게되면 INT_PTR DialogBoxParam( HINSTANCE hinstance, // 대화상자템플릿을정의한실행프로그램의핸들 LPCTSTR lptemplatename, // 대화상자템플릿 ( 리소스편집기로편집 ) HWND hwndparent, DLGPROC lpdialogfunc, LPARAM dwinitparam // 대화상자를소유한부모윈도우의핸들 // 대화상자로들어오는메시지를처리할함수 // 대화상자초기화시에사용할 LPARAM // WM_INITDIALOG 전송시에같이보내어질 // LPARAM 값을의미 ); 와같이나타난다. 여기에그림 1 의스택에저장된값을대입해보면 로표시할수있다. 좀더정리를해보면 가 ) hinstance 는화면에표시되는대화상자의 resource를포함한실행파일에대한핸들이다. 여기에서는 NULL을넣었는데이는자기자신을의미한다고볼수있다. 나 ) lptemplatename은대화상자의템플릿을가리키는데 Visual C++ 의 resource 편집기를통해서화면설계를할때각각은고유 Control ID라는정수값을가지며, 이정수값이문자로표시되는이름과연결된다. 여기서 lptemplatename이라고하는것은바로고유 Control ID와연결된이름을의미한다. 단, 이름은문자열이므로이에연결되는숫자 ( 즉, Control ID) 가 81임을나타내는것이다. 다 ) hwndparent는대화상자를표시한응용프로그램에대한핸들을가리키는데이프로그램은대화상자가바로메인윈도우이므로 NULL을넣게된다. 즉, 부모윈도우가없다는의미이다. 라 ) lpdialogfunc는메시지를처리하는함수의주소번지를가리킨다. 여기서는 번이이 [ 6/34 ]

7 메시지처리함수의시작주소임을나타내고있다. 마 ) lparam은대화상자가처음생성되는초기화과정 (WM_INITDIALOG 이벤트발생 ) 에서같이보내어질 LPARAM 값을설정해주는것이다. 여기서는아무설정을사용하지않아 NULL을넣어주었다. 위의내용을비추어볼때 C 언어로작성된코드는아래와같이표시된다. DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_DIALOG_1), NULL, DialogProc, NULL); 이제역어셈블된코드의남은부분을해석하기위해보면아래와같은코드를볼수있다 XOR EAX,EAX INC EAX RETN 해당코드를한줄씩분석해보면 1 EAX 를초기화, EAX = 0 2 EAX 의값을 1 증가, EAX = 1 3 함수를종료하고반환 의의미가있다. 그런데함수가종료하면그반환값은 EAX 레지스터를통해서반환되게되며, 위의코드를보면반환값이 1임을알수있다. WinMain 함수이므로 WinMain 함수의 return type이 int 이므로정수 1을반환할것으로추측된다. 즉, 완성된 WinMain 함수는다음과같을것으로추측할수있다. int APIENTRY WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpszcmdparam, int ncmdshow) { DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc, NULL); } return 1; 위의코드에서 DialogBoxParam 함수의두번째인자는대화상자의 Control ID 를이야기하고있으며, 이 는 VC++ 을이용해서프로그램을하는과정에서아래의그림처럼확인할수있다. 다시말해서 Control ID 는프로그램에하드코딩되어있으며이는 resource.h 에서확인이가능하다. [ 7/34 ]

8 그림 2-2 대화상자의 Control ID 확인 ( 윈도우프로그램작성중에확인한화면 ) [ 8/34 ]

9 2.2. 메시지처리함수분석 WinMain 함수에서호출한 DialogBoxParam 함수의네번째인자는해당대화상자롤들어오는윈도우메시지를처리하기위한함수를지정하는것이다. 따라서, 프로그래머는별도의함수를지정하여여기서윈도우에서기본으로제공하는메시지처리루틴이동작하기이전에원하는동작을할수있도록처리할수있다. 여기서메시지처리함수의이름이 DialogProc라고정하였으므로메시지처리함수는 DialogProc로선언하면된다. 또한, 윈도우에서메시지처리함수는 BOOL CALLBACK 으로선언하므로해당형식에따라서전달되는인자를설정해주면된다. 즉, 다음과같이선언될것이다. BOOL CALLBACK DialogProc(HWND hdlg, UINT imsg, WPARAM wparam, LPARAM lparam) { 생략 } 위의그림에서 (1) 번사각형은함수의전처리부분으로함수에서사용되는자동변수들을스택에할당하기위해서사용된다. 여기서는 DialogProc 함수에서사용하는변수등 ( 변수외에별도의내용을저장하기위한공간도할당하기때문에변수등이라고하였음 ) 을위한스택공간할당을의미한다. 정확한스택의구조는역어셈블과정을통해서이후에설명하도록한다. (2) 번부분은메시지처리함수인 DialogProc함수로들어오는메시지가 WM_COMMAND인지를판단하는루틴이라고보면된다. [ 9/34 ]

10 Winuser.h 헤더파일에보면 0x111 의숫자를갖는메시지는 WM_COMMAND 이다. 해당코드와연관된부분을정리해보면아래와같이나누어볼수있다 F CMP DWORD PTR SS:[EBP+C],111 ; 윈도우메시지확인 JNZ SHORT MyCrackI B ; WM_COMMAND가아니면 B번지로이동 생략 B XOR EAX,EAX ; 반환값을만들기위해 EAX 초기화 D JMP MyCrackI A2 ; A2로이동 생략 A2 LEAVE ; 함수후처리과정을지원 A3 RETN 10 ; 함수종료 이는메시지처리함수의특정인자를통해들어오는값을비교하여어떤처리과정을거치도록하고있 다. 우선메시지처리함수의프로토타입은아래와같다. BOOL CALLBACK DlgProc(HWND hdlg,uint imessage,wparam wparam,lparam lparam) 위의메시지처리함수에서 EBP는스택프레임포인터로 DlgProc함수에서사용하는스택의경계를가리킨다. 이지점부터낮은주소는함수내부에서사용하는변수들이저장되는공간이고높은주소는함수호출과관련하여저장된값들이다. 함수가호출되게되면스택에는다음과같은기본사항들이저장되게된다. [ 그림 2-3] 메시지처리함수의스택구조 ( 함수전처리과정직후 ) 따라서위의역어셈블코드중 SS:[EBP+C] 번지에위치한값은 imessage( 윈도우메시지코드 ) 이며, [ 10/34 ]

11 수신된윈도우메시지코드가 WM_COMMAND 인지를비교하는부분이첫줄이다. 여기서수신한윈도우메 시지코드가 0x111(WM_COMMAND) 일때와아닐때의처리방식이나뉘게된다. 우선 WM_COMMAND 가 아닐경우는다음의처리과정을갖는다. 주소번지 (offset) F B A2 설명 MyCrackIt의 B 번지로이동하라. 즉, WM_COMMAND가아닐경우의처 리부분으로이동하라는명령 EAX 를초기화하고 A2 번지로이동하라. 즉, 함수의반환값을저장하는 EAX 를 0 으로만들어반환값을 0 으로 1 타입이므로 0 값은 FALSE 를의미 설정하라. 여기서 DlgProc 함수는 BOOL LEAVE 명령을수행 ( 함수의후처리과정을지원 ) 하고호출한함수로돌아가라 두번째로입력된윈도우메시지가 WM_COMMAND 일경우는다음과같이처리한다. SS:[EBP+10] 번의위치에있는값을 EAX 레지스터로이동하는데 SS:[EBP+10] 번지의내용은함수 로전달되는 3 번째인자인 wparam 을의미한다. 2 이를전체적인구조의 C++ 형태로보면다음과같다. BOOL CALLBACK DlgProc(HWND hdlg,uint imessage,wparam wparam,lparam lparam) { switch(imessage) { case WM_COMMAND: 생략 } return FALSE; } 주소번지 부터는윈도우메시지를확인한결과값이 WM_COMMAND일경우를처리하는과정이다. WM_COMMAND 윈도우메시지 3 는일반적으로 wparam과 lparam 변수를같이쓰게되는데주로 wparam은어떤컨트롤이메시지를보냈는지를확인하는것이다. 다시말해서윈도우화면에서 확인 버튼을눌렀는지, 취소 버튼을눌렀는지를구분할수있다. lparam은메시지를보낸컨트롤의윈도우핸들이저장된다. lparam의경우 MyCrackIt 프로그램에서는사용하지않으므로설명은생략한다. 상세한설명은아래와같다. 1 DlgProc 함수의타입이 BOOL 이므로값 0 은 FALSE 를의미한다 쪽의 [ 그림 2-3] 메시지처리함수의스택구조 ( 함수전처리과정직후 ) 를참고하라. 3 메뉴, 액셀러레이터를선택했을때이메시지가전달되며차일드컨트롤이부모윈도우로통지메시지를전달할때도이메시지형태로전달된다. 각종컨트롤로부터값이전달되며또한각컨트롤은다양한통지메시지를보내므로이메시지는일반적으로이중 switch 문으로작성된다. 즉, 윈도우화면에서사용자가버튼을누르는등의특정행위를했을때이를처리하기위한메시지로보면된다. [ 11/34 ]

12 MOVZX EAX,WORD PTR SS:[EBP+10] (1) C DEC EAX D DEC EAX (2) E JE MyCrackI SUB EAX,3E9 (3) JE SHORT MyCrackI MyCrackIt 의 번지부터 번지까지는위와같이 3 부분으로나뉘어질수있다. 각부분에대한설명은다음과같다. A. (1) 번구간은 SS:[EBP+10] 번메모리주소에있는내용을 EAX레지스터로옮기라는명령이다. 단, MOV 명령과다른점은소스에서목적지로복사할때크기가다르면남는부분은 0으로채워넣으라는것이다르다. 4 명령에서복사할내용은 WORD 크기로 2바이트임을나타내고복사할곳의번지는 SS:[EBP+10] 으로 10쪽의 [ 그림 2-3] 을참조하면 wparam 을의미한다. 따라서, 이는 SS:[EBP+10] 번지에서 2바이트를 EAX로 4바이트로확장하여복사하면서 EAX의나머지상위 2바이트는 0으로초기화한다는것을의미한다. FF 3D FF 3D ㄱ FF 3D 34 6C FF 3D < MOVZX 를통한복사 > < MOV 를통한복사 > 위의그림에서보듯이 MOVZX를사용하면상위 2바이트에 0 값을채워놓아확장이되더라도원하는값이그대로저장되지만, MOV를사용할경우하위 2바이트는원하는값이복사되지만상위 2바이트에는어떤값이들어갈지모른다. 다시말해서이전에있던값의상위 2 바이트값이남아있어전체적으로 4바이트값을보면원하는값이복사된것이아님을알수있다. 따라서, MOVZX는하위 2바이트를 4바이트로확장하여옮기는것을의미한다. B. (2) 번구간은위에서설명한바와같이이동한 wparam의값에서 2를뺀뒤이값이 0과같으면 (wparam 값이 2이면 ) 번지로이동하라는명령이다. 주목할것은여기서 wparam의값이 2 라는것이어떤의미인가하는것이다. 일반적으로 WM_COMMAND와함께들어오는 wparam의값은통지메시지를보낸항목의 ID 값을나타낸다. 즉, ID 가 2번이라는것인데여기서는좌측상단의종료메뉴를의미한다. 4 MOVZX 명령에대한자세한내용은어셈블리명령을참조하라. [ 12/34 ]

13 C. (3) 번구간은 EAX가 0x3E9(10진수 1001) 인지를비교하는데이는원칙적으로 EAX에원래할당된값, 다시말해 SS:[EBP+10] 번지에저장되었던값인 wparam이 0x3EB(10진수 1003) 인지를확인하는것이다.( 이미앞에서 DEC EAX를두번하였기때문에 2값을더해야한다.) 여기서 1003은마찬가지로 ID 번호 1003을의미하는데이는 Microsoft Visual Studio에서제공하는유틸리티인 Spy++ 를사용하여해당프로그램의 Control ID를알아낼수있다. 따라서, 위의 3 부분을각각분석한결과를합쳐서설명하면 wparam 값이 2인경우 ( 종료버튼이보낸메시지인경우 ) 에는 번지로이동하여명령을수행하고, 1003(0x3EB) 인경우 (Let s go 라고쓰인버튼인경우 ) 에는 번지로이동하여명령을수행하라는의미이다. 이를좀더쉽게표현하자면종료버튼이눌렸을경우와 Let s go 라는버튼이눌렸을때의동작을의미한다. 다음역어셈블코드부분은아래와같이두줄을해석하면된다. [ 13/34 ]

14 F CMP DWORD PTR SS:[EBP+C], JNZ SHORT MyCrackI B 생략 B XOR EAX,EAX ; Default case of switch C D JMP MyCrackI A2 생략 A2 LEAVE A3 RETN 10 위의내용을보면 EAX를초기화하여 0으로만들고 A2 번지로이동하고해당번지를보면함수를종료하는것임을알수있다. (004011A2번지이하의내용은앞서설명하였다.) 여기서, B번지로어디서왔는지를위에서참고하여보면 번지와연관지을수있다. 즉, 위의코드는수신한윈도우메시지가 WM_COMMAND가아닐경우반환값을 0으로초기화 (FALSE) 로만든후함수후처리과정을거쳐서종료하는것을의미한다. 여기서정리를한번해보면 번지부터는 WM_COMMAND 메시지를수신하고 Control ID 가 1003 일경우 ( 즉, Let s go 버튼을누른경우 ) 에수행되는코드를나타내고있다. 여기서 MyCrackIt 프로그램의각아이템의 Control ID 를 Spy++ 를통해확인해보면아래그림과같다. [ 그림 2-4] 아이템의 Control ID 확인 (ID = 2 는 Control ID 아님 ) 위 [ 그림 2-4] 에서설명의편의를위하여사용자입력을받아들이는두개의편집상자에 Edit1 과 Edit2 라는이름을주었다. 우선각아이템의 Control ID는그림에서보는바와같으며, 시스템메뉴의종료상자 (ID = 2) 는 Spy++ 를통해서확인되지않는다. 옵셋번지 번부터 D 번까지가두개의편집상자에모두맞는답을넣었을때처리되는과정이고 F에서 번까지는답이틀렸을때메시지박스를나타내는코드이다. 우선이부분의설명을위하여역어셈블코드에서사용하는내부변수에대한정리를해둘필요가있다. 메시지처리함수의함수전처리과정에서 SUB ESP, 4C 라고하여 76바이트를내부지역변수를위하여할당한것은확인할수있으므로역어셈블코드에서 SS:[EBP-XX] 라고되어있는것들을정리하여분석과정에사용하는것이편리하다. 이를정리해보면다음과같다. [ 14/34 ]

15 코드에서사용 변수명 변수타입 비고 SS:[EBP+14] hdlg HWND 메시지처리함 SS:[EBP+10] imsg UINT 수로전달되는 SS:[EBP+C] wparam WPARAM 인자 SS:[EBP+8] lparam LPARAM 코드에서사용 임시로사용할변수명 예상되는변수타입 ( 크기 ) 비고 SS:[EBP-C] Var_1 문자열 (12 Bytes) SS:[EBP-18] Var_2 문자열 (12 Bytes) SS:[EBP-28] Var_3 문자열 (16 Bytes) SS:[EBP-3A] Var_4 문자열 (40 Bytes) 메시지처리함 수에서사용하 는지역변수 SS:[EBP-4C] Var_5 문자열 (58 Bytes) [ 표 2-1] 메시지처리함수에서사용하는스택과변수의연관 PUSH EBX ; EBX 레지스터를사용하기위해이전값을스택에저장 PUSH ESI ; ESI 레지스터를사용하기위해이전값을스택에저장 MOV ESI,DWORD PTR DS:[<&USER32.GetDlgItem>] A PUSH EDI B PUSH 3E PUSH DWORD PTR SS:[EBP+8] User32.dll 의 GetDlgItem 함수호출임을추정할수있 는부분 CALL ESI (1) MOV EDI,DWORD PTR DS:[<&USER32.SendMessageA>] B LEA ECX,DWORD PTR SS:[EBP-C] E PUSH ECX F PUSH 0A (2) PUSH 0D PUSH EAX CALL EDI PUSH 3EA B PUSH DWORD PTR SS:[EBP+8] (3) E CALL ESI MOV ESI,EAX LEA EAX,DWORD PTR SS:[EBP-C] PUSH EAX (4) CALL DWORD PTR DS:[<&SHLWAPI.StrToIntA>] [ 15/34 ]

16 C LEA ECX,DWORD PTR SS:[EBP-18] F PUSH ECX PUSH 0C SUB EAX,200E4 (5) PUSH EAX PUSH ESI CALL EDI 위 (1) 번구간은 GetDlgItem 함수를실행시키는부분이다. 우선 PUSH와 CALL의조합은함수호출이라는것을유념하고분석을한다. 코드를보면 USER32.dll의 GetDlgItem함수를호출하는것을알수있는데이는 번에서 User32.dll의 GetDlgItem함수에대한포인터를 ESI레지스터에넣고 번에서 ESI 레지스터에대해 CALL 명령을수행한것으로알수있다. 분석을쉽게하기위해 GetDlgItem API를참조해보면다음과같은원형을확인할수있다. HWND GetDlgItem(HWND hdlg, int niddlgitem); 즉, 스택에저장될내용은우선대화상자의핸들인 hdlg, 대화상자에속한아이템의 control ID인 niddlgitem 이다. 실제 API함수호출을위해인자를넣은것은 CALL 바로앞서이루어지므로맨아래줄의 CALL ESI 가 User32.dll의 GetDlgItem함수를호출한것이므로 (3번째줄에 ESI에해당 API의주소번지를저장하였으므로 CALL ESI는함수호출동작임 ) 그바로위의두줄에걸친 PUSH가인자를넣는부분이된다. 따라서, 첫번째인자인 hdlg는 SS:[EBP+8] 이므로메시지처리함수로들어오는첫번째인자를가리키고, niddlgitem은 0x03E8 인십진수 1000번을의미한다. [ 그림 2-4] 에서 1000번은 Edit1 이므로아래의 3줄은 GetDlgItem함수를통해서대화상자의 Edit1 아이템에대한핸들을얻기위한것으로보면된다. 또한, CALL ESI를하게되면함수가호출되게되고함수가호출한이후의반환값은 EAX레지스터에저장된다. 따라서, CALL ESI 를수행하고나면 (GetDlgItem 수행 ) 이후에는 EAX에해당아이템의핸들이저장된다. 이를 C++ 코드로작성하면다음과같다. GetDlgItem(hDlg, IDC_EDIT_1); 이제 ESI 레지스터에 GetDlgItem 함수에대한포인터가저장되어있고, EAX 에는 Edit1 편집상자에 대한핸들이저장되어있음을숙지하고살펴보기로한다. (2) 번구간은결론적으로볼때 SendMessageA 함수를호출하기위한과정이다. 따라서, SendMessage 함수에대한원형을보면다음과같다. LRESULT SendMessage(HWND hwnd, UINT Msg, WPARAM wparam, LPARAM lparam); [ 16/34 ]

17 마찬가지로 CALL EDI라고하는마지막줄이 SendMessage를호출하는것이므로함수에서사용하는인자 4개는 CALL명령이전에존재하게된다. - EDI 레지스터에 user32.dll의 SendMessageA API함수의주소를저장 - SS:[EBP-C] 즉지역변수인 Var_1 의주소를 ECX레지스터가가리키도록함 - ECX 레지스터값을스택에저장 (Var_1변수가할당받은메모리번지저장 )(lparam인자) - 0x0A( 십진수 10) 를스택에저장함.(wParam 인자 ) - 0x0D( 십진수 13) 를스택에저장함. 여기서 13은윈도우메시지코드의값으로 winuser.h를참조하면 WM_GETTEXT를말한다. WM_GETTEXT는대상아이템에서문자열을읽어오라는명령으로 wparam과연동되는데 wparam은읽어들일문자열의최대길이를말한다. 여기서는위에서 0x0A를저장했으므로최대 10개의문자를읽어들인다. (Msg인자) - EAX레지스터값을스택에저장 (EAX는 GetDlgItem 함수의반환값이저장 )(hwnd인자) 결국 (1) 번, (2) 번구간을묶어서살펴보면 Edit1 편집상자에대한핸들을얻고, 그핸들을이용하여 Edit1편집상자에 WM_GETTEXT 메시지를전송하여최대 10개의문자를읽어오도록하는것이다. (2) 번구간의마지막줄인 CALL EDI 를수행하면이제 EAX에는 SendMessage 함수를실행하고반환받은결과값이저장되었으므로더이상 Edit1 편집상자의핸들을갖지않는다. 그러나, ESI는여전히 GetDlgItem 함수에대한포인터를가지고있으며, (2) 번구간첫줄의명령에의해 EDI는 SendMessage 함수에대한포인터를가지고있음을확인할수있다. 위에서 (3) 번, (5) 번구간은각각 (1) 번, (2) 번구간과유사한코드를보여주고있다. 여기서 (3) 번구간은대상아이템의번호만 0x03E8에서 0x03EA로바뀌었을뿐이다. 이는 [ 그림 2-4] 를보면 Edit2 편집상자의 Control ID가할당되어 GetDlgItem을수행하게되므로결국 (3) 번구간의끝에서 EAX레지스터에는 Edit2 편집상자의핸들이저장되게된다. (4) 번구간을분석해보면 EAX의값을우선 ESI레지스터에넣는데이는반화값이넘어가는것을의미하며여기서는 Edit1 편집상자에서읽어들인문자열의길이가 ESI레지스터로저장됨을의미한다. 이후 3줄은 Var_1 (SS:[EBP-C]) 을 EAX레지스터에할당하여스택에넣고 StrToInt함수를호출한다. StrToInt 함수는 null 로끝나는문자열을인자로받아서이를정수로변환하여반환하는함수로원형은다음과같다. int StrToInt(LPCTSTR lpsrc); 따라서, (4) 번구간의의미는 (3) 번구간을통해서 Edit1 편집상자에서읽어들인값을정수로변환 하는것을의미하며여기서우리는 Edit1 편집상자는최대 10 자리까지의숫자를입력해야한다는것 을알수있다. 이후 (5) 번구간은 (2) 번구간과유사하나좀더자세히보면중간에 SendMessage 함수에서 Msg 에 대한부분을결정하는부분이무언가를계산하도록되어있는것을알수있다. [ 17/34 ]

18 SUB EAX,200E PUSH EAX 해당부분을보면위의코드와같이 EAX에서 0x0200E4 를빼고그값을저장하도록되어있다. 여기서 EAX는 StrToInt 함수의반환값으로이는 Edit1 편집상자에입력된문자열을정수로형변환한값에서 0x0200E4( 십진수 ) 을뺀나머지값이스택에저장되는데이값이윈도우메시지코드로사용되는것을확인할수있다. 유형이 (2) 번구간과동일하므로여기서는결과값이 0x0D ( 십진수 13) 가나와야 Edit2 편집상자에서문자열을읽어올수있도록하는것임을유추할수있다. 따라서, Edit1 편집상자에들어가야할값은 임을알아낼수있다. Edit1 편집상자에대한입력값 : [ 18/34 ]

19 이제 B 부터의역어셈블코드에대한분석을하여야하는데그전에미리다음의사항을알아 두고넘어가도록한다. 해당부분에서부터는프로그램의 BSS 영역에사전에정의된문자열혹은데이터 값을넣어두고있으며, 올리디버거를통하여해당정보를파악해보면아래와같다. [ 그림 2-5] 사전에지정된변수의값및상수값 각메모리주소에는프로그래머가코딩시에선언한변수등에대한고정값이있을경우이를 PE 파일내에저장하게되며, 메모리에적재되었을경우에는스택이아닌힙혹은 bss 영역에저장된다. 위의화면덤프는해당부분을덤프한것으로프로그램분석과정에서쓰일각주소번지에저장되어있는값들을저장하면아래의표와같다. 메모리주소 16 진수값 아스키코드 F 6E W r o n g! F E r r o r! C 6C F 6E W e l l d o n 65 2E 00 e C 7F C 5E R E A X F \ ^ 5E 5F ^ _ H Q U R E C T h e p a s s 77 6F A w o r d i s : u s e r B 15 1C 13 0A F 원래 16진코드로할당되었을것으로분석되어아스키코드로변환하지않음 [ 표 2-2] 고정변수값정리표 [ 19/34 ]

20 B MOV ESI,MyCrackI LEA EDI,DWORD PTR SS:[EBP-28] MOVSD ; ESI가가리키는주소에서 EDI가가리키는주소로 4바이트복사 MOVSD ; 복사후 ESI, EDI는각 4바이트뒤를가리킴 MOVSD MOVSW ; ESI가가리키는주소에서 EDI가가리키는주소로 2바이트복사 ; 복사후 ESI, EDI는각 2바이트뒤를가리킴 XOR EBX,EBX A XOR ESI,ESI C CMP BYTE PTR SS:[EBP-28],BL F JE SHORT MyCrackI A A1 INC ESI (1) A2 CMP BYTE PTR SS:[EBP+ESI-28],BL A6 JNZ SHORT MyCrackI A A8 XOR ECX,ECX AA MOV EAX,ECX AC CDQ ; EAX의값을 EDX-EAX 조합으로확장 (32->64) AD IDIV ESI ; EDX-EAX를 ESI로나누어몫을 EAX에나머지를 EDX에저장 AF MOV AL,BYTE PTR SS:[EBP+EDX-28] B3 XOR BYTE PTR SS:[EBP+ECX-18],AL B7 INC ECX B8 CMP ECX,0B BB JL SHORT MyCrackI AA BD PUSH MyCrackI C2 CALL DWORD PTR DS:[<&KERNEL32.GetModuleHandleA>] C8 CMP EAX,EBX CA JE MyCrackI F (2) D0 LEA ECX,DWORD PTR SS:[EBP-18] D3 PUSH ECX D4 PUSH EAX D5 CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] DB CMP EAX,EBX ; 주소번지가 NULL인지비교 ( 오류검사 ) DD MOV DWORD PTR SS:[EBP+10],EAX ; 함수의주소번지를 wparam에저장 E0 JE MyCrackI F ; 오류시오류처리부분인 F로이동 위의 (1) 번구간의코드를분석하면 Var_3에메모리주소 번에저장된값을할당하는작업 을한뒤이값과변수 Var_2에 Edit2 편집상자에서얻은값을 XOR 연산을하게된다. 이때총 11번 [ 20/34 ]

21 의작업을하게되는데결과값은다시 Var_2에저장이된다. 이과정이 B ~ B8 번까지이다 BB번에서 Var_2에저장된값을살펴보면 Edit2 편집상자에넣은문자열과 Var_3 에들어있는문자열을 XOR 시켜생성된문자열이들어가있게된다. Edit2편집상자에 information 을넣었을경우 MessageBoxA라는문자열이저장된다. 이후 (2) 번구간은 번메모리번지에저장된 user32 문자열을스택에넣고 GetModuleHandleA 함수를호출한다. 이는 user32.dll 의핸들을얻기위한것으로핸들은 EAX 레지스터에저장된다. 세번째, 네번째줄은핸들을제대로얻지못하였을때의오류처리루틴이다. 다섯번째줄에서마지막줄까지는 GetProcAddress 함수를호출하는것으로함수의인자로필요한모듈의핸들과함수의이름을넣는데모듈의핸들은 GetModuleHandleA 함수를실행하고난뒤에 EAX에저장되어있고, 함수명은 Var_2 (SS:[EBP-18]) 에 MessageBoxA 로저장되어있으므로이를스택에넣고나서 CALL 명령을통해 GetProcAddress 함수를호출한다. GetModuleHandle과 GetProcAddress 의함수원형은다음과간다. HMODULE WINAPI GetModuleHandle( in_opt LPCTSTR lpmodulename); FARPROC WINAPI GetProcAddress( in HMODULE hmodule, in LPCSTR lpprocname); 즉, 위의과정을모두거치고난뒤 EAX 레지스터에는 GetProcAddress 함수의반환값인 MessageBoxA 의주소번지를저장하고있다. 여기서우리는두번째편집상자인 Edit2에들어갈문자열을추측하는과정이있는데이를어떻게추론해냈는지확인하지않고넘어왔다. 문자열 information이들어가야한다는것은위의코드분석과정에서 Edit2 편집상자의문자열과조합하여나온문자열 (Var_2 에저장된문자열 ) 이 user32.dll의 export table에저장되어있어야함을추론할수있다. 또한, 변환과정에서 0x0B번반복하여문자열의크기가 11글자임을유추할수있다. 그리고, 이중에서함수를호출할때사용되는인자의개수가분석한자료와일치하는 API를찾으면된다. PE Explorer를통해서살펴본 user32.dll 의 export table에존재하는함수는총 779개임을확인할수있다. [ 그림 2-6] user32.dll 의 Export 함수목록 [ 21/34 ]

22 004010E EB EE EF F F F F F F FC FD FE FF MOV ESI,MyCrackI C LEA EDI,DWORD PTR SS:[EBP-4C] MOVSD MOVSD MOVSD MOVSD MOVSW XOR EAX,EAX CMP BYTE PTR SS:[EBP-C],BL LEA EDI,DWORD PTR SS:[EBP-3A] STOSD STOSD STOSD STOSW STOSB MOV ESI,MyCrackI C LEA EDI,DWORD PTR SS:[EBP-28] A B C D E MOVSD MOVSD MOVSD MOVSD MOV DWORD PTR SS:[EBP+C],EBX JE SHORT MyCrackI F INC DWORD PTR SS:[EBP+C] MOV EAX,DWORD PTR SS:[EBP+C] CMP BYTE PTR SS:[EBP+EAX-C],BL D F JNZ SHORT MyCrackI XOR ESI,ESI CMP BYTE PTR SS:[EBP-18],BL JE SHORT MyCrackI D INC ESI CMP BYTE PTR SS:[EBP+ESI-18],BL B D F JNZ SHORT MyCrackI XOR ECX,ECX MOV EAX,ECX CDQ IDIV ESI MOV EAX,ECX [ 22/34 ]

23 MOVSX EDI,BYTE PTR SS:[EBP+EDX-18] B C F CDQ IDIV DWORD PTR SS:[EBP+C] MOVSX EAX,BYTE PTR SS:[EBP+EDX-C] CDQ IDIV EDI XOR BYTE PTR SS:[EBP+ECX-28],DL B C F INC ECX CMP ECX,0F JL SHORT MyCrackI F LEA EAX,DWORD PTR SS:[EBP-28] PUSH EAX LEA EAX,DWORD PTR SS:[EBP-4C] PUSH EAX CALL DWORD PTR DS:[<&KERNEL32.lstrcatA>] F PUSH EBX PUSH MyCrackI LEA EAX,DWORD PTR SS:[EBP-4C] PUSH EAX PUSH EBX A D CALL DWORD PTR SS:[EBP+10] JMP SHORT MyCrackI 위의역어셈블코드는 Edit1, Edit2 편집상자에입력된값이맞을경우메시지박스에출력할패스워드를 만들어서메시지박스로넣는과정을표현한것이다. 분석자료는추가작성하여올릴예정이며시험범위는현재분석된자료까지로제한할것이니참고바람. [ 23/34 ]

24 [ 별첨 1] 윈도우메시지 /* * Window Messages */ #define WM_NULL #define WM_CREATE #define WM_DESTROY #define WM_MOVE #define WM_SIZE 0x0000 0x0001 0x0002 0x0003 0x0005 #define WM_ACTIVATE /* * WM_ACTIVATE state values */ #define WA_INACTIVE 0 #define WA_ACTIVE 1 #define WA_CLICKACTIVE 2 0x0006 #define WM_SETFOCUS #define WM_KILLFOCUS #define WM_ENABLE #define WM_SETREDRAW #define WM_SETTEXT #define WM_GETTEXT #define WM_GETTEXTLENGTH #define WM_PAINT #define WM_CLOSE #define WM_QUERYENDSESSION #define WM_QUIT #define WM_QUERYOPEN #define WM_ERASEBKGND #define WM_SYSCOLORCHANGE #define WM_ENDSESSION #define WM_SHOWWINDOW #define WM_WININICHANGE 0x0007 0x0008 0x000A 0x000B 0x000C 0x000D 0x000E 0x000F 0x0010 0x0011 0x0012 0x0013 0x0014 0x0015 0x0016 0x0018 0x001A [ 24/34 ]

25 #if(winver >= 0x0400) #define WM_SETTINGCHANGE #endif /* WINVER >= 0x0400 */ WM_WININICHANGE #define WM_DEVMODECHANGE #define WM_ACTIVATEAPP #define WM_FONTCHANGE #define WM_TIMECHANGE #define WM_CANCELMODE #define WM_SETCURSOR #define WM_MOUSEACTIVATE #define WM_CHILDACTIVATE #define WM_QUEUESYNC 0x001B 0x001C 0x001D 0x001E 0x001F 0x0020 0x0021 0x0022 0x0023 #define WM_GETMINMAXINFO 0x0024 // end_r_winuser /* * Struct pointed to by WM_GETMINMAXINFO lparam */ typedef struct tagminmaxinfo { POINT ptreserved; POINT ptmaxsize; POINT ptmaxposition; POINT ptmintracksize; POINT ptmaxtracksize; } MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO; // begin_r_winuser #define WM_PAINTICON #define WM_ICONERASEBKGND #define WM_NEXTDLGCTL #define WM_SPOOLERSTATUS #define WM_DRAWITEM #define WM_MEASUREITEM #define WM_DELETEITEM #define WM_VKEYTOITEM #define WM_CHARTOITEM 0x0026 0x0027 0x0028 0x002A 0x002B 0x002C 0x002D 0x002E 0x002F [ 25/34 ]

26 #define WM_SETFONT 0x0030 #define WM_GETFONT 0x0031 #define WM_SETHOTKEY 0x0032 #define WM_GETHOTKEY 0x0033 #define WM_QUERYDRAGICON 0x0037 #define WM_COMPAREITEM 0x0039 #if(winver >= 0x0500) #define WM_GETOBJECT 0x003D #endif /* WINVER >= 0x0500 */ #define WM_COMPACTING 0x0041 #define WM_COMMNOTIFY 0x0044 /* no longer suported */ #define WM_WINDOWPOSCHANGING 0x0046 #define WM_WINDOWPOSCHANGED 0x0047 #define WM_POWER 0x0048 /* * wparam for WM_POWER window message and DRV_POWER driver notification */ #define PWR_OK 1 #define PWR_FAIL (-1) #define PWR_SUSPENDREQUEST 1 #define PWR_SUSPENDRESUME 2 #define PWR_CRITICALRESUME 3 #define WM_COPYDATA #define WM_CANCELJOURNAL 0x004A 0x004B // end_r_winuser /* * lparam of WM_COPYDATA message points to... */ typedef struct tagcopydatastruct { DWORD dwdata; DWORD cbdata; PVOID lpdata; } COPYDATASTRUCT, *PCOPYDATASTRUCT; [ 26/34 ]

27 // begin_r_winuser #if(winver >= 0x0400) #define WM_NOTIFY #define WM_INPUTLANGCHANGEREQUEST #define WM_INPUTLANGCHANGE #define WM_TCARD #define WM_HELP #define WM_USERCHANGED #define WM_NOTIFYFORMAT 0x004E 0x0050 0x0051 0x0052 0x0053 0x0054 0x0055 #define NFR_ANSI 1 #define NFR_UNICODE 2 #define NF_QUERY 3 #define NF_REQUERY 4 #define WM_CONTEXTMENU #define WM_STYLECHANGING #define WM_STYLECHANGED #define WM_DISPLAYCHANGE #define WM_GETICON #define WM_SETICON #endif /* WINVER >= 0x0400 */ 0x007B 0x007C 0x007D 0x007E 0x007F 0x0080 #define WM_NCCREATE #define WM_NCDESTROY #define WM_NCCALCSIZE #define WM_NCHITTEST #define WM_NCPAINT #define WM_NCACTIVATE #define WM_GETDLGCODE #define WM_SYNCPAINT #define WM_NCMOUSEMOVE #define WM_NCLBUTTONDOWN #define WM_NCLBUTTONUP #define WM_NCLBUTTONDBLCLK #define WM_NCRBUTTONDOWN #define WM_NCRBUTTONUP 0x0081 0x0082 0x0083 0x0084 0x0085 0x0086 0x0087 0x0088 0x00A0 0x00A1 0x00A2 0x00A3 0x00A4 0x00A5 [ 27/34 ]

28 #define WM_NCRBUTTONDBLCLK #define WM_NCMBUTTONDOWN #define WM_NCMBUTTONUP #define WM_NCMBUTTONDBLCLK 0x00A6 0x00A7 0x00A8 0x00A9 #define WM_KEYFIRST #define WM_KEYDOWN #define WM_KEYUP #define WM_CHAR #define WM_DEADCHAR #define WM_SYSKEYDOWN #define WM_SYSKEYUP #define WM_SYSCHAR #define WM_SYSDEADCHAR #define WM_KEYLAST 0x0100 0x0100 0x0101 0x0102 0x0103 0x0104 0x0105 0x0106 0x0107 0x0108 #if(winver >= 0x0400) #define WM_IME_STARTCOMPOSITION #define WM_IME_ENDCOMPOSITION #define WM_IME_COMPOSITION #define WM_IME_KEYLAST #endif /* WINVER >= 0x0400 */ 0x010D 0x010E 0x010F 0x010F #define WM_INITDIALOG #define WM_COMMAND #define WM_SYSCOMMAND #define WM_TIMER #define WM_HSCROLL #define WM_VSCROLL #define WM_INITMENU #define WM_INITMENUPOPUP #define WM_MENUSELECT #define WM_MENUCHAR #define WM_ENTERIDLE #if(winver >= 0x0500) #define WM_MENURBUTTONUP #define WM_MENUDRAG #define WM_MENUGETOBJECT 0x0110 0x0111 0x0112 0x0113 0x0114 0x0115 0x0116 0x0117 0x011F 0x0120 0x0121 0x0122 0x0123 0x0124 [ 28/34 ]

29 #define WM_UNINITMENUPOPUP #define WM_MENUCOMMAND #endif /* WINVER >= 0x0500 */ 0x0125 0x0126 #define WM_CTLCOLORMSGBOX #define WM_CTLCOLOREDIT #define WM_CTLCOLORLISTBOX #define WM_CTLCOLORBTN #define WM_CTLCOLORDLG #define WM_CTLCOLORSCROLLBAR #define WM_CTLCOLORSTATIC 0x0132 0x0133 0x0134 0x0135 0x0136 0x0137 0x0138 #define WM_MOUSEFIRST #define WM_MOUSEMOVE #define WM_LBUTTONDOWN #define WM_LBUTTONUP #define WM_LBUTTONDBLCLK #define WM_RBUTTONDOWN #define WM_RBUTTONUP #define WM_RBUTTONDBLCLK #define WM_MBUTTONDOWN #define WM_MBUTTONUP #define WM_MBUTTONDBLCLK 0x0200 0x0200 0x0201 0x0202 0x0203 0x0204 0x0205 0x0206 0x0207 0x0208 0x0209 #if (_WIN32_WINNT >= 0x0400) (_WIN32_WINDOWS > 0x0400) #define WM_MOUSEWHEEL 0x020A #define WM_MOUSELAST 0x020A #else #define WM_MOUSELAST 0x0209 #endif /* if (_WIN32_WINNT < 0x0400) */ #if(_win32_winnt >= 0x0400) #define WHEEL_DELTA 120 /* Value for rolling one detent */ #endif /* _WIN32_WINNT >= 0x0400 */ #if(_win32_winnt >= 0x0400) #define WHEEL_PAGESCROLL (UINT_MAX) /* Scroll one page */ [ 29/34 ]

30 #endif /* _WIN32_WINNT >= 0x0400 */ #define WM_PARENTNOTIFY #define WM_ENTERMENULOOP #define WM_EXITMENULOOP 0x0210 0x0211 0x0212 #if(winver >= 0x0400) #define WM_NEXTMENU // end_r_winuser 0x0213 typedef struct tagmdinextmenu { HMENU hmenuin; HMENU hmenunext; HWND hwndnext; } MDINEXTMENU, * PMDINEXTMENU, FAR * LPMDINEXTMENU; // begin_r_winuser #define WM_SIZING 0x0214 #define WM_CAPTURECHANGED 0x0215 #define WM_MOVING 0x0216 // end_r_winuser #define WM_POWERBROADCAST 0x0218 // r_winuser pbt // begin_pbt #define PBT_APMQUERYSUSPEND #define PBT_APMQUERYSTANDBY 0x0000 0x0001 #define PBT_APMQUERYSUSPENDFAILED #define PBT_APMQUERYSTANDBYFAILED 0x0002 0x0003 #define PBT_APMSUSPEND #define PBT_APMSTANDBY 0x0004 0x0005 #define PBT_APMRESUMECRITICAL #define PBT_APMRESUMESUSPEND #define PBT_APMRESUMESTANDBY 0x0006 0x0007 0x0008 [ 30/34 ]

31 #define PBTF_APMRESUMEFROMFAILURE 0x #define PBT_APMBATTERYLOW #define PBT_APMPOWERSTATUSCHANGE 0x0009 0x000A #define PBT_APMOEMEVENT #define PBT_APMRESUMEAUTOMATIC // end_pbt 0x000B 0x0012 // begin_r_winuser #define WM_DEVICECHANGE 0x0219 #endif /* WINVER >= 0x0400 */ #define WM_MDICREATE #define WM_MDIDESTROY #define WM_MDIACTIVATE #define WM_MDIRESTORE #define WM_MDINEXT #define WM_MDIMAXIMIZE #define WM_MDITILE #define WM_MDICASCADE #define WM_MDIICONARRANGE #define WM_MDIGETACTIVE 0x0220 0x0221 0x0222 0x0223 0x0224 0x0225 0x0226 0x0227 0x0228 0x0229 #define WM_MDISETMENU #define WM_ENTERSIZEMOVE #define WM_EXITSIZEMOVE #define WM_DROPFILES #define WM_MDIREFRESHMENU 0x0230 0x0231 0x0232 0x0233 0x0234 #if(winver >= 0x0400) #define WM_IME_SETCONTEXT #define WM_IME_NOTIFY #define WM_IME_CONTROL #define WM_IME_COMPOSITIONFULL 0x0281 0x0282 0x0283 0x0284 [ 31/34 ]

32 #define WM_IME_SELECT #define WM_IME_CHAR #endif /* WINVER >= 0x0400 */ #if(winver >= 0x0500) #define WM_IME_REQUEST #endif /* WINVER >= 0x0500 */ #if(winver >= 0x0400) #define WM_IME_KEYDOWN #define WM_IME_KEYUP #endif /* WINVER >= 0x0400 */ 0x0285 0x0286 0x0288 0x0290 0x0291 #if(_win32_winnt >= 0x0400) #define WM_MOUSEHOVER #define WM_MOUSELEAVE #endif /* _WIN32_WINNT >= 0x0400 */ 0x02A1 0x02A3 #define WM_CUT #define WM_COPY #define WM_PASTE #define WM_CLEAR #define WM_UNDO #define WM_RENDERFORMAT #define WM_RENDERALLFORMATS #define WM_DESTROYCLIPBOARD #define WM_DRAWCLIPBOARD #define WM_PAINTCLIPBOARD #define WM_VSCROLLCLIPBOARD #define WM_SIZECLIPBOARD #define WM_ASKCBFORMATNAME #define WM_CHANGECBCHAIN #define WM_HSCROLLCLIPBOARD #define WM_QUERYNEWPALETTE #define WM_PALETTEISCHANGING #define WM_PALETTECHANGED #define WM_HOTKEY 0x0300 0x0301 0x0302 0x0303 0x0304 0x0305 0x0306 0x0307 0x0308 0x0309 0x030A 0x030B 0x030C 0x030D 0x030E 0x030F 0x0310 0x0311 0x0312 #if(winver >= 0x0400) #define WM_PRINT 0x0317 [ 32/34 ]

33 #define WM_PRINTCLIENT 0x0318 #define WM_HANDHELDFIRST #define WM_HANDHELDLAST 0x0358 0x035F #define WM_AFXFIRST #define WM_AFXLAST #endif /* WINVER >= 0x0400 */ 0x0360 0x037F #define WM_PENWINFIRST #define WM_PENWINLAST 0x0380 0x038F #if(winver >= 0x0400) #define WM_APP #endif /* WINVER >= 0x0400 */ 0x8000 /* * NOTE: All Message Numbers below 0x0400 are RESERVED. * * Private Window Messages Start Here: */ #define WM_USER 0x0400 #if(winver >= 0x0400) /* wparam for WM_SIZING message */ #define WMSZ_LEFT 1 #define WMSZ_RIGHT 2 #define WMSZ_TOP 3 #define WMSZ_TOPLEFT 4 #define WMSZ_TOPRIGHT 5 #define WMSZ_BOTTOM 6 #define WMSZ_BOTTOMLEFT 7 #define WMSZ_BOTTOMRIGHT 8 #endif /* WINVER >= 0x0400 */ #ifndef NONCMESSAGES [ 33/34 ]

34 [ 별첨 2] [ 34/34 ]

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

Microsoft PowerPoint - 09-CE-5-윈도우 핸들 순천향대학교컴퓨터학부이상정 1 학습내용 윈도우핸들 윈도우찿기 윈도우확인및제거 윈도우숨기기 윈도우포커스 윈도우텍스트 윈도우핸들 순천향대학교컴퓨터학부이상정 3 핸들 (handle) 윈도우에서구체적인어떤대상을구분하기위해지정되는고유의번호 32비트의정수값 핸들은운영체제가발급하고사용자가이값을사용 실제값이무엇인지는몰라도상관없음 윈도우, DC, 브러쉬등등 순천향대학교컴퓨터학부이상정

More information

1장 윈도우 프로그래밍 들어가기

1장 윈도우 프로그래밍 들어가기 1 장 윈도우프로그래밍들어가기 김성영교수 금오공과대학교 컴퓨터공학부 예제 다음프로그램은언제종료할까? #include #define QUIT -1 int Func(void) int i; cout > i; return i; void main(void) int Sum = 0, i; cout

More information

CKKeyPro 적용가이드

CKKeyPro 적용가이드 3.20 사이버테러악성코드분석보고서 라온시큐어보안기술연구팀 작성일 : 2013. 03 페이지 : 1/15 Introduction 2013년 3월 20일오후, MBC, KBS, YTN, 농협, 신한은행, 제주은행전산망장애가동시에발생하였다. 피해기관들의호스트약 500여대에오류메시지가화면에나타났으며악성코드에감염된호스트는사용할수없는상태가되었다. 현재까지정확한침투경로가밝혀지지않고있다.

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

04장 메시지 처리 유형

04장 메시지 처리 유형 4 장 메시지처리유형 김성영교수 금오공과대학교 컴퓨터공학부 메시지처리유형 윈도우에서발생하는이벤트에대응하는윈도우메시지를처리 2 장및 3 장의실습예제 자식윈도우에서발생한이벤트를부모윈도우에서처리 WM_COMMAND 메시지처리 실습 4.2 자식윈도우에서발생한사건유형을구분하여처리 Notification code 처리 실습 4.7 Notification code 의한계를극복하여처리

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

(Microsoft Word - \270\256\271\366\275\314 \271\370\277\252.doc)

(Microsoft Word - \270\256\271\366\275\314 \271\370\277\252.doc) Smashing the Signature (Korean Translation V.08-01 01) 안티바이러스의시그니쳐탐색기법을우회하기위해 PE 파일의 헤더및속성을수정하여코드섹션을암호화하는기법을소개함. Hacking Group OVERTIME MRB00 2008.09.10 Title:

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

윈도우즈 프로그래밍

윈도우즈 프로그래밍 8 장대화상자 VS 2015 008. 윈도우프로그래밍 DB & Mining LAB. Korea University Updated 2010. 10. 23 Updated 2012. 10. 02 Updated 2015. 09. 23 이종욱 eastwest9@korea.ac.kr 1 8-1 대화상자 (1/3) 사용자로부터끊임없이지시를받고사용자의지시에따라작업을하고 작업한결과를사용자에게보고한다.

More information

예제와 함께 배워보는 OllyDbg사용법

예제와 함께 배워보는 OllyDbg사용법 초보자를위한예제와함께 배워보는 OllyDbg 사용법 -1 부 - By Beist Security Study Group (http://beist.org) 요약 : 이문서는 Ollydbg 프로그램을이용하여 Reverse Engineering을하는방법에대해서다룬다. 초보자를위하여작성된문서이며예제와함께 Ollydbg의각기능에대해서알아본다. 주로기초적인내용을다루고있다.

More information

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D> 01 : 윈도우프로그래밍기초 학습목표 윈도우운영체제와윈도우응용프로그램의특징을이해한다. SDK 응용프로그램작성과정, 기본구조, 동작원리를이해한다. MFC 응용프로그램작성과정, 기본구조, 동작원리를이해한다. 비주얼 C++ 개발환경사용법을익힌다. 윈도우운영체제특징 (1/3) 그래픽사용자인터페이스 1 윈도우운영체제특징 (2/3) 메시지구동구조 이벤트발생... 대기

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

Microsoft PowerPoint - 04windows.ppt

Microsoft PowerPoint - 04windows.ppt Game Programming I Windows 프로그래밍 (1) March 27, 2006 목표 윈도우프로그래밍에서이용되는이벤트구동프로그래밍모델의이해 Direct3D 를이용하는윈도우어플리케이션의작성을위한최소한의코드이해 윈도우 (Win32) 어플리케이션 Direct3D API ( 어플리케이션프로그래밍인터페이스 ) 를이용하기위해필요 Win32 API 를이용해작성

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Microsoft PowerPoint - 09-CE-14-리스트콤보박스

Microsoft PowerPoint - 09-CE-14-리스트콤보박스 순천향대학교컴퓨터학부이상정 1 학습내용 리스트박스컨트롤 다이얼로그와리스트박스 콤보박스컨트롤 순천향대학교컴퓨터학부이상정 2 리스트박스컨트롤 순천향대학교컴퓨터학부이상정 3 리스트박스컨트롤 사용자가선택할수있는항목들을여러개나열해두고선택할수있는컨트롤 윈도우클래스의이름은 "listbox" 생성예 hlist=createwindow(l"listbox",null,ws_child

More information

Deok9_Exploit Technique

Deok9_Exploit Technique Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

No Slide Title

No Slide Title Copyright, 2017 Multimedia Lab., UOS 시스템프로그래밍 (Assembly Code and Calling Convention) Seong Jong Choi chois@uos.ac.kr Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea

More information

MFC 프로그래밍

MFC 프로그래밍 윈도우프로그래밍 Visual C++ 2010 MFC Programming 1 장. 윈도우프로그래밍기초 윈도우운영체제의특징 그래픽사용자인터페이스 시스템메뉴타이틀바메뉴최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 상태표시줄 스크롤바 윈도우운영체제의특징 메시지구동구조 윈도우운영체제의특징 멀티태스킹과멀티스레딩 멀티태스킹 (Multitasking) 운영체제가여러개의응용프로그램을동시에실행

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

03_queue

03_queue Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

윈도우즈 프로그래밍

윈도우즈 프로그래밍 윈도우프로그래밍및실습 002. 윈도우프로그래밍의기본 DB & MINING LAB. Korea University since 2007. 09. 03 updated 2012. 08. 18 last updated 2015. 08. 25 이종욱 eastwest9@korea.ac.kr 1 Purpose of this chapter What is a Window programming

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

=

= written by vangelis(vangelis@wowhacker.org) 0 0000 8 1000 1 0001 9 1001 2 0010 10 1010 3 0011 11 1011 4 0100 12 1100 5 0101 13 1101 6 0110 14 1110 7 0111 15 1111 110112 + 100012 = 1011002 110 0000 0101

More information

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt Overview 윈도우프로그래밍기초 윈도우운영체제와윈도우응용프로그램의특징이해 SDK 응용프로그램작성과정, 기본구조, 동작원리이해 MFC 응용프로그램작성과정, 기본구조, 동작원리이해 HCI Programming 2 (321190) 2008년가을학기 9/16/2008 박경신 2 Windows.NET 구조적프로그램에서객체지향프로그램으로 SDK(Software Development

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C

02.Create a shellcode that executes /bin/sh Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes /bin/sh C 02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C language Assembly code Change permissions(seteuid())

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

Microsoft Word - building the win32 shellcode 01.doc

Microsoft Word - building the win32 shellcode 01.doc Win32 Attack 1. Local Shellcode 작성방법 By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com Abstract 이글은 MS Windows 환경에서 shellcode 를작성하는방법에대해서설명하고있다. Win32 는 *nix 환경과는사뭇다른 API 호출방식을사용하기때문에조금복잡하게둘러서 shellcode

More information

hlogin2

hlogin2 0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS

More information

Microsoft PowerPoint - a9.ppt [호환 모드]

Microsoft PowerPoint - a9.ppt [호환 모드] 9.1 이장의내용 9 장. 스트링과배열 스트링프리미티브명령어 2 차원배열 정수배열검색및정렬 컴퓨터정보통신 어셈블리언어 2 9.2 스트링프리미티브명령어 String Primitive Instructions 의동작 String Primitive Instructions Instructions 설명 동작 MOVS(B,W,D) Move string data M[EDI]

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Win32 API Windows Programming 1 http://idb.korea.ac.kr DB & Mining LAB. Korea Univ. 최종업데이트 : 2012. 08. 14 1 컴퓨터시스템의주요구성요소 2 2 컴퓨터하드웨어구성 Fetch : 메인메모리에저장되어있는명령어를 CPU 로 Decode : 컨트롤유닛에의해분석 Execution : ALU

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

Microsoft PowerPoint - hci2-lecture5.ppt

Microsoft PowerPoint - hci2-lecture5.ppt Overview Mouse, Keyboard Message Mouse Message Keyboard Message HCI Programming 2 (321190) 2008년가을학기 10/15/2008 박경신 2 마우스기초 마우스처리 윈도우운영체제는마우스와관련된모든변화를형태로프로그램에게전달한다. 마우스기초 마우스전달 마우스는마우스커서밑에있는윈도우가받는다. 마우스

More information

Microsoft PowerPoint - a10.ppt [호환 모드]

Microsoft PowerPoint - a10.ppt [호환 모드] Structure Chapter 10: Structures t and Macros Structure 관련된변수들의그룹으로이루어진자료구조 template, pattern field structure를구성하는변수 (cf) C언어의 struct 프로그램의 structure 접근 entire structure 또는 individual fields Structure는

More information

윈도우 프로그래밍

윈도우 프로그래밍 Windows Programming 2013. 3 출처 : 인터넷에서수집한 PT 자료 1. Overview Getting Started (1) 관련도서 Visual C++/API 프로젝트따라하기, 오진환, 컴스페이스 Programming Windows, Charles Petzold, Microsoft Press Windows application Programming

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co Basic reverse engineering on x86 This is for those who want to learn about basic reverse engineering on x86 (Feel free to use this, email me if you need a keynote version.) v0.1 SeungJin Beist Lee beist@grayhash.com

More information

<4D F736F F D20B9D9C0CCB7B5B9D9C0CCB7AFBDBA5FBCF6C1A42E646F63>

<4D F736F F D20B9D9C0CCB7B5B9D9C0CCB7AFBDBA5FBCF6C1A42E646F63> Virut 바이러스공격 ASEC 분석 1 팀고흥환선임연구원 해마다접수되는악성코드의통계를보면대부분이인터넷웜또는트로이목마가대부분을차지하며, 파일에기생하는바이러스는그수가적어지는것이추세이다. 그도그럴것이최근의악성코드특징은개인의능력과시가아닌돈과연관되는악성코드작성이대부분이기때문이다. 그렇다면 Virut 바이러스가인터넷웜과트로이목마를제치고국내뿐만아니라해외에서도큰피해를입히고있는이유가무엇인지,

More information

Microsoft Word - hook3.doc

Microsoft Word - hook3.doc 개발자를위한윈도우후킹테크닉 메시지훅이용한 Spy++ 흉내내기 우리는지난강좌에서후킹을하는기초적인방법과사용되는 API 들을비롯해서후킹함수가호출되는컨텍스트에대해서배웠다. 이번강좌에서는 WH_GETMESSAGE 훅을통해서 Spy++ 과유사한프로그램을제작할것이다. 이과정에서 Windows 애플리케이션이메시지를처리하는과정과윈도우를열거하는방법에대해서알아보도록하자. 목차

More information

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

Codegate Preliminary Match Repot

Codegate Preliminary Match Repot Codegate Preliminary Match Repot - 2008 Historymaker 소개글 Code gate - 2008 뭐알아서참고.. ㅡㅡ ;;; 목차 1 4 2012.06.15 20:19 ================================================================== / Codegate Preliminary

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT 2007. 2. 5 PLATFORM TEAM 정용학 차례 CONTAINER & WIDGET SPECIAL WIDGET 질의응답및토의 2 Container LCD에보여지는화면한개 1개이상의 Widget을가짐 3 Container 초기화과정 ui_init UMP_F_CONTAINERMGR_Initialize UMP_H_CONTAINERMGR_Initialize

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

Microsoft PowerPoint - a8a.ppt [호환 모드]

Microsoft PowerPoint - a8a.ppt [호환 모드] 이장의내용 8 장고급프로시저 스택프레임 재귀 (Recursion) Invoke, Addr, Proc, Proto 디렉티브 다중모듈프로그램작성 2 8.2 스택프레임 Stack Frame ( 또는 activation record) procedure 의다음사항을저장한 영역 urn address passed parameter ( 스택매개변수 ) saved register

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt Windows 와 C++ MFC Message Map HCI Programming 2 (321190) 2008년가을학기 10/14/2008 박경신 C++ 의다형성 (Polymorphsim) 기반클래스의어떤멤버함수를파생클래스에서재정의 (overriding) 하기위해서는기반클래스의그멤버함수가가상함수 (virtual function) 로정의되어야함 MFC 의 CWnd

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

Microsoft PowerPoint - e pptx

Microsoft PowerPoint - e pptx Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt Overview 윈도우프로그래밍기초 윈도우운영체제와윈도우응용프로그램의특징이해 SDK 응용프로그램작성과정, 기본구조, 동작원리이해 MFC 응용프로그램작성과정, 기본구조, 동작원리이해 HCI Programming 2 (321190) 2007년가을학기 9/13/2007 박경신 2 윈도우운영체제특징 그래픽사용자인터페이스 (Graphical User Interface,

More information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

Chapter 1. MFC 시작하기

Chapter 1.  MFC 시작하기 Chapter 1. MFC 시작하기 1. MFC(Microsoft Foundation Class) 개요 2. Visual Studio 2015 프로그램설치하기 3. 마우스클릭프로그램작성 4. 그림그리기프로그램작성 5. 마우스좌표값구하기프로그램작성 1 1.1. MFC 개요 2 1.1.1. C++ 언어 객체지향언어 (Object-Oriented Programming,

More information

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

Microsoft Word - Static analysis of Shellcode.doc

Microsoft Word - Static analysis of Shellcode.doc Static analysis of Shellcode By By Maarten Van Horenbeeck 2008.09.03 2008.09.03 본문서에서는악성코드에서사용하는난독화되어있는쉘코드 를분석하는방법에대한 Maarten Van Horenbeeck 의글을번역 한것이다. Hacking Group OVERTIME OVERTIME force

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

Reusing Dynamic Linker For Exploitation Author : Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn

Reusing Dynamic Linker For Exploitation Author :  Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn Reusing Dynamic Linker For Exploitation Author : pwn3r @ B10S @WiseGuyz Date : 2012 / 05 / 13 Contact : austinkwon2@gmail.com Facebook : fb.me/kwonpwn3r Abstract 대부분의 Unix 에선공유라이브러리를메모리에로드하고프로그램과 link

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드

목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드 취약점분석보고서 [Aviosoft Digital TV Player Professional 1.x Stack Buffer Overflow] 2012-08-08 RedAlert Team 강동우 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 1.2. 취약점요약... 1 1.3. 취약점정보... 1 1.4. 취약점대상시스템목록... 1 2. 분석...

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

Visual Basic 반복문

Visual Basic 반복문 학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For

More information

3.20 테러 악성코드바이너리분석 손충호 (StolenByte) WOWHACKER Group 해당문서는 WOWHACKER Group 의문서이므로, 무단도용및수 정및변조는할수없습니다. 페이지 1 / 20

3.20 테러 악성코드바이너리분석 손충호 (StolenByte) WOWHACKER Group 해당문서는 WOWHACKER Group 의문서이므로, 무단도용및수 정및변조는할수없습니다. 페이지 1 / 20 3.20 테러 악성코드바이너리분석 손충호 (StolenByte) stolenbyte@wowhacker.org WOWHACKER Group 2013-03-20 해당문서는 WOWHACKER Group 의문서이므로, 무단도용및수 정및변조는할수없습니다. 페이지 1 / 20 전체적인공격프로세스 페이지 2 / 20 1. 바이너리가사용할 LoadLibrary 하여함수 Load

More information

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

More information

untitled

untitled int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx CrackMe 15.exe (in Simples) 문제풀이 동명대학교정보보호동아리 THINK www.mainthink.net 강동현 Blog: johnghb.tistory.com e-mail: cari2052@gmail.com 1 목차 : 1. 문제설명및기본분석 --------------------------- P. 03 2 상세분석 ---------------------------

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

More information

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는 Dong Yang E&P 인버터 Modbus Monitoring Protocol 2018. 08. 27 Sun Spec (Modbus-RTU) -. Modbus Protocol 각 Field에대한설명 Frame갂의구별을위한최소한의시갂 BaudRate 9600에서 1bit 젂송시갂은 Start 0.104msec, (3.5 character Times, 1 Character

More information

Microsoft PowerPoint - a6.ppt [호환 모드]

Microsoft PowerPoint - a6.ppt [호환 모드] 이장의내용 6 장조건부처리 부울과비교명령어 조건부점프 조건부루프명령어 조건부구조 컴퓨터정보통신 어셈블리언어 2 6.2 부울과비교명령어 부울명령어 Instructions ti 동작 AND dst, src OR dst, src XOR dst, src NOT dst dst dst AND src dst dst OR src dst dst XOR src dst NOT

More information

Frama-C/JESSIS 사용법 소개

Frama-C/JESSIS 사용법 소개 Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie

More information

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont 12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다. 12.1 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont( in LPDIRECT3DDEVICE9 pdevice, in INT Height, in UINT

More information

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터(강의) 쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조

More information

BY-FDP-4-70.hwp

BY-FDP-4-70.hwp RS-232, RS485 FND Display Module BY-FDP-4-70-XX (Rev 1.0) - 1 - 1. 개요. 본 Display Module은 RS-232, RS-485 겸용입니다. Power : DC24V, DC12V( 주문사양). Max Current : 0.6A 숫자크기 : 58mm(FND Size : 70x47mm 4 개) RS-232,

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information