문서의 제목 나눔고딕B, 54pt

Size: px
Start display at page:

Download "문서의 제목 나눔고딕B, 54pt"

Transcription

1 Windows Debugging (2) x86 stack inside 레드스톤소프트김태형부장

2 Register 기초

3 3 / 60 X86 Register 특별한목적으로사용되는레지스터 EIP : 다음에실행될 Instruction의주소를 pointing EAX : 함수가리턴할때리턴값을저장. 평소에는범용으로사용됨 ESP : 현재스택의가장위 ( 마지막 push된원소 ) 를 pointing Stack에새로운원소가 PUSH될때마다 ESP 감소. POP될때마다 ESP 증가 EBP : 현재스택의가장바닥 (Base) 를 pointing 나머지레지스터. EBX, ECX, EDX, ESI, EDI 등등 ( 이런게있구나 )

4 4 / 8 Volatile Register.vs. Non-Volatile Register Volatile Register 다른함수를호출하고나면값이달라지는레지스터 EAX, ECX, EDX, ST0 - ST7, ES and GS Non-Volatile Register 다른함수를호출한후에도값이유지되는레지스터 EBX, EBP, ESP, EDI, ESI, CS and DS Non-Volatile Register 를다른목적으로사용하려면먼저 Stack 에원래값을백업 함수가리턴되기직전에백업받은원래값을 Non-Volatile Register 에복원 Non-Volatile Register를사용전에백업받는부분 KERNELBASE!CreateFileW+0x5e: 76d7c2f7 53 push ebx 76d7c2f8 56 push esi 76d7c2f9 8b7508 mov esi,dword ptr [ebp+8] 76d7c2fc 56 push esi 76d7c2fd 8d45d8 lea eax,[ebp-28h] 76d7c push eax 백업된 Non-Volatile Register 를복원하는부분 KERNELBASE!CreateFileW+0x48f: 76d7c728 5f pop edi KERNELBASE!CreateFileW+0x490: 76d7c729 5e pop esi 76d7c72a 5b pop ebx KERNELBASE!CreateFileW+0x492: 76d7c72b c9 leave 76d7c72c c21c00 ret 1Ch

5 Assembly 기초

6 6 / 8 Assembly 를공부해야하는이유?? 대부분은 분석 만할줄알면된다. api 안에서죽었는데 왜죽었는지모르겠을때. OS 의동작원리가궁금할때. (Windows OS이모듈이나 api 분석 ) 다른모듈을 Reversing 해야할때 ( 악성코드??) pdb가없는모듈을디버깅할때 프로그램이코드와부합하지않는동작을할때 가끔은 작성 해야할때도있다. 후킹코드작성시

7 7 / 8 opcode, operand opcode : assembly 의명령어 ( = instruction) operand : opcode 의연산을수행하는데필요한 Data operand 가두개인경우오른쪽 operand 가 src, 왼쪽 operand 가 dst. (disassembler 의종류에따라다를수도있다.) leave ; opcode only dec eax ; opcode + 1 operand mov dword ptr [ebp+0ch], h ; opcode + 2 operands dst operand src operand

8 8 / 8 dword ptr [ ] src 에사용될때는 [ ] 안에있는주소값이가리키는메모리에저장된값 을의미. (pointer indirection) dst 에사용될때는 [ ] 안에있는주소값이가리키는메모리에저장하라 는의미. dword 는포인터의사이즈를의미. (char* byte ptr[], short* word ptr[]) 디스어셈블러의종류에따라 dword ptr [] 를 [] 로표현하는경우도있으므로, [] 안의값을그대로참조할지 [] 안의주소가가리키는메모리에저장된값을참조할지여부는 dword ptr 키워드의유무가아니라 operator 의종류 에따라판단해야함. mov BYTE PTR [ebx], 2; mov WORD PTR [ebx], 2; mov DWORD PTR [ebx], 2;

9 9 / 8 MOV, LEA mov 우변의 값 을좌변에대입 좌변에는레지스터와메모리주소가모두가능, 우변에는레지스터 / 메모리주소 / 상수가모두가능 ( 우변 / 좌변에모두주소가올수는없음.) 우변에주소가올경우주소값대신해당주소에저장된 값 이좌변에대입됨. mov mov mov dword ptr [ebp-38h],2 ; 2라는상수값을 ebp-38h 위치에저장 eax,dword ptr [ebp+14h] ; ebp+14h에저장된 값 을 eax에저장 dword ptr [ebp-54h],esi ; esi 에들어있는값을 ebp-54h 위치에저장 lea 우변의 주소값 을좌변에대입 좌변에는레지스터만가능, 우변에는메모리주소사용가능 lea eax,[ebp-20h] ; ebp 의주소값에서 20h 뺀 주소값 을 eax 에저장

10 10 / 8 PUSH, POP push 주어진 operand 값을스택의꼭대기에 push 함. operand 에레지스터, 상수, 주소값이모두올수있음. operand 에주소가올경우해당주소에저장된 값 이대입됨. pop push dword ptr [ebp-8] sub esp, 4h / mov eax, dword ptr [ebp-8] / mov dword ptr [esp], eax push push push edi 0B7h dword ptr [ebp-8] 현재스택의꼭대기값을 pop 해서주어진레지스터에대입함. pop edi mov edi, dword ptr [esp] / add esp 4h pop esi pop dword ptr [ebp-8]

11 11 / 8 Flag 비교문 (test, cmp) 수행시결과가 Flag에임시저장됨. Conditional jump 시조건판단을위해 Flag값을참조함. test나 cmp 결과가어딘가에저장되는구나 정도로이해!! CF - carry flagset on high-order bit carry or borrow; cleared otherwise PF - parity flagset if low-order eight bits of result contain an even number of "1" bits; cleared otherwise ZF - zero flagsset if result is zero; cleared otherwise SF - sign flagset equal to high-order bit of result (0 if positive 1 if negative) OF - overflow flagset if result is too large a positive number or too small a negative number (excluding sign bit) to fit in destination operand; cleared otherwise

12 12 / 8 CMP, TEST cmp 두 operand를비교하기위해오른쪽 operand에서왼쪽 operand를뺀다. 결과는 ZF, CF 등에저장됨. je, jle 등의 opcode와함께사용됨 cmp jbe word ptr [ebp-28h],ax KERNELBASE!CreateFileW+0x8e (76d7c327) test 두 operand 를비교하기위해두 operand 의 AND 연산을수행. ( 결과는 ZF 등에저장 ) 분기문에서는주로 0 인지아닌지를비교하기위해사용. test je eax,eax KERNELBASE!CreateFileW+0x237 (76d7c4d0) je 와 jz 은동일한 opcode!! (jz 로해석!!)

13 13 / 8 조건 jump JE 와 JZ, JNE 와 JNZ 는동일한 OpCode 임 JA 는 unsigned, JG 는 signed 비교 JB 는 unsigned, JL 는 signed 비교 jumps.html

14 14 / 8 if 문패턴분석 if 문의 assembly 패턴!! 1. cmp / test 2. 조건부 jmp 학습용샘플빌드시에는 Optimize 옵션을 Disable 로설정 (Default : Maximize Speed)

15 15 / 8 for 문패턴분석 push mov push mov jmp ebp ebp,esp ecx dword ptr [ebp-4],1 SimpleCall!GuGuDanFor+0x16 (012e1096) nindex = 1 for 문의 assembly 패턴!! 1. 최초실행시한블럭건너뜀 2. 건너뛰었던블록으로되돌아옴 (jmp) 3. 되돌아온위치에 add 4. add 다음에 cmp/test + jmp 거슬러올라오는 jmp 문은반복문의가장큰특징 SimpleCall!GuGuDanFor+0xd mov eax,dword ptr [ebp-4] add eax,1 mov dword ptr [ebp-4],eax nindex++ SimpleCall!GuGuDanFor+0x16 cmp dword ptr [ebp-4],9 jg SimpleCall!GuGuDanFor+0x3c (012e10bc) nindex <= 9 가아니면 SimpleCall!GuGuDanFor+0x1c mov ecx,dword ptr [ebp+8] imul ecx,dword ptr [ebp-4] push ecx mov edx,dword ptr [ebp-4] push edx mov eax,dword ptr [ebp+8] push eax push offset SimpleCall!GS_ExceptionPointers+0x40 (012e212c) call dword ptr [SimpleCall!_imp wprintf (012e20a0)] add esp,10h jmp SimpleCall!GuGuDanFor+0xd (012e108d) SimpleCall!GuGuDanFor+0x3c mov esp,ebp pop ebp ret

16 16 / 8 for 문패턴분석 add 문 cmp/test + 조건부 jmp 문 1 최초 1 회는조건 Check 를 Skip!! 2 거슬러되돌아오는흐름 ( 도착지점근처에 loop index 값 add 하는코드 ) Do Something 3 탈출조건 jmp

17 17 / 8 while 문패턴분석 SimpleCall!GuGuDanWhile push ebp mov ebp,esp push ecx mov dword ptr [ebp-4],1 SimpleCall!GuGuDanWhile+0xb cmp dword ptr [ebp-4],9 jg SimpleCall!GuGuDanWhile+0x3a (012e103a) while 문의 assembly 패턴!! 1. 반복문시작부분으로되돌아옴 (jmp) 2. 되돌아온위치근처에탈출문 SimpleCall!GuGuDanWhile+0x11 mov eax,dword ptr [ebp+8] imul eax,dword ptr [ebp-4] push eax mov ecx,dword ptr [ebp-4] push ecx mov edx,dword ptr [ebp+8] push edx push offset SimpleCall!GS_ExceptionPointers+0x8 (012e20f4) call dword ptr [SimpleCall!_imp wprintf (012e20a0)] add esp,10h mov eax,dword ptr [ebp-4] add eax,1 mov dword ptr [ebp-4],eax jmp SimpleCall!GuGuDanWhile+0xb (012e100b) SimpleCall!GuGuDanWhile+0x3a mov esp,ebp pop ebp ret

18 18 / 8 do~while 문패턴분석 do~while 문의 assembly 패턴!! 1. 반복문시작부분으로되돌아옴 ( 조건부 jmp) 2. 탈출문은없을수도 분석목적이라면굳이반복문의종류를구분할필요는없음. SimpleCall!GuGuDanDoWhile push ebp mov ebp,esp push ecx mov dword ptr [ebp-4],1 SimpleCall!GuGuDanDoWhile+0xb mov eax,dword ptr [ebp+8] imul eax,dword ptr [ebp-4] push eax mov ecx,dword ptr [ebp-4] push ecx mov edx,dword ptr [ebp+8] push edx push offset SimpleCall!GS_ExceptionPointers+0x24 (012e2110) call dword ptr [SimpleCall!_imp wprintf (012e20a0)] add esp,10h mov eax,dword ptr [ebp-4] add eax,1 mov dword ptr [ebp-4],eax cmp jle dword ptr [ebp-4],9 SimpleCall!GuGuDanDoWhile+0xb (012e104b) SimpleCall!GuGuDanDoWhile+0x38 mov esp,ebp pop ebp ret

19 19 / 8 구조체사용코드패턴분석 구조체의멤버에접근하는예제 0:000> uf simplecall!getsum push ebp mov ebp,esp mov eax,dword ptr [ebp+8] mov eax,dword ptr [eax+4] pop ebp ret 구조체의첫번째멤버에접근하는예제 0:000> uf SimpleCall!GetSum push ebp mov ebp,esp mov eax,dword ptr [ebp+8] mov eax,dword ptr [eax] pop ebp ret 구조체사용시의 assembly 패턴!! 1. 레지스터에구조체의주소를저장 2. 저장된구조체주소에서접근할멤버의 Offset 만큼이동

20 calling convention

21 21 / 8 calling convention? 함수가호출되는규약 호출할때파라메터를전달하는방법, 함수리턴후파라메터를정리하는방법이 calling convention 에의해결정됨.

22 22 / 8 cdecl 파라메터전달 : 오른쪽파라메터 > 왼쪽파라메터순서로 stack에 push 파라메터정리 : 호출한측 (caller) 에서!! CRT 함수들의호출규약

23 23 / 8 stdcall 파라메터전달 : 오른쪽파라메터 > 왼쪽파라메터순서로 stack에 push 파라메터정리 : 호출된측 (callee) 에서!! Windows api들의호출규약 CALLBACK, APIENTRY 등으로 #define되어사용되기도함.

24 24 / 8 thiscall 기본적으로 stdcall과동일 Class member 함수호출시사용되는호출규약 this 포인터를 ecx 레지스터를통해전달

25 25 / 8 C++ 클래스가상함수호출 클래스인스턴스의시작부분에가상함수테이블의포인터가저장됨 함수호출시런타임에가상함수테이블에서함수주소를구하여 call pkid Vtable_Ptr Hello() 의주소 m_int1 Fine() 의주소 m_int2

26 stack 기초

27 27 / 8 Stack 에서알수있는정보들 CallStack (ret + 이전 ebp) Local Variables Stack Non-volatile Retister Exception Frame Security Cookie Parameters Detect Anomaly

28 28 / 8 Stack 은거꾸로자란다!! stack 은항상높은주소 > 낮은주소방향으로자란다. (Intel cpu 기준 ) 새로운변수가할당될때 함수가호출되어새로운스택프레임이생성될때 하지만스택에서사용되는변수들은낮은주소 > 높은주소방향으로 0:000> k ChildEBP RetAddr 0025e6b4 76d7c5f7 ntdll!ntcreatefile 0025e758 76d7268f KERNELBASE!CreateFileW+0x35e 0025e92c 76d729ec KERNELBASE!BasepLoadLibraryAsDataFileInternal+0x e94c 76d72c3b KERNELBASE!BasepLoadLibraryAsDataFile+0x e aeef1 KERNELBASE!LoadLibraryExW+0x18a 스택이자라는방향

29 29 / 8 함수가호출되는과정에서스택의변화? High Address [ 샘플코드 : SimpleCall.exe]

30 30 / 8 함수가호출되는과정 (1) parameter push int _tmain(int argc, _TCHAR* argv[]) { INT nproduct = 0; INT nfrom = 3; INT nto = 9; sub esp,0ch mov dword ptr [ebp-8],0 // nproduct mov dword ptr [ebp-0ch],3 // nfrom mov dword ptr [ebp-4],9 // nto High Address nproduct = GuGuDan(nFrom, nto, NULL); push 0 // NULL mov eax,dword ptr [ebp-4] // nto push eax mov ecx,dword ptr [ebp-0ch] // nfrom push call ecx SimpleCall!GuGuDan (013d1000) 함수의 prolog 이후에 push 가나오면 call 을위한준비단계!!

31 31 / 8 함수가호출되는과정 (2) 함수호출 (call) call instruction 은다음의두 instruction 으로풀어쓸수있다. push eip ( return address) jmp <function address> High Address nproduct = GuGuDan(nFrom, nto, NULL); push 0 // NULL mov eax,dword ptr [ebp-4] // nto push eax mov ecx,dword ptr [ebp-0ch] // nfrom push call ecx SimpleCall!GuGuDan (013d1000)

32 32 / 8 함수가호출되는과정 (3) 새로운 stack frame 생성 새로운함수는 ( 대부분 ) 다음과같이시작한다 공식!! mov edi, edi push ebp mov ebp, esp <push ebp 후 > 빌드시 /hotpatch 옵션추가하면 mov edi, edi 가포함됨 (5bytes align 을위한 padding!!) <mov ebp, esp 후 >

33 33 / 8 함수가호출되는과정 (4) 로컬변수생성, non-vol register 백업 로컬변수를선언하기위해 esp를필요한메모리사이즈만큼감소시킴 Non-volatile register를사용하기위해 stack에백업 (if required) INT _cdecl GuGuDan(IN INT ndanfrom, IN INT ndanto, OPTIONAL OUT INT * ptotalproduct) { INT ndanindex = 0; INT nindex = 0; INT nproduct = 0; push ebp mov ebp,esp sub esp,0ch mov dword ptr [ebp-0ch],0 mov dword ptr [ebp-8],0 mov dword ptr [ebp-4],0 로컬변수가 INT 3 개이므로 esp 를 4 * 3 = 12 바이트만큼감소시킴.

34 34 / 8 함수가호출되는과정 (5) Do Something 이미지출처 :

35 35 / 8 함수가호출되는과정 (6) Stack 정리 & non-vol register 복원 리턴값을 eax 에저장 (if any) 로컬변수용으로할당한메모리를회수하기위해 esp 를다시증가시킴. 백업받은 non-volatile register 복원 (if any) 함수 prologue 에서백업한 ebp 레지스터복원 mov mov pop ret eax,dword ptr [ebp-4] esp,ebp ebp mov esp, ebp 직후의 stack pop ebp 직후의 stack

36 36 / 8 함수가호출되는과정 (6) 함수리턴 (ret) ret instruction 은다음과같이풀어쓸수있다. pop ecx jmp ecx ret instruction 이실행되면현재 stack 의최상단에들어있는주소값으로 jmp 한다. 따라서, ret 이실행되는시점에서 stack 의최상단에는 Return Address 가들어있어야함. 상기샘플에서 ecx 는임의의 register 를표현함. mov mov pop ret eax,dword ptr [ebp-4] esp,ebp ebp

37 37 / 8 함수가호출되는과정 (6) parameter 정리 _cdecl 호출이므로 call 한측에서 parameter 가 push 된 stack 을정리. (_stdcall 이면??) int _tmain(int argc, _TCHAR* argv[]) { INT nproduct = 0; INT nfrom = 3; INT nto = 9; nproduct = GuGuDan(nFrom, nto, NULL); call add SimpleCall!GuGuDan (013d1000) esp,0ch

38 38 / 8 To see is to believe!!

39 39 / 8 [ 공식 ] 로컬변수 / parameter 를참조하는방법 ebp+c : 2 nd parameter ebp+8 : 1 st parameter ebp+4 : Return Address ebp : 이전함수의 ebp. ebp-xx : local variable 요약하자면.. ebp + xx : parameter ebp + 4 : RET ebp : 이전함수의 ebp ebp xx : local variable

40 40 / 8 ebp 는 callstack 이라는 linked list 의포인터!! 각 ebp 가가리키는위치에는이전함수의 ebp 가저장 각 ebp+4 위치에는이전함수로돌아갈 Return Address 가저장됨 ebp 가가리키는곳의값을계속따라가면이전함수의 return address chain 을구성해낼수있음.

41 41 / 8 Windbg 로 Stack 디벼보기 (1) 0:000>!teb TEB at 7efdd000 ExceptionList: 0030fc74 StackBase: StackLimit: 0030d000 SubSystemTib: FiberData: 00001e00 ArbitraryUserPointer: Self: 7efdd000 EnvironmentPointer: ClientId: 00001ac ad0 RpcHandle: Tls Storage: 7efdd02c PEB Address: 7efde000 LastErrorValue: 0 LastStatusValue: 0 Count Owned Locks: 0 HardErrorMode: 0 0:000> r eax= a ebx= ecx= edx=0015df98 esi= edi= eip= esp=0030fc14 ebp=0030fc20 iopl=0 nv up ei pl nz na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl= SimpleCall!GuGuDan+0x78: ebc3 jmp SimpleCall!GuGuDan+0x3d ( d) 0:000> dps esp fc fc fc1c fc fc fc ca SimpleCall!wmain+0x2a 0030fc fc2c fc < 이하생략 >

42 42 / 8 Windbg 로 Stack 디벼보기 (2) teb 가확인되지않을때는 충분히넓은범위의값을다찍어본다. 0:000> r ebp ebp=0030fc20 0:000> dps esp esp fc fc fc1c fc fc fc ca SimpleCall!wmain+0x2a 0030fc fc2c fc fc fc fc3c fc fc fc SimpleCall! tmaincrtstartup+0x fc fc4c fc d fc fc fc fc a kernel32!basethreadinitthunk+0xe 0030fc8c 7efde fc fcd0 0030fc94 77c19f72 ntdll! RtlUserThreadStart+0x fc98 7efde000 0:000> kbn # ChildEBP RetAddr Args to Child fc ca SimpleCall!GuGuDan+0x fc d50 SimpleCall!wmain+0x2a fc a 7efde fcd0 77c19f72 SimpleCall! tmaincrtstartup+0x fc90 77c19f72 7efde000 71e4aa kernel32!basethreadinitthunk+0xe fcd0 77c19f efde ntdll! RtlUserThreadStart+0x fce efde ntdll!_rtluserthreadstart+0x1b child 의 ebp child 의 RET wmain 의스택 (wmain = tmaincrtstartup 의 child) tmaincrtstartup 의스택 Child 의의미?? child 에전달된아규먼트 child 의이름 ( 심볼 )

43 43 / 8 로컬변수실종사건!! 로컬변수가항상스택에선언되는것은아니며, 최적화시 Register가 잠시 사용되는경우가많음최적화과정에서함수인라인화, 파편화등다양한변화가발생함. (Default : Maximize Speed) 0:000> uf simplecall!wmain push ebp mov ebp,esp sub esp,0ch mov dword ptr [ebp-8],0 mov dword ptr [ebp-0ch],3 mov dword ptr [ebp-4],9 push 0 mov eax,dword ptr [ebp-4] push eax mov ecx,dword ptr [ebp-0ch] push ecx call SimpleCall!GuGuDan ( ) add esp,0ch mov dword ptr [ebp-8],eax mov edx,dword ptr [ebp-8] push edx push offset SimpleCall!GS_ExceptionPointers+0x28 ( ) call dword ptr [SimpleCall!_imp wprintf (003520a0)] add esp,8 xor eax,eax mov esp,ebp pop ebp ret 0:000> dv // wmain에서로컬변수프린트 argc = 0n1 argv = 0x nfrom = 0n3 nproduct = 0n0 nto = 0n9 최적화 : Maximize Speed!! 0:000> uf simplecall!wmain call SimpleCall!GuGuDan (000b1000) // 파라메터가없다??? push eax push offset SimpleCall!`string' (000b2114) call dword ptr [SimpleCall!_imp wprintf (000b20a0)] add esp,8 xor eax,eax ret 0:000> dv // wmain 에서로컬변수프린트 로컬변수가어디갔지?? argc = 0n argv = 0x00093d50 0:000> uf simplecall!gugudan SimpleCall!GuGuDan push ebp mov ebp,esp push ecx push ebx push esi push edi mov dword ptr [ebp-4],0 mov edi,3 // 앗이것은 하.. 하드코딩!!?? SimpleCall!GuGuDan+0x13 mov esi,1 mov ebx,edi lea ebx,[ebx] < 이하생략 >

44 44 / 8 육안으로 callstack 을재구성해보자!! (1) dps 결과에서 ebp, ret 찾기 0030fc fc fc ca SimpleCall!wmain+0x2a 2 추정 RET 값이들어있는스택위치 (0030fc24) 에서 -4 바이트한주소 (0030fc20) 를 ebp 라고, 그주소에저장된값 (0030fc40) 을이전함수의 ebp 라고가정 1 RET 로보이는값 (003510ca) 을찾는다. ( 모듈 / 함수영역의심볼에매치되는값 ) 3 찾아낸 ebp 값 (0030fc40) 을추적하여그이전 ebp 를찾아냄. (0030fc84) 0030fc fc84 4 이전 ebp 로추정되는값 (0030fc84) 이진짜 ebp 인지검증 +4 바이트한위치의값 ( ) 가 RET 처럼보이는지? 그위치에저장된값 (0030fc84) 이현재위치의근처값인가?? 0030fc SimpleCall! tmaincrtstartup+0x122 5 추정되는 ebp 값이가리키는곳에저장된값 (0030fc84) 에대해앞서수행했던검증 (1~4) 을반복한다. 6 확인되는 RET 값들을연결하여 callstack 을만들어낸다.

45 45 / 8 육안으로 callstack 을재구성해보자!! (2) 확인된 ret 값들을연결해서 callstack 을만들어낸다. // 수동으로재구성한 callstack 0045f840 00d410ca SimpleCall!wmain+0x2a 0045f860 00d41264 SimpleCall! tmaincrtstartup+0x f8a a kernel32!basethreadinitthunk+0x f8b0 77c19f72 ntdll!rtlinitializeexceptionchain+0x f8f0 77c19f45 ntdll!rtlinitializeexceptionchain+0x36 // windbg 가자동으로만들어주는 callstack 과비교해보자!! 0:000> k ChildEBP RetAddr 0045f83c 00d410ca SimpleCall!GuGuDan+0x4c 0045f85c 00d41264 SimpleCall!wmain+0x2a 0045f8a a SimpleCall! tmaincrtstartup+0x122 WARNING: Stack unwind information not available. Following frames may be wrong. 0045f8ac 77c19f72 kernel32!basethreadinitthunk+0x f8ec 77c19f45 ntdll!rtlinitializeexceptionchain+0x f ntdll!rtlinitializeexceptionchain+0x36

46 46 / 8 육안으로 callstack 을재구성해보자!! (3) 주의 : 저렇게 (097ffda8) 생긴애는 ebp 가아님. ( 저건예외프레임 ) See also : 0:052> dps esp esp ffda8 097ffe24 097ffdac 61790ee0 tcpsvc!_except_handler4 097ffdb c30 097ffdb4 fffffffe EXCEPTION_REGISTRATION 구조체 typedef struct _EXCEPTION_REGISTRATION { struct _EXCEPTION_REGISTRATION* prev; DWORD handler; } EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION; 나 ebp! 난 exception frame!

47 [ 실습 1] Assembly 분석

48 48 / 8 [ 실습 1] 도전!! GuGuDan() 을 Decompile 해보자!! (1) 0:000> uf simplecall!gugudan SimpleCall!GuGuDan push ebp bec mov ebp,esp ec0c sub esp,0ch c745f mov dword ptr [ebp-0ch], d c745f mov dword ptr [ebp-8], c745fc mov dword ptr [ebp-4], b 8b4508 mov eax,dword ptr [ebp+8] e 8945f4 mov dword ptr [ebp-0ch],eax eb09 jmp SimpleCall!GuGuDan+0x2c ( c) SimpleCall!GuGuDan+0x b4df4 mov ecx,dword ptr [ebp-0ch] c101 add ecx, df4 mov dword ptr [ebp-0ch],ecx Assembly C Source [ 요령 ] Step by Stap!! 1. windbg에서 uf 커맨드로 assembly code 확인 2. ebp-xx, ebp+xx 를변수명으로 Replace!! 3. Label과 goto 문을활용해 초벌번역 4. 화살표를그려서코드블럭간의흐름을파악 거슬러올라가는화살표에주목!!! 5. 초벌번역된 C 소스를보기좋게 Decoration

49 49 / 8 Api 호출에서힌트를얻자!! 프로토타입이알려진 WinApi 호출부분을분석하면로컬변수의의미, 구조체등에대한정보를얻을수있음. KERNELBASE!GetFileAttributesW: mov edi,edi push ebp mov ebp,esp sub esp,48h push esi xor esi,esi push esi push esi [ebp-8] = PUNICODE_STRING NtName lea push push call eax,[ebp-8] eax dword ptr [ebp+8] dword ptr [KERNELBASE!_imp RtlDosPathNameToNtPathName_U_WithStatus] KERNELBASE!GetFileAttributesW+0x41: mov edi,dword ptr [ebp-4] mov dword ptr [ebp-18h],eax lea eax,[ebp-48h] push eax lea eax,[ebp-20h] push eax mov dword ptr [ebp-20h],18h mov dword ptr [ebp-1ch],esi mov dword ptr [ebp-14h],40h mov dword ptr [ebp-10h],esi mov dword ptr [ebp-0ch],esi call dword ptr [KERNELBASE!_imp NtQueryAttributesFile] [ebp-48h] = FileInformation [ebp-20h] = ObjectAttributes [ebp-20h] = ObjectAttributes->Length [ebp-1ch] = ObjectAttributes->RootDirectory [ebp-18h] = ObjectAttributes->ObjectName [ebp-14h] = ObjectAttributes->Attributes

50 50 / 8 [ 실습 1] 도전!! GuGuDan() 을 Decompile 해보자!! (2) SimpleCall!GuGuDan push ebp mov ebp,esp sub esp,0ch mov dword ptr [ebp-0ch],0 mov dword ptr [ebp-8],0 mov dword ptr [ebp-4],0 mov eax,dword ptr [ebp+8] mov dword ptr [ebp-0ch],eax jmp SimpleCall!GuGuDan+0x2c ( c) SimpleCall!GuGuDan+0x23 mov ecx,dword ptr [ebp-0ch] add ecx,1 mov dword ptr [ebp-0ch],ecx SimpleCall!GuGuDan push ebp mov ebp,esp sub esp,0ch mov dword ptr [locvar_a],0 mov dword ptr [locvar_b],0 mov dword ptr [locvar_c],0 mov eax,dword ptr [arg_a] mov dword ptr [locvar_a],eax jmp SimpleCall!GuGuDan+0x2c ( c) SimpleCall!GuGuDan+0x23 mov ecx,dword ptr [locvar_a] add ecx,1 mov dword ptr [locvar_a],ecx 1 windbg 에서 uf 커맨드로 assembly code 확인 GuGuDan(arg_A, arg_b, arg_c) { locvar_a = arg_a; goto GuGuDan+0x2c; GuGuDan+0x23: locvar_a++; GuGuDan+0x2c: if (locvar_a > arg_b) { goto GuGuDan+0x8a; } 2 ebp-xx, ebp+xx 를변수명으로 Replace!! GuGuDan(arg_A, arg_b, arg_c) { locvar_a = arg_a; for (locvar_a = arg_a; locvar_a <= arg_b; locvar_a++) { for (locvar_b = 1; locvar_b <= 9; locvar_b++) { wprintf(l %d * %d = %d\n, locvar_a, locvar_b, locvar_a * locvar_b); locvar_c = locvar_a * locvar_b * locvar_c; } GuGuDan+0x34: locvar_b = 1; goto GuGuDan+0x46; 3 Label 과 goto 문을활용해 초벌번역 } wprintf( \n ); 4 초벌번역된 C 소스를보기좋게 Decoration

51 51 / 8 하지만 최적화가적용된다면? 하지만최적화가적용되면어떨까? 최 적 화!

52 52 / 8 Profile-Guided Optimizations 실제실행결과를분석하여코드를재배치 Cache Hit 율을높이는효과. 코드블록의배치가뒤죽박죽 거슬러올라오는 jmp 문은순환문? 과연그럴까?? OS 모듈에기본적용 cmp jne dword ptr [bresult],1 SampleCode+20h cmp jne dword ptr [bresult],1 SampleCode+20h push call add jmp L"TRUE!!\n" wprintf esp,4 SampleCode+2Dh push call add L"FALSE!!\n" wprintf esp,4 push call add L"FALSE!!\n" wprintf esp,4 push call add L"After if block!!\n wprintf esp,4 push call add L"After if block!!\n wprintf esp,4 최적화없음 프로파일기반최적화 push call add jmp L"TRUE!!\n" wprintf esp,4 SampleCode+2Dh

53 53 / 8 궁극의디컴파일러 IDA-Pro!!

54 [ 실습 2] Stack 분석응용 (1)

55 55 / 8 Stack 분석결과를메모리덤프분석에활용하자!! Stack 을수동분석해야하는경우?? 최적화로인해 stack 이자동분석되지않는경우 모듈이 unload 되어 crash 가발생하면서 stack 이분석되지않는경우 Buffer Overflow 가발생하여 Return Address 가변조된경우 pdb 가없어서 callstack 이제대로분석되지않는경우 자동분석된결과가의심스러운경우 1) 콜스택의시작함수가일반적인스레드시작 / 초기화함수가아닌경우 2) 함수의호출순서가상식적으로이해되지않는경우 3) 콜스택의중간부분이비어있는경우 ( 부정확할수있다는경고메시지출력 ) 4) 콜스택이끊겨있는경우 Func1 Func2???? Call Call Call Call X 이전 frame 추적 이전 frame 추적실패!!??

56 56 / 8 삽푸고있는 Windbg 에게힌트를주자!! WinDbg 는현재 Context 를기준으로 Callstack 을만들어냄. WinDbg 가자동분석에실패했을때수동으로 Context 를지정하면더나은 Callstack 을만들어낼수 ( 도 ) 있음!! 한번에전체 callstack 을만들어낼수없는경우도많음. 경우에따라서는 2~3 번나누어만들어낸 stack 을이어붙여서해석하라. [step 1] dps 결과를분석하여 ebp 값을추정 [step 2] 찾아낸 ebp 값을힌트를지정하여 callstack 재구성. 만족스러운 callstack 이나올때까지 [step1] ~ [step2] 를반복 [step 3] 확인된 ebp 값으로 esp, eip 값을추정 [step 4].frame 명령에 ebp, esp, eip 값을현재 Context 로지정. (.frame 에힌트로제공 ) [step 5] stack 프레임을이동, 로컬변수를확인하는등디버깅계속진행

57 57 / 8 [ 실습 2] [dump2] 데드락원인분석 ( 심화 ) 전형적인데드락덤프 (part 1 교육자료참조 )!locks 결과에따르면 36 번스레드는 Loarder Lock 을소유하고있지만, callstack 상으로는모듈 Load/Unload 혹은 Thread 시작 / 중지등 Loader Lock 을소유한정황이없다. 자동분석된 callstck 의일부가깨져보이며, 분석된 callstack 이스레드시작 / 초기화관련함수에서시작하지않는다. 자동분석결과를믿을수없음!!! 미션 : LoaderLock 이잠기게된이유를확인하라!! Special thanks to 김지훈 at 0:036>!locks CritSec ntdll!ldrploaderlock+0 at 77c77340 WaiterWoken No LockCount 13 RecursionCount 1 OwningThread 13b4 EntryCount 0 ContentionCount 9d *** Locked 0:036> k ChildEBP RetAddr 07f5d76c 77be6a64 ntdll!kifastsystemcallret 07f5d770 77bd2278 ntdll!ntwaitforsingleobject+0xc 07f5d7d4 77bd215c ntdll!rtlpwaitoncriticalsection+0x13e 07f5d7fc 777bce18 ntdll!rtlentercriticalsection+0x150 07f5d bd130 user32!bitmapfromdib+0x1f 07f5d8ac 777bd6db user32!convertdibbitmap+0x12b 07f5db74 777bccbf user32!convertdibicon+0x112 07f5dbc8 777bcdef user32!objectfromdibresource+0xc8 07f5de20 777bf15d user32!loadicocur+0x197 07f5de40 0aec14f2 user32!loadiconw+0x1b WARNING: Stack unwind information not available. Following frames may be wrong. 07f5de6c 77bfa15b ShellStreams!DllUnregisterServer+0x22c72 07f5de80 ffffffff ntdll!rtlinitializecriticalsection+0x12 07f5deb xffffffff 07f5dec kernel32!deactivateactctx+0x31

58 58 / 8 [ 실습 2][step 1~2] ebp 값을확인 callstack 테스트 ebp 추정 : 앞서했던대로하면됨 0:036> ~~[13b4]s < > ntdll!kifastsystemcallret: 77be70f4 c3 ret 0:036> dps esp esp f5d770 77be6a64 ntdll!ntwaitforsingleobject+0xc 07f5d774 77bd2278 ntdll!rtlpwaitoncriticalsection+0x13e 07f5d cc 07f5d77c f5d < 중간생략 > 07f5de7c 07f5df08 07f5de80 0aee148b ShellStreams!DllUnregisterServer+0x42c0b 07f5de84 ffffffff < 중간생략 > 07f5def4 0ae90000 ShellStreams 07f5def8 6fff0e30 msvcr80!operator new+0x1d 07f5defc f5df f5df04 cd8dafae 07f5df08 07f5df20 07f5df0c 0aee1534 ShellStreams!DllUnregisterServer+0x42cb4 07f5df b 07f5df14 0ae92acb ShellStreams+0x2acb 07f5df18 cd8dae12 07f5df1c 14377dd8 07f5df20 07f5df84 07f5df24 0aedd11b ShellStreams!DllUnregisterServer+0x3e89b 07f5df Trial and Error 0:036> k = 07f5df08 ChildEBP RetAddr 07f5d76c 77be6a64 ntdll!kifastsystemcallret 07f5d770 77bd2278 ntdll!ntwaitforsingleobject+0xc 07f5df08 0aee1534 ntdll!rtlpwaitoncriticalsection+0x13e WARNING: Stack unwind information not available. Following frames may be wrong. 07f5df20 0aedd11b ShellStreams!DllUnregisterServer+0x42cb4 07f5df94 0aedc96e ShellStreams!DllUnregisterServer+0x3e89b 07f5e0b0 77c0052e ShellStreams!DllUnregisterServer+0x3e0ee 07f5e20c 77bbe114 ntdll!ldrploaddll+0x4d1 07f5f968 77bd0846 ntdll!_load_config_used+0x6c 07f5fab8 77bbe114 ntdll!tppworkerthread+0x572 07f5fb14 77c037be ntdll!_load_config_used+0x6c 07f5fb ntdll!_rtluserthreadstart+0x1b 0:036> ub 77c0052e // 임의의 RET 에대해 callstack 검증!! ntdll!ldrploaddll+0x49a: 77c f8410f7ffff je ntdll!ldrploaddll+0x557 (77bffc1c) 77c0050c 803d7070c77700 cmp byte ptr [ntdll!ldrpldrdatabaseissetup (77c77070)],0 77c f8403f7ffff je ntdll!ldrploaddll+0x557 (77bffc1c) 77c d0c70c777 cmp dword ptr [ntdll!g_shimsenabled (77c7700c)],edi 77c0051f 0f8524fafbff jne ntdll!ldrploaddll+0x4b5 (77bbff49) 77c dfc mov dword ptr [ebp-4],ebx 77c push edi 77c00529 e8f61e0000 call ntdll!ldrpruninitializeroutines (77c02424) // RET 직전인스트럭션이다음프레임에대한 call인지확인!!

59 59 / 8 [ 실습 2][step 3] 선택된 ebp 를기반으로 esp, eip 유추 현재의스택프레임이선택된 ebp 값이었을때 esp, eip 에어떤값이들어있을지를상상해보라!! 해당함수의스택 0:036> dps esp esp f5e ole32!gcomprocessactivator 07f5e21c 07f5e250 07f5e220 77c02322 ntdll!ldrloaddll+0x92 07f5e224 07f5e27c 07f5e f5e24c 110c87ac 07f5e250 07f5e28c 07f5e254 75c98c19 KERNELBASE!LoadLibraryExW+0x1d3 07f5e c87ac 2. 해당함수의 Return Address 를 eip 로선정 3. 해당함수스택내임의의주소값을 esp 로정함. 1. 이게선정된 ebp 라면

60 60 / 8 [ 실습 2][step 4] 선택된 ebp,esp,eip 를현재 Context 에 Set 선택한 ebp, esp, eip 값을.frame 에힌트로제공 0:036>.frame /c = 07f5e250 07f5e24c 77c ntdll!ldrloaddll+0x92: 77c bf0 mov esi,eax 0:036> r Last set context: eax=0d2d735c ebx=07f5ea70 ecx= edx= esi=778192e0 edi= eip=77c02322 esp=07f5e24c ebp=07f5e250 iopl=0 ntdll!ldrloaddll+0x92: 77c bf0 mov esi,eax

61 61 / 8 [ 실습 2][step 5] set 된 Context 에서디버깅진행 stack frame 을이동하거나로컬변수를확인하는등등 0:036> kn # ChildEBP RetAddr 00 07f5e250 75c98c19 ntdll!ldrloaddll+0x f5e28c 75f69d43 KERNELBASE!LoadLibraryExW+0x1d f5e2a8 75f69cc7 ole32!loadlibrarywithlogging+0x f5e2cc 75f69bb6 ole32!cclasscache::cdllpathentry::loaddll+0xa f5e2fc 75f690be ole32!cclasscache::cdllpathentry::create_rl+0x f5e548 75f68f93 ole32!cclasscache::cclassentry::createdllclassentry_rl+0xd f5e590 75f68e99 ole32!cclasscache::getclassobjectactivator+0x f5e5c8 75f68c57 ole32!cclasscache::getclassobject+0x f5e644 75f83170 ole32!cservercontextactivator::createinstance+0x f5e684 75f68dca ole32!activationpropertiesin::delegatecreateinstance+0x108 0a 07f5e6d8 75f68d3f ole32!capartmentactivator::createinstance+0x112 0b 07f5e6f8 75f68ac2 ole32!cprocessactivator::ccicallback+0x6d 0c 07f5e718 75f68a73 ole32!cprocessactivator::attemptactivation+0x2c 0d 07f5e754 75f68e2d ole32!cprocessactivator::activatebycontext+0x4f 0e 07f5e77c 75f83170 ole32!cprocessactivator::createinstance+0x49 0f 07f5e7bc 75f82ef4 ole32!activationpropertiesin::delegatecreateinstance+0x f5f968 77bd0846 ntdll!rtlptpworkcallback+0x11d 28 07f5fac8 7765ed6c ntdll!tppworkerthread+0x f5fad4 77c037eb kernel32!basethreadinitthunk+0xe 2a 07f5fb14 77c037be ntdll! RtlUserThreadStart+0x70 2b 07f5fb2c ntdll!_rtluserthreadstart+0x1b 0:036>.frame /c f.. ole32!activationpropertiesin::delegatecreateinstance+0x108: 75f b4dfc mov ecx,dword ptr [ebp-4] ss:0023:07f5e7b8=13dcfe0d 0:036> dv this = 0x07f5ea70 punkouter = 0x ppactpropsout = 0x07f5f17c preplaceclassinfo = 0xffffffff clsid = struct _GUID {07f5f0e ea-f5071ceaf507} pclassinfo = 0x

62 62 / 8 [ 실습 2] 결론 추정해낸 ebp 값을이용해콜스택을구성 현재 DLL Load가진행중임을확인!! ShellStreams.dll의 DllMain에서동기화를수행하는 api를호출한것이 DeadLock의원인 ( 참고 : 0:036> kbn = 07f5e21c # ChildEBP RetAddr Args to Child 00 07f5d76c 77be6a64 77bd cc ntdll!kifastsystemcallret 01 07f5d770 77bd cc ntdll!ntwaitforsingleobject+0xc 02 07f5e21c 77c f5e27c 07f5e ntdll!rtlpwaitoncriticalsection+0x13e 03 07f5e250 75c98c19 110c87ac 07f5e294 07f5e27c ntdll!ldrloaddll+0x f5e28c 75f69d c87ac KERNELBASE!LoadLibraryExW+0x1d f5e2a8 75f69cc f5e ole32!loadlibrarywithlogging+0x f5e2cc 75f69bb6 07f5e324 07f5e2f0 07f5e2f4 ole32!cclasscache::cdllpathentry::loaddll+0xa f5e2fc 75f690be 07f5e324 07f5e60c 07f5e31c ole32!cclasscache::cdllpathentry::create_rl+0x f5e548 75f68f f5e60c 07f5e578 ole32!cclasscache::cclassentry::createdllclassentry_rl+0xd f5e590 75f68e f607c 07f5e5bc ole32!cclasscache::getclassobjectactivator+0x224 0a 07f5e5c8 75f68c57 07f5e60c f5ec14 ole32!cclasscache::getclassobject+0x30 < 이하생략 > 0:036> du 07f5e324 07f5e324 "C:\Program Files\Common Files\Ap" 07f5e364 "ple\internet Services\ShellStrea" 07f5e3a4 "ms.dll.frame /c = 07f5e21c 07f5e24c 77c02322

63 [ 실습 3] Stack 분석응용 (2)

64 64 / 8 [ 실습 3] [dump9] - 비정상종료원인분석 Stack 의내용을육안으로분석해야할때도있음!! 로컬변수, 아규먼트등스택의내용을분석하여장애발생시의상황을추정해보자. CAccept::ManagerThread 에진입한이후에도대체무슨일이?? 0:052> k ChildEBP RetAddr 097ffdb8 616b1c1e tcpsvc!clock::`vftable // 자동분석결과가이상하다??? 097ffdd4 616b2ac7 tcpsvc!caccept::managerthread+0x3e 097ffdfc a9 tcpsvc!xthreads::handler+0x97 097ffe tcpsvc!_callthreadstartex+0x1b 097ffe a tcpsvc!_threadstartex+0x64 WARNING: Stack unwind information not available. Following frames may be wrong. 097ffe4c 773f9f72 kernel32!basethreadinitthunk+0x12 097ffe8c 773f9f45 ntdll!rtlinitializeexceptionchain+0x63 097ffea ntdll!rtlinitializeexceptionchain+0x36

65 65 / 8 [ 실습 3] [dump9] - 비정상종료원인분석 stack 내용을분석하여잃어버린함수의흐름을쫓아가보자. 0:052> dps esp esp ffd64 616c39f3 tcpsvc!ctcpservice::acceptcallback+0x1b3 097ffd ffd6c 617c3050 tcpsvc!`string'+0xcfc 097ffd70 616c39dd tcpsvc!ctcpservice::acceptcallback+0x19d 097ffd74 3f054ad0 097ffd ffd7c ffd80 03ee ffd ffd xserver! ImageBase 097ffd8c 00f52c10 097ffd d90 netserver!cnetserver::connectcallback 097ffd94 03f ffd ffd9c 02992c98 097ffda ffda4 097ff ffda8 097ffe24 097ffdac 61790ee0 tcpsvc!_except_handler4 097ffdb c30 097ffdb4 fffffffe 097ffdb8 097ffdd4 097ffdbc 616b1c1e tcpsvc!caccept::managerthread+0x3e 수수께끼의답은이안에있다!!

66 66 / 8 stack 의좀더자세한지도 함수의중간에서할당된로컬변수도실제로는함수시작시일괄할당됨. 로컬변수는선언된순서대로 stack에할당되지않음. 실제로스택엔로컬변수, return address, arguments 외에도많은것이

67 Debugging Tips 67 / 64 To Be Continued (1) Debugging 개론 (2) x86 stack inside (3) heap inside (4) x64 stack inside

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

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 - 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

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

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

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

IDA 5.x Manual 07.02.hwp

IDA 5.x Manual 07.02.hwp IDA 5.x Manual - Manual 01 - 영리를 목적으로 한 곳에서 배포금지 Last Update 2007. 02 이강석 / certlab@gmail.com 어셈블리어 개발자 그룹 :: 어셈러브 http://www.asmlove.co.kr - 1 - IDA Pro 는 Disassembler 프로그램입니다. 기계어로 되어있는 실행파일을 어셈블리언어

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

CKKeyPro 적용가이드

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

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

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

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

=

= 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 - hy2-12.pptx

Microsoft PowerPoint - hy2-12.pptx 2.4 명령어세트 (instruction set) 명령어세트 CPU 가지원하는기계어명령어들의집합 명령어연산의종류 데이터전송 : 레지스터 / 메모리간에데이터이동 산술연산 : 덧셈, 뺄셈, 곱셈및나눗셈 논리연산 : 비트들간의 AND, OR, NOT 및 XOR 연산 입출력 (I/O) : CPU( 레지스터 ) 와외부장치들간의데이터이동 프로그램제어 : 분기, 서브루틴호출

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

Microsoft Word - Heap_Spray.doc

Microsoft Word - Heap_Spray.doc Heap Spray 본문서는 최근 웹 브라우저를 이용한 공격에 사용되는 Heap Spray 기법에 대한 내용을 수록하였다. 관련 내용에 대하여 많은 도움이 되기 바란다. 문서 내용은 초보자도 쉽게 이해할 수 있도록 관련 내용에 대한 설명을 포함하였다. Hacking Group OVERTIME force< forceteam01@gmail.com > 2007.05.13

More information

untitled

untitled 9 hamks@dongguk.ac.kr : Source code Assembly language code x = a + b; ld a, %r1 ld b, %r2 add %r1, %r2, %r3 st %r3, x (Assembler) (bit pattern) (machine code) CPU security (code generator).. (Instruction

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

9

9 9 hamks@dongguk.ac.kr : Source code Assembly language code x = a + b; ld a, %r1 ld b, %r2 add %r1, %r2, %r3 st %r3, x (Assembler) (bit pattern) (machine code) CPU security (code generator).. (Instruction

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

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

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

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

Microsoft Word - 1. ARM Assembly 실습_xp2.doc

Microsoft Word - 1. ARM Assembly 실습_xp2.doc ARM asm 의구조 ARM Assembly 실습 1. 기본골격 AREA armex,code, READONLY ;Mark first instruction to execute start MOV r0, #10 MOV r1,#3 ADD r0, r0, r1 ; r0 = r0 + r1 stop NOP NOP B stop ; Mark end of file 위의 asm의구조를이해하고실행해보세요.

More information

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

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

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

hlogin7

hlogin7 0x07. Return Oriented Programming ROP? , (DEP, ASLR). ROP (Return Oriented Programming) (excutable memory) rop. plt, got got overwrite RTL RTL Chain DEP, ASLR gadget Basic knowledge plt, got call function

More information

01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO

01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO 01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - POP; POP; POP; RET PLT & GOT Debug Proof of concept Example

More information

<4D F736F F F696E74202D204B FC7C1B7CEB1D7B7A55F F6E48616E646C6572B8A6C5EBC7D1BFA1B7AFB0CBC3E2B9D7BCF6C1A

<4D F736F F F696E74202D204B FC7C1B7CEB1D7B7A55F F6E48616E646C6572B8A6C5EBC7D1BFA1B7AFB0CBC3E2B9D7BCF6C1A 강연소개 Exception Handler 를통한에러검출및수정 디버깅을즐겨하십니까..? 에러를만나면반갑습니까..? 전화로버그보고를받았나요..? 잡히지않는버그!!!! 따분한강의 졸아도좋습니다!!!! 강연자소개 테스터 온라인게임클라이언트개발 로컬라이즈및해외지원업무 디버깅, 최적화, 호환성향상에관심 강연대상 x86 환경에서 Windows 프로그래밍 디버깅 / 에러추적은

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Reverse Engineering Basics IA32 Basics CPU(Central Processing Units) 의구조 ALU Register EAX s EBX ECX EDX ESI EDI ESP EBP Control Unit EIP IR Eflags I/O Unit Data Bus Address Bus IA32 Register What is Register?

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

11장 포인터

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

More information

Microsoft Word - Reversing Engineering Code with IDA Pro-4-1.doc

Microsoft Word - Reversing Engineering Code with IDA Pro-4-1.doc Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

슬라이드 1

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

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

The_IDA_Pro_Book

The_IDA_Pro_Book The IDA Pro Book Hacking Group OVERTIME force (forceteam01@gmail.com) GETTING STARTED WITH IDA IDA New : Go : IDA Previous : IDA File File -> Open Processor type : Loading Segment and Loading Offset x86

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

Microsoft Word - ExecutionStack

Microsoft Word - ExecutionStack Lecture 15: LM code from high level language /* Simple Program */ external int get_int(); external void put_int(); int sum; clear_sum() { sum=0; int step=2; main() { register int i; static int count; clear_sum();

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

Cogame 취약점 보고

Cogame 취약점 보고 Frist Version: 2006. 01. 07 Last Version: 2006. 01. 19 anesra@{null2root.org, gmail.com Table of Contents 1. 기본개념과도구...3 1.1 윈도우쉘코드... 3 1.2 윈도우메모리 LAYOUT... 4 1.3 레지스터... 4 1.4 기본어셈블리어명령어... 4 2. 쉘코드만들기...6

More information

MPLAB C18 C

MPLAB C18 C MPLAB C18 C MPLAB C18 MPLAB C18 C MPLAB C18 C #define START, c:\mcc18 errorlevel{0 1} char isascii(char ch); list[list_optioin,list_option] OK, Cancel , MPLAB IDE User s Guide MPLAB C18 C

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.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 - Reverse Engineering Code with IDA Pro-2-1.doc

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판

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

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 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

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

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

More information

Microsoft PowerPoint - windbg쉤무2(맋운톬로ífl—로엸엜Callingê·œìŁ½).pptx

Microsoft PowerPoint - windbg쉤무2(맋운톬로ífl—로엸엜Callingê·œìŁ½).pptx 본강의 PDF 는하제소프트다운로드자료실에서받아보실수있습니다 하제소프트 주식회사하제소프트 (www.hajesoft.co.kr) 강사이봉석 과정소개 윈도우응용프로그램, 윈도우서비스프로그램, 윈도우디바이스드라이버를개발하는개발자들로하여금고급디버깅기술을제공하는 윈도우디버거 (WinDBG) 사용방법을익히게하여, 고급시스템프로그래머를양성하는데있습니다 윈도우디버거 (WinDBG)

More information

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

Microsoft PowerPoint - a5a.ppt [호환 모드] 5 장프로시저 (1) 책의라이브러리사용 5 장전반부 : 책의링크라이브러리 외부링크라이브러리개요 라이브러리프로시저호출 라이브러리링크 라이브러리프로시저 예제 연세대학교컴퓨터정보통신어셈블리언어 2 저자제공링크라이브러리 라이브러리파일 어셈블된프로시저를포함하고있는 OBJ 파일들을모아놓은파일 ( 확장자.LIB) 각 OBJ file 에는하나이상의 procedure 가들어있음

More information

<BEEEBCC0BAEDB8AEBEEEC1A4B8AE2E687770>

<BEEEBCC0BAEDB8AEBEEEC1A4B8AE2E687770> Parse and Parse Assembly ( 어셈블리어입문자를위한 어셈블리어자료들의모음 ) ## 목차 ## 0x01. ----------Introduce----------- 0x02. 어셈블리언어란? & 배우는목적 0x03. 어셈블리언어를위한기본지식 0x04. 어셈블리명령어의구성 0x05. 주소지정방식의이해 0x06. 어셈블리명령어정리 0x07. 어셈블리명령어상세

More information

SRC PLUS 제어기 MANUAL

SRC PLUS 제어기 MANUAL ,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO

More information

제목

제목 Development Technology Seminar 작 성 자 : 고형호 이 메 일 : hyungho.ko@gmail.com 최초작성일 : 2007.01.19 최종작성일 : 2007.02.05 버 전 : 01.05 홈 피 : www.innosigma.com Goal Exception Handling 1. SEH vs. CEH Exception Handling

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

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

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

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

Microsoft PowerPoint - a2.ppt [호환 모드] 마이크로컴퓨터의기본구조 2 장 x86 프로세서구조 ALU: 산술논리연산제어장치 (CU): 실행순서제어클럭 : 구성요소들의동작동기화 CPU + memory + I/O + bus 어셈블리언어 2 클럭 (Clock) CPU 와 Bus 동작은클럭에동기되어동작을한다. 메모리읽기사이클과대기상태 1 클럭사이클동안간단한동작을수행한다. 기계어명령어수행에적어도 1 클럭사이클이필요함

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

제 9 도는 6제어항목의 세팅목표의 보기가 표시된 레이더 챠트(radar chart). 제 10 도는 제 6 도의 함수블럭(1C)에서 사용되는 각종 개성화 함수의 보기를 표시하는 테이블. 제 11a 도 제 11c 도까지는 각종 조건에 따라 제공되는 개성화함수의 변화의

제 9 도는 6제어항목의 세팅목표의 보기가 표시된 레이더 챠트(radar chart). 제 10 도는 제 6 도의 함수블럭(1C)에서 사용되는 각종 개성화 함수의 보기를 표시하는 테이블. 제 11a 도 제 11c 도까지는 각종 조건에 따라 제공되는 개성화함수의 변화의 (19) 대한민국특허청(KR) (12) 특허공보(B1) (51) Int. Cl. 5 B66B 1/18 (45) 공고일자 1993년09월28일 (11) 공고번호 특1993-0009339 (21) 출원번호 특1989-0002580 (65) 공개번호 특1989-0014358 (22) 출원일자 1989년03월02일 (43) 공개일자 1989년10월23일 (30) 우선권주장

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

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

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

More information

PowerPoint Template

PowerPoint Template BoF 원정대서비스 목차 환경구성 http://www.hackerschool.org/hs_boards/zboard.php?id=hs_notice&no=1170881885 전용게시판 http://www.hackerschool.org/hs_boards/zboard.php?id=bof_fellowship Putty War game 2 LOB 란? 해커스쿨에서제공하는

More information

OCW_C언어 기초

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

More information

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

Microsoft PowerPoint - a4.ppt [호환 모드] 4 장데이터전송, 주소지정, 산술연산 연세대학교컴퓨터정보통신 이장의내용 데이터전송명령어 덧셈과뺄셈 데이터관련연산자와디렉티브 간접주소지정 JMP와 LOOP 명령어 연세대학교컴퓨터정보통신어셈블리언어 2 4.1 데이터전송명령어 피연산자 (operand) 의유형 예 즉시값 (Immediate) 상수정수 ( 식 ) (8, 16, 32 bits) 값이 instruction

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

More information

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

Microsoft PowerPoint - a4.ppt [호환 모드] 이장의내용 4 장데이터전송, 주소지정, 산술연산 데이터전송명령어 덧셈과뺄셈 데이터관련연산자와디렉티브 간접주소지정 JMP와 LOOP 명령어 컴퓨터정보통신 컴퓨터정보통신 어셈블리언어 2 4.1 데이터전송명령어 Instruction Operand 표기 (Intel) 피연산자 (operand) 의유형 즉시값 (Immediate) 상수정수 ( 식 )(8 (8, 16,

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

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

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

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

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

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

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

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

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

<4D F736F F D20B9D9C0CCB7B5B9D9C0CCB7AFBDBA5FBCF6C1A42E646F63>

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

More information

Microsoft Word - UFuz3 분석.doc

Microsoft Word - UFuz3 분석.doc 파일퍼저 UFuz3 분석 이용일 (foryou2008@nate.com) 2008-07-26 0. 개요 UFuz3 는 eeye 에서공개한파일퍼저입니다. UFuz3 의기능분석및상세분석을통해, 퍼저는어떤모 습을갖추고있는지, 또한퍼저는내부적으로어떤방식으로동작하는지살펴보려고합니다. 1. 기능분석 UFuz3 는파일을파싱하는루틴내에 Integer Overflow 가존재하는지를검사합니다.

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 1. data-addressing mode CHAPTER 6 Addressing Modes 2. use of data-address mode to form assembly language statements 3. op of program memory address mode 4. use of program memory address mode to form assembly

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단 기술문서 `09. 11. 02. 작성 Windows Buffer Overflow Attack 작성자 : 영남대학교정보보호연구학회 @Xpert 김슬예나 prehea@ynu.ac.kr 1 목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF... 3 2. 개발환경및사용툴... 3 3. Shellcode 작성하기... 4 가. cmd 쉘... 4

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

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (I) Contents 변수와상수 블록과변수의범위 수식과연산자 제어문과반복문 문자와문자열 배열, 포인터, 메모리관리 구조체 디버거 (gdb) 사용법 2/17 Reference The C Programming language, Brian W. Kernighan, Dennis M. Ritchie, Prentice-Hall

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 DEVELOPMENT ENVIRONMENT 2 MAKE Jo, Heeseung MAKE Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one 2

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

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt 포인터 1 포인터란? 포인터 메모리의주소를가지고있는변수 메모리주소 100번지 101번지 102번지 103번지 int theage (4 byte) 변수의크기에따라 주로 byte 단위 주소연산자 : & 변수의주소를반환 메모리 2 #include list 8.1 int main() using namespace std; unsigned short

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M (1) 주소지정방식 Address Mode 메모리접근 분기주소 2. 8051 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data Memory 외부 Data Memory (2) 명령어세트 - 8051 명령어는 5 가지로분류,

More information

Secure Programming Lecture1 : Introduction

Secure Programming Lecture1 : Introduction Malware and Vulnerability Analysis Lecture1 Malware Analysis #1 Agenda 악성코드정적분석 악성코드분석 악성코드정적분석 정적분석 임의의코드또는응용프로그램을실행하지않고분석 ASCII 문자열 (ex. URL) API 리스트 Packing VT 기타등등 정적분석 : 파일식별 악성으로의심되는파일의형태식별 file

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

/* */

/* */ /*---------------------------------------------------------------------------------*/ 번역 : innovation@wowhacker.org /*---------------------------------------------------------------------------------*/

More information

Deok9_PE Structure

Deok9_PE Structure PE Structure CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 1. PE > 1) PE? 2) PE 3) PE Utility

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

5.스택(강의자료).key

5.스택(강의자료).key CHP 5: https://www.youtube.com/watch?v=ns-r91557ds ? (stack): (LIFO:Last-In First-Out):. D C B C B C B C B (element) C (top) B (bottom) (DT) : n element : create() ::=. is_empty(s) ::=. is_full(s) ::=.

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

Chapter 4. LISTS

Chapter 4. LISTS 6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립

More information

1

1 1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2

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

Tcl의 문법

Tcl의 문법 월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이

More information