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

Size: px
Start display at page:

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

Transcription

1 본강의 PDF 는하제소프트다운로드자료실에서받아보실수있습니다 하제소프트 주식회사하제소프트 ( 강사이봉석

2 과정소개 윈도우응용프로그램, 윈도우서비스프로그램, 윈도우디바이스드라이버를개발하는개발자들로하여금고급디버깅기술을제공하는 윈도우디버거 (WinDBG) 사용방법을익히게하여, 고급시스템프로그래머를양성하는데있습니다 윈도우디버거 (WinDBG) 를사용하는개발자는실무에서고급시스템프로그래머가갖추어야할중요한디버깅지식을습득함과동시에시간과비용을최대한아끼는프로그래밍습관과우수한결과물을만들어낼수있습니다

3 강사약력 본강사 ( 이봉석 ) 는기업교육 ( 삼성첨단기술센터, LG러닝센터, MDS테크놀러지 ) 과사설교육등에서 13년강사이력을가지고있으며, 현재주식회사하제소프트대표이사를역임하고있습니다. 저서로는, 윈도우디바이스드라이버, 실전윈도우디바이스드라이버, 고급개발자들만이알고있던디바이스드라이버구조와원리, 그리고제작노하우, 실전윈도우 CE 가이드, USB 너뭐니 가있습니다. 주식회사하제소프트는 17년간업체들이필요로하는윈도우디바이스드라이버, 리눅스디바이스드라이버그리고훰웨어를개발, 제공하는업체입니다.

4 과정진행목차 WinDBG 환경준비 Visual Studio 2015, WDK(Windows Driver Kit), WinDBG WinDBG 심볼설정 마이크로프로세서 Calling 규약 x86 CPU 에서 C 함수호출과어셈블리어연관성분석 x64 CPU 에서 C 함수호출과어셈블리어연관성분석 WinDBG 로칼디버깅 응용프로그램, 서비스프로그램디버깅 BSOD(BlueScreen Of Death) 커널덤프파일 커널덤프파일생성설정및덤프분석 WinDBG 원격디버깅 서비스프로그램, 커널디바이스드라이버디버깅 하드웨어와관련된 WinDBG 주요명령어 PCI, USB 버스를사용하는하드웨어를다룰때, 유용한 WinDBG 확장명령어를소개합니다 WinDBG 확장모듈 확장기능을제공하는모듈구현

5 2 강 마이크로프로세서 하제소프트 Calling 규약 (Convention) Calling 규약 (Calling Convention) 을배워보도록합니다 디스어셈블리된문맥 ( 코드 ) 을이해하는것은디버깅의기술을한차원올려줍니다 ( 늘고급언어로만볼수는없습니다 ) 디스어셈블리코드는대부분함수의내용이거나함수를호출하는문장으로구성되어있습니다 조금어렵게느껴질수있으니, 부담스러운학생들은함수호출시파라미터전달부분위주로만보세요 ^^

6 1. x86 과 Calling 규약 x86 CPU에서 C 함수를작성한뒤, 어셈블리어로변환시켜보도록합니다 int main() { int Sum; // 지역변수선언 Sum = SummaryFunction(1, 2); // 1 과 2 를함수에인자로입력 // SummaryFunction 함수의결과를 Sum 지역변수에담습니다 return 0;

7 1.1 레지스터 x86 CPU에서사용되는대표적인레지스터들입니다 프로그램코드실행위치 eax= ebx= ecx= edx= esi=00d91b80 edi= eip=77a0748c esp=007ef488 ebp=007ef4b4 iopl=0 nv up ei pl zr na pe nc <= Flag 레지스터중대표적 cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl= Dword (4Bytes) EAX AX Byte AH Word (2Bytes) Byte AL

8 32비트 하위 16비트 8비트 의미 EAX AX AH, AL Accumulator EBX BX BH, BL Base Register ECX CX CH, CL Count Register EDX DX DH, DL Double Precision Register ESI SI Source Index Register EDI DI Destination Index Register EBP BP Base Pointer Register ESP SP Stack Pointer EIP IP Instruction Pointer Flags Flag Register

9 1.2 Disassemby 연습 C 코드로작성된예재와이를어셈블리어로번역한내용을서로비교해보도록하겠습니다. 이과정을전부이해하기가곤란한학생들은함수를호출하는부분위주로살펴보면되겠습니다

10 1.2.1 C 소스코드예재 HRESULT CUserView::CloseView(void) { if (m_fdestroyed) return S_OK; BOOL fviewobjectchanged = FALSE; ReleaseAndNull(&m_pdtgt); if (m_psv) { m_psb->enablemodelesssb(false); if(m_pws) m_pws->viewreleased(); IShellView* psv; HWND hwndcapture = GetCapture(); if (hwndcapture && hwndcapture == m_hwnd) { SendMessage(m_hwnd, WM_CANCELMODE, 0, 0); m_fhandsoff = TRUE; m_frecursing = TRUE; NotifyClients(m_psv, NOTIFY_CLOSING); m_frecursing = FALSE; m_psv->uiactivate(svuia_deactivate); psv = m_psv; m_psv = NULL; ReleaseAndNull(&_pctView);

11 HRESULT CUserView::CloseView(void) {. if (m_pvo) { IAdviseSink *psink; if (SUCCEEDED(m_pvo->GetAdvise(NULL, NULL, &psink)) && psink) { if (psink == (IAdviseSink *)this) m_pvo->setadvise(0, 0, NULL); psink->release(); fviewobjectchanged = TRUE; ReleaseAndNull(&m_pvo); if (psv) { psv->saveviewstate(); psv->destroyviewwindow(); psv->release(); m_hwndview = NULL; m_fhandsoff = FALSE; if (m_pcache) { GlobalFree(m_pcache); m_pcache = NULL; m_psb->enablemodelesssb(true); CancelPendingActions(); ReleaseAndNull(&_psf); if (fviewobjectchanged) NotifyViewClients(DVASPECT_CONTENT, -1); if (m_psztitle) { LocalFree(m_pszTitle); m_psztitle = NULL; SetRect(&m_rcBounds, 0, 0, 0, 0); return S_OK; 하제소프트

12 1.2.2 Disassembly HRESULT CUserView::CloseView(void) SAMPLE!CUserView CloseView: push ebp bec mov ebp,esp [esp+0] = return address [esp+4] = this [ebp+0] = previous ebp pushed on stack [ebp+4] = return address [ebp+8] = this push ecx push ecx push esi a 8b7508 mov esi,[ebp+0x8] ; esi = this d 57 push edi ; 임시저장 if (m_fdestroyed) e 33ff xor edi,edi ; edi = beac cmp [esi+0xac],edi ; this->m_fdestroyed == 0? jz NotDestroyed ( f) ; 같으면 jump return S_OK; c0 xor eax,eax ; eax = 0 = S_OK a e jmp ReturnNoEBX (715172c1) ; EBX 레지스터값을스택에서 POP 하지않고 return

13 BOOL fviewobjectchanged = FALSE; ReleaseAndNull(&m_pdtgt); NotDestroyed: f 8d86c lea eax,[esi+0xc0] ; eax = &m_pdtgt push ebx b1d mov ebx,[_imp ReleaseAndNull] c 50 push eax ; ReleaseAndNull() 함수를위한파라미터준비 d 897dfc mov [ebp-0x4],edi ; fviewobjectchanged = FALSE ffd3 call ebx ; call ReleaseAndNull if (m_psv) { e74 cmp [esi+0x74],edi ; this->m_psv == 0? f je No_Psv ( c) ; jump if zero m_psb->enablemodelesssb(false); b 8b4638 mov eax,[esi+0x38] ; eax = this->m_psb e 57 push edi ; FALSE f 50 push eax ; 멤버함수호출시숨겨진파라미터 "this" b08 mov ecx,[eax] ; ecx = m_psb->lpvtbl ff5124 call [ecx+0x24] ; stdcall EnableModelessSB if(m_pws) m_pws->viewreleased(); b mov eax,[esi+0x114] ; eax = this->m_pws b 3bc7 cmp eax,edi ; eax == 0? d 7406 jz NoWS ( ) ; 같다면 jump f 8b08 mov ecx,[eax] ; ecx = m_pws->lpvtbl push eax ; 멤버함수호출시숨겨진파라미터 "this" ff510c call [ecx+0xc] ; stdcall ViewReleased NoWS: HWND hwndcapture = GetCapture(); ff15e01a5071 call [_imp GetCapture] ; call GetCapture

14 if (hwndcapture && hwndcapture == m_hwnd) { SendMessage(m_hwnd, WM_CANCELMODE, 0, 0); b 3bc7 cmp eax,edi ; hwndcapture == 0? d 7412 jz No_Capture (715171a1) ; 같으면 jump f 8b4e44 mov ecx,[esi+0x44] ; ecx = this->m_hwnd bc1 cmp eax,ecx ; hwndcapture = ecx? b jnz No_Capture (715171a1) ; 다르면 jump push edi ; push edi ; a1f push 0x1f ; WM_CANCELMODE a 51 push ecx ; hwndcapture b ff call [_imp SendMessageW] ; SendMessage No_Capture: m_fhandsoff = TRUE; m_frecursing = TRUE; a e0c or word ptr [esi+0x10c],0x8001 ; 최적화어셈블리된모습. 한번에두값을 TRUE로기록 NotifyClients(m_psv, NOTIFY_CLOSING); aa 8b4e20 mov ecx,[esi+0x20] ; ecx = (CNotifySource*)this.vtbl ad 6a04 push 0x4 ; NOTIFY_CLOSING af 8d4620 lea eax,[esi+0x20] ; eax = (CNotifySource*)this b2 ff7674 push [esi+0x74] ; m_psv b5 50 push eax ; 멤버함수호출시숨겨진파라미터 "this" b6 ff510c call [ecx+0xc] ; stdcall NotifyClients

15 m_frecursing = FALSE; b9 80a60d f and byte ptr [esi+0x10d],0x7f m_psv->uiactivate(svuia_deactivate); c0 8b4674 mov eax,[esi+0x74] ; eax = m_psv c3 57 push edi ; SVUIA_DEACTIVATE = c4 50 push eax ; 멤버함수호출시숨겨진파라미터 "this" c5 8b08 mov ecx,[eax] ; ecx = vtbl c7 ff511c call [ecx+0x1c] ; stdcall UIActivate psv = m_psv; m_psv = NULL; ca 8b4674 mov eax,[esi+0x74] ; eax = m_psv cd 897e74 mov [esi+0x74],edi ; m_psv = NULL d0 8945f8 mov [ebp-0x8],eax ; psv = eax ReleaseAndNull(&_pctView); d3 8d466c lea eax,[esi+0x6c] ; eax = &_pctview d6 50 push eax ; parameter d7 ffd3 call ebx ; call ReleaseAndNull f (m_pvo) { d9 8b86a mov eax,[esi+0xa8] ; eax = m_pvo df 8dbea lea edi,[esi+0xa8] ; edi = &m_pvo e5 85c0 test eax,eax ; eax == 0? e jz No_Pvo ( ) ; jump if zero if (SUCCEEDED(m_pvo->GetAdvise(NULL, NULL, &psink)) && psink) { e9 8b08 mov ecx,[eax] ; ecx = m_pvo->lpvtbl eb 8d5508 lea edx,[ebp+0x8] ; edx = &psink ee 52 push edx ; parameter ef 6a00 push 0x0 ; NULL f1 6a00 push 0x0 ; NULL f3 50 push eax ; 멤버함수호출시숨겨진파라미터 "this" f4 ff5120 call [ecx+0x20] ; stdcall GetAdvise f7 85c0 test eax,eax ; test bits of eax f9 7c2c jl No_Advise ( ) ; 작으면 jump fb 33c9 xor ecx,ecx ; ecx = fd 394d08 cmp [ebp+0x8],ecx ; _psink == ecx? jz No_Advise ( )

16 if (psink == (IAdviseSink *)this) d46ec lea eax,[esi-0x14] ; eax = -(IAdviseSink*)this d5614 lea edx,[esi+0x14] ; edx = (IAdviseSink*)this f7d8 neg eax ; eax = -eax (sets carry if!= 0) a 1bc0 sbb eax,eax ; eax = eax - eax - carry c 23c2 and eax,edx ; eax = NULL or edx neg sbb and add r r, r r, (val1 - val2) r, val e cmp [ebp+0x8],eax ; psink == (IAdviseSink*)this? b jnz No_SetAdvise ( e) ; 같지않으면 jump m_pvo->setadvise(0, 0, NULL); b07 mov eax,[edi] ; eax = m_pvo push ecx ; NULL push ecx ; push ecx ; b10 mov edx,[eax] ; edx = m_pvo->lpvtbl a 50 push eax ; 멤버함수호출시숨겨진파라미터 "this" b ff521c call [edx+0x1c] ; stdcall SetAdvise No_SetAdvise: psink->release(); e 8b4508 mov eax,[ebp+0x8] ; eax = psink push eax ; 멤버함수호출시숨겨진파라미터 "this" b08 mov ecx,[eax] ; ecx = psink->lpvtbl ff5108 call [ecx+0x8] ; stdcall Release No_Advise:

17 fviewobjectchanged = TRUE; ReleaseAndNull(&m_pvo); push edi ; &m_pvo c745fc mov dword ptr [ebp-0x4],0x1 ; fviewobjectchanged = TRUE f ffd3 call ebx ; call ReleaseAndNull No_Pvo: if (psv) { b7df8 mov edi,[ebp-0x8] ; edi = psv ff test edi,edi ; edi == 0? jz No_Psv2 ( a) ; 같으면 jump psv->saveviewstate(); b07 mov eax,[edi] ; eax = psv->lpvtbl a 57 push edi ; 멤버함수호출시숨겨진파라미터 "this" b ff5034 call [eax+0x34] ; stdcall SaveViewState psv->destroyviewwindow(); e 8b07 mov eax,[edi] ; eax = psv->lpvtbl push edi ; 멤버함수호출시숨겨진파라미터 "this" ff5028 call [eax+0x28] ; stdcall DestroyViewWindow psv->release(); b07 mov eax,[edi] ; eax = psv->lpvtbl push edi ; 멤버함수호출시숨겨진파라미터 "this" ff5008 call [eax+0x8] ; stdcall Release No_Psv2: m_hwndview = NULL; a 83667c00 and dword ptr [esi+0x7c],0x0 ; m_hwndview = 0

18 m_fhandsoff = FALSE; e 83a60c010000fe and dword ptr [esi+0x10c],0xfe if (m_pcache) { b4670 mov eax,[esi+0x70] ; eax = m_pcache c0 test eax,eax ; eax == 0? a 740b jz No_Cache ( ) ; 같으면 jump GlobalFree(m_pcache); c 50 push eax ; m_pcache d ff15b call [_imp GlobalFree] ; call GlobalFree m_pcache = NULL; and dword ptr [esi+0x70],0x0 ; m_pcache = 0 No_Cache: m_psb->enablemodelesssb(true); b4638 mov eax,[esi+0x38] ; eax = this->m_psb a 6a01 push 0x1 ; TRUE c 50 push eax ; 멤버함수호출시숨겨진파라미터 "this" d 8b08 mov ecx,[eax] ; ecx = m_psb->lpvtbl f ff5124 call [ecx+0x24] ; stdcall EnableModelessSB CancelPendingActions(); 하제소프트

19 d4eec lea ecx,[esi-0x14] ; ecx = (CUserView*)this e832fbffff call CUserView::CancelPendingActions (71516dac) ; thiscall ReleaseAndNull(&_psf); a 33ff xor edi,edi ; edi = 0 (for later) No_Psv: c 8d4678 lea eax,[esi+0x78] ; eax = &_psf f 50 push eax ; parameter ffd3 call ebx ; call ReleaseAndNull if (fviewobjectchanged) dfc cmp [ebp-0x4],edi ; fviewobjectchanged == 0? d jz NoNotifyViewClients ( ) ; 같으면 jump NotifyViewClients(DVASPECT_CONTENT, -1); b46ec mov eax,[esi-0x14] ; eax = ((CUserView*)this)->lpVtbl a 8d4eec lea ecx,[esi-0x14] ; ecx = (CUserView*)this d 6aff push 0xff ; f 6a01 push 0x1 ; DVASPECT_CONTENT = ff5024 call [eax+0x24] ; thiscall NotifyViewClients NoNotifyViewClients: if (m_psztitle) b mov eax,[esi+0x80] ; eax = m_psztitle a 8d9e lea ebx,[esi+0x80] ; ebx = &m_psztitle (for later) a0 3bc7 cmp eax,edi ; eax == 0? a jz No_Title (715172ad) ; 같으면 jump LocalFree(m_pszTitle); a4 50 push eax ; m_psztitle a5 ff call [_imp LocalFree] m_psztitle = NULL; ab 893b mov [ebx],edi ; m_psztitle = 0 No_Title: SetRect(&m_rcBounds, 0, 0, 0, 0); ad 57 push edi ; ae 57 push edi ; af 57 push edi ; b0 81c6fc add esi,0xfc ; esi = &this->m_rcbounds b6 57 push edi ; b7 56 push esi ; &m_rcbounds b8 ff15e41a5071 call [_imp SetRect]

20 return S_OK; be 33c0 xor eax,eax ; eax = S_OK c0 5b pop ebx ; 스택으로부터 restore ReturnNoEBX: c1 5f pop edi ; restore c2 5e pop esi ; restore c3 c9 leave ; 한번에스택으로부터 EBP, ESP레지스터를복원 c4 c20400 ret 0x4 ; 호출자로돌아가자마자스택주소값을 4만큼증가한다. Ret + (ESP+4)

21 1.3 파라미터와지역변수 x86 CPU에서 C 함수가사용하는파라미터와지역변수는다음과같은규칙을사용합니다 지역변수 파라미터 첫번째 [EBP-0xX] [EBP+0x8] 두번째 [EBP-0xN] [EBP+0xC] 세번째 [EBP-0xM] [EBP+0x10] 4 바이트씩증가합니다 지역변수는 [EBP-XX] 형태를가집니다. 하지만, 사용되는 XX 값은정해진규칙이없습니다 함수파라미터는 [EBP+XX] 형태를가집니다. 파라미터는사용되는순서에따라서 0x8 부터 4 바이트씩증가하는주소를사용합니다

22 현재 EBP 레지스터 int Function(..) { 스택위치 TOP TOP+0x04 TOP+0x08 TOP+0x0C TOP+0x10 값 Old EBP 리턴주소파라미터A 파라미터B 파라미터C [EBP+0x8] : A [EBP+0xC] : B [EBP+0x10] : C D = Function(A,B,C); return Z;

23 int main() { int Sum; push ebp mov ebp,esp sub esp,0cch push ebx push esi push edi 하제소프트 지역변수는 [EBP-XX] 형태로나타납니다 두번째파라미터 (2) 첫번째파라미터 (1) Sum = SummaryFunction(1,2); push 2 push 1 call 010f1320 // SummaryFunction add esp,8 // 두번의 PUSH를복원합니다 mov dword ptr [ebp-8],eax return 0; xor pop pop pop add cmp mov pop ret 지역변수 (Sum) 에담습니다 eax,eax edi esi ebx esp,0cch ebp,esp esp,ebp ebp 함수를호출합니다 함수리턴값은 EAX 레지스터에담겨집니다 C 함수를호출할때, 파라미터는스택에역순으로 PUSH 합니다함수를호출하는문장은 CALL XXXXX 형태를가집니다함수가리턴되면, 리턴값은 EAX 레지스터에담겨집니다리턴된값 (EAX) 을지역변수 (EBP-XX) 에담습니다

24 int SummaryFunction(int i, int j) { int c; // 지역변수선언 c = i + j; // 첫번째파라미터 i, 두번째파라미터 j 의값을더해서지역변수 c 에넣습니다 return c; // 지역변수의 c 의값을리턴합니다. 호출자에게되돌려줍니다 하제소프트 int SummaryFunction( int i, int j) { push ebp mov ebp,esp 지역변수 (c) 를위한영역이초기화 int c; sub push push push esp,0cch ebx esi edi 파라미터변수는 [EBP+XX] 형태로나타납니다 EAX 레지스터 <= 첫번째파라미터 (i), [EBP+8] c = i + j; return c; mov add mov mov pop pop pop mov pop ret eax,dword ptr [ebp+8] eax,dword ptr [ebp+0ch] dword ptr [ebp-8],eax eax,dword ptr [ebp-8] edi esi ebx esp,ebp ebp EAX 레지스터 += 두번째파라미터 (j), [EBP+C] 지역변수 (c), [EBP-8] <= EAX 레지스터 지역변수는 [EBP-XX] 형태로나타납니다 EAX 레지스터 <= 지역변수 (c), [EBP-8] 함수의리턴값은 EAX 레지스터에담겨집니다

25 1.4 디스어셈블리윤각 x86 CPU에서 C 함수가사용되는문장을디스어셈블리했을때나타나는윤각에대해서정리합니다 xxxxxx( ) // 피호출되는함수의내용 { mov [EBP+8], // 첫번째파라미터접근 mov [EBP+C], // 두번째파라미터접근 mov [EBP-8], // 지역변수접근 { // 함수를호출하는문장을담고있는내용 push??? // 마지막파라미터전달 push??? // 첫번째파라미터전달 call xxxxxx // 함수호출 add ESP, 파라미터수 * 4 // 스택을복원합니다 mov [EBP-8], EAX // 리턴값과지역변수접근 항상 [EBP+N] 형태는파라미터를접근하는행동입니다. 사용되는 N 값을보면, 몇번째파라미터인지를알수있습니다 항상 [EBP-N] 형태는지역변수를접근하는행동입니다 함수가리턴되면리턴값은항상 EAX 레지스터에담겨집니다

26 2. x64 과 Calling 규약 x64 CPU에서 C 함수를작성한뒤, 어셈블리어로변환시켜보도록합니다 하제소프트 비교를위해서 x86 과같은 C 소스를사용합니다 int main() { int Sum; // 지역변수선언 Sum = SummaryFunction(1, 2); // 1 과 2 를함수에인자로입력 // SummaryFunction 함수의결과를 Sum 지역변수에담습니다 return 0;

27 2.1 레지스터 x64 CPU 에서사용되는대표적인레지스터들입니다 프로그램코드실행위치 rax= cccccccc rbx= rcx= rdx= rsi= rdi= f2ffb28 rip=00007ff rsp= f2ffa18 rbp= f2ffa40 r8=000001d9e8038ec0 r9=00007ff80d30bbc0 r10= r11= f2ffad0 r12= r13= r14= r15= iopl=0 nv up ei pl nz na pe nc <= Flag 레지스터중대표적 cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl= Qword RAX (8Bytes) EAX Dword (4Bytes) Word (2Bytes) AX AH AL

28 64 비트하위 32 비트하위 16 비트 8 비트의미 RAX EAX AX AH, AL Accumulator RBX EBX BX BH, BL Base Register RCX ECX CX CH, CL Count Register RDX EDX DX DH, DL Double Precision Register RSI ESI SI Source Index Register RDI EDI DI Destination Index Register RBP EBP BP Base Pointer Register RSP ESP SP Stack Pointer RIP EIP IP Instruction Pointer Flags Flag Register R8..R15 R8D..R15D R8W..R15W R8B..R15B Common Register

29 2.2 Disassemby 연습 C 코드로작성된예재와이를어셈블리어로번역한내용을서로비교해보도록하겠습니다. 이과정을전부이해하기가곤란한학생들은함수를호출하는부분위주로살펴보면되겠습니다

30 2.2.1 C 소스코드예재 int Simple(int i, int j) { return i*5 + j + 3; 간단한소스이므로이곳에서바로 Disassembly 하도록하겠습니다 lea eax,[rdx+rcx*4] ; eax = rdx+rcx* lea eax,[rcx+rax+0x3] ; eax = rcx+rax ret

31 HRESULT Meaningless(IDispatch *pdisp, DISPID dispid, BOOL funique, LPCWSTR pszexe) { IQueryAssociations *pqa; HRESULT hr = AssocCreate(CLSID_QueryAssociations, IID_IQueryAssociations, (void**)&pqa); if (SUCCEEDED(hr)) { hr = pqa->init(assocf_init_byexename, pszexe, NULL, NULL); if (SUCCEEDED(hr)) { WCHAR wszname[max_path]; DWORD cchname = MAX_PATH; hr = pqa->getstring(0, ASSOCSTR_FRIENDLYAPPNAME, NULL, wszname, &cchname); if (SUCCEEDED(hr)) { VARIANTARG rgvarg[2] = { 0 ; V_VT(&rgvarg[0]) = VT_BSTR; V_BSTR(&rgvarg[0]) = SysAllocString(wszName); if (V_BSTR(&rgvarg[0])) { DISPPARAMS dp; LONG lunique = InterlockedIncrement(&lCounter); V_VT(&rgvarg[1]) = VT_I4; V_I4(&rgvarg[1]) = funique? lunique : 0; dp.rgvarg = rgvarg; dp.cargs = 2; dp.rgdispidnamedargs = NULL; dp.cnamedargs = 0; hr = pdisp->invoke(dispid, IID_NULL, 0, DISPATCH_METHOD, &dp, NULL, NULL, NULL); VariantClear(&rgvarg[0]); VariantClear(&rgvarg[1]); else { hr = E_OUTOFMEMORY; pqa->release(); return hr; 하제소프트

32 2.2.2 Disassembly Meaningless: e0 push rbx ; 스택으로레지스터를임시로 save e1 push rsi ; save e2 push rdi ; save e3 push r12d ; save e5 push r13d ; save e7 push r14d ; save e9 push r15d ; save eb sub rsp,0x2c0 ; 지역변수를위해서스택위치를조정 f2 mov rbx,r9 ; rbx = pszexe f5 mov r12d,r8d ; r12 = funique (zero-extend) f8 mov r13d,edx ; r13 = dispid (zero-extend) fb mov rsi,rcx ; rsi = pdisp IQueryAssociations *pqa; HRESULT hr = AssocCreate(CLSID_QueryAssociations, IID_IQueryAssociations, (void**)&pqa); fe movdqu xmm0,oword ptr [CLSID_QueryAssociations ( )] movdqu oword ptr [rsp+0x60],xmm0 ; 임시 buffer에첫번째파라미터를보관 c lea r8,[rsp+0x58] ; arg3 = &pqa lea rdx,[iid_iqueryassociations ( )] ; arg2 = &IID_IQueryAssociations lea rcx,[rsp+0x60] ; arg1 = &temporary ( 임시 buffer 에서값을끄집어냄 ) d call qword ptr [_imp_assoccreate ( )] ; call if (SUCCEEDED(hr)) { test eax,eax jl ReturnEAX ( )

33 hr = pqa->init(assocf_init_byexename, pszexe, NULL, NULL); b mov rcx,[rsp+0x58] ; arg1 = pqa mov rax,[rcx] ; rax = pqa.vtbl xor r14d,r14d ; r14 = mov [rsp+0x20],r14 ; arg5 = b xor r9d,r9d ; arg4 = e mov r8,rbx ; arg3 = pszexe mov r15d,0x2 ; r15 = 2 (for later) mov edx,r15d ; arg2 = 2 (ASSOCF_INIT_BY_EXENAME) a call qword ptr [rax+0x18] ; call Init method if (SUCCEEDED(hr)) { d mov ebx,eax ; ebx = hr f test ebx,ebx ; FAILED? jl ReleasePQA ( ) ; 작으면 jump ( 음수 ) WCHAR wszname[max_path]; DWORD cchname = MAX_PATH; hr = pqa->getstring(0, ASSOCSTR_FRIENDLYAPPNAME, NULL, wszname, &cchname); if (SUCCEEDED(hr)) { mov dword ptr [rsp+0x50],0x104 ; cchname = MAX_PATH f mov rcx,[rsp+0x58] ; arg1 = pqa mov rax,[rcx] ; rax = pqa.vtbl lea rdx,[rsp+0x50] ; rdx = &cchname c mov [rsp+0x28],rdx ; arg6 = cchname lea rdx,[rsp+0xb0] ; rdx = &wszname[0] mov [rsp+0x20],rdx ; arg5 = &wszname[0] e xor r9d,r9d ; arg4 = mov r8d,0x4 ; arg3 = 4 (ASSOCSTR_FRIENDLYNAME) xor edx,edx ; arg2 = call qword ptr [rax+0x20] ; call GetString method c mov ebx,eax ; ebx = hr e test ebx,ebx ; FAILED? jl ReleasePQA ( ) ; 작으면 jump ( 음수 )

34 VARIANTARG rgvarg[2] = { 0 ; lea rdi,[rsp+0x82] ; rdi = &rgvarg e xor eax,eax ; rax = a0 mov ecx,0x2e ; rcx = sizeof(rgvarg) a5 rep stosb ; 0 값으로기록한다 (memset) V_VT(&rgvarg[0]) = VT_BSTR; V_BSTR(&rgvarg[0]) = SysAllocString(wszName); if (V_BSTR(&rgvarg[0])) { a7 mov word ptr [rsp+0x80],0x8 ; V_VT(&rgvarg[0]) = VT_BSTR b1 lea rcx,[rsp+0xb0] ; arg1 = &wszname[0] b9 call qword ptr [_imp_sysallocstring ( )] ; call bf mov [rsp+0x88],rax ; V_BSTR(&rgvarg[0]) = result c7 test rax,rax ; SysAllocString 함수의리턴값이있으면, ca je OutOfMemory ( f) ; 이값이 0 이면, Jump DISPPARAMS dp; LONG lunique = InterlockedIncrement(&lCounter); d0 lea rax,[lcounter ( )] d7 mov ecx,0x dc lock xadd [rax],ecx ; 배타적접근을위한 interlocked exchange 와 add e0 add ecx,0x1 V_VT(&rgvarg[1]) = VT_I4; V_I4(&rgvarg[1]) = funique? lunique : 0; e3 mov word ptr [rsp+0x98],0x3 ; V_VT(&rgvarg[1]) = VT_I4; ed mov eax,r14d ; rax = 0 (r14d 값은현재 0 입니다 ) f0 test r12d,r12d ; funique 값이기록되어있는가? f3 cmovne eax,ecx ; 만일그렇다면 set rax=lcounter f6 mov [rsp+0xa0],eax ; V_I4(&rgvarg[1]) =...

35 dp.rgvarg = rgvarg; dp.cargs = 2; dp.rgdispidnamedargs = NULL; dp.cnamedargs = 0; fd lea rax,[rsp+0x80] ; rax = &rgvarg[0] mov [rsp+0x60],rax ; dp.rgvarg = rgvarg a mov [rsp+0x70],r15d ; dp.cargs = 2 (r15 is still 2) f mov [rsp+0x68],r14 ; dp.rgdispidnamedargs = NULL mov [rsp+0x74],r14d ; dp.cnamedargs = 0 hr = pdisp->invoke(dispid, IID_NULL, 0, DISPATCH_METHOD, &dp, NULL, NULL, NULL); mov rax,[rsi] ; rax = pdisp.vtbl c mov [rsp+0x40],r14 ; arg9 = mov [rsp+0x38],r14 ; arg8 = mov [rsp+0x30],r14 ; arg7 = b lea rcx,[rsp+0x60] ; rcx = &dp mov [rsp+0x28],rcx ; arg6 = &dp mov word ptr [rsp+0x20],0x1 ; arg5 = 1 (DISPATCH_METHOD) c xor r9d,r9d ; arg4 = f lea r8,[guid_null ( )] ; arg3 = &IID_NULL mov edx,r13d ; arg2 = dispid mov rcx,rsi ; arg1 = pdisp c call qword ptr [rax+0x30] ; call Invoke method f mov ebx,eax ; hr = result VariantClear(&rgvarg[0]); VariantClear(&rgvarg[1]); lea rcx,[rsp+0x80] ; arg1 = &rgvarg[0] call qword ptr [_imp_variantclear ( )] f lea rcx,[rsp+0x98] ; arg1 = &rgvarg[1] call qword ptr [_imp_variantclear ( )] d jmp ReleasePQA ( )

36 else { hr = E_OUTOFMEMORY; OutOfMemory: f mov ebx,0x e ; hr = E_OUTOFMEMORY pqa->release(); ReleasePQA: mov rcx,[rsp+0x58] ; arg1 = pqa mov rax,[rcx] ; rax = pqa.vtbl c call qword ptr [rax+0x10] ; release return hr; f mov eax,ebx ; rax = hr ( 리턴값을준비합니다 ) ReturnEAX: add rsp,0x2c0 ; 지역변수를위해사용하던스택을복원합니다 pop r15d ; 함수진입시보관했던레지스터값들을 restore a pop r14d ; restore c pop r13d ; restore e pop r12d ; restore pop rdi ; restore pop rsi ; restore pop rbx ; restore ret ; 호출자에게돌아갑니다

37 X64 CPU 환경에서는호출시규약은지켜지지만피호출함수내에서파라미터접근방법 (RBP+xx) 은지켜지지않습니다 2.3 파라미터와지역변수 하제소프트 x64 CPU에서 C 함수가사용하는파라미터와지역변수는다음과같은규칙을사용합니다 파라미터의경우, 함수를호출할때와, 피호출자의입장이조금다릅니다 파라미터가전달되는규칙은지켜집니다 함수진입점에서스택에 PUSH 합니다 지역변수호출시, 파라미터피호출, 파라미터 첫번째 [RBP+MM] RCX(ECX) RCX=>[RBP+0x100] 두번째 [RBP+NN] RDX(EDX) RDX=>[RBP+0x108] 세번째 [RBP+SS] R8(R8D) R8=>[RBP+0x110] 네번째 [RBP+KK] R9(R9D) R9=>[RBP+0x118] 다섯번째 [RBP+PP] PUSH [RBP+0x120] 여섯번째 [RBP+QQ] PUSH [RBP+0x128] * ( ) 는 32 비트데이터의경우

38 파라미터가전달되는규칙은지켜집니다 RCX, RDX, R8, R9 레지스터값에파라미터값을보관합니다. 이후파라미터는스택에보관됩니다 D = Function(A,B,C); 스택위치 값 TOP... 지역변수영역. TOP+0xF0 TOP+0xF8 TOP+0x100 TOP+0x108 TOP+0x110 TOP+0x118 TOP+0x120 현재 RBP 레지스터 Old RBP 리턴주소 파라미터 A 파라미터 B 파라미터 C 4 번째파라미터 5 번째파라미터 int Function(..) { 하제소프트 RCX, RDX, R8, R9 레지스터값을스택에보관합니다 ( 디버그버젼 ) [RBP+0x100] : A [RBP+0x108] : B [RBP+0x110] : C [RBP+0x118] : 4 th Param [RBP+0x120] : 5 th Param return Z; [RBP+xx] 접근방법은지켜지지않습니다

39 int main() { push rbp push rdi 하제소프트 지역변수는 [RBP+XX] 형태로나타납니다 int Sum; sub lea mov rsp,108h rbp,[rsp+20h] rdi,rsp 두번째파라미터 (2). int 타입이기에 EDX 를사용합니다첫번째파라미터 (1). int 타입이기에 ECX 를사용합니다 Sum = SummaryFunction(1,2); mov edx,2 mov ecx,1 call 00007ff6`ebbd1087 // SummaryFunction mov dword ptr [rbp+4],eax return 0; xor lea pop pop ret 지역변수 (Sum) 에담습니다 eax,eax rsp,[rbp+0e8h] rdi rbp 함수를호출합니다 함수리턴값은 EAX 레지스터에담겨집니다 (int 리턴 ) C 함수를호출할때, 파라미터는순서대로, ECX(RCX), EDX(RDX), R8, R9 에담겨집니다. 이후파라미터는스택에 PUSH 됩니다. ECX(32 비트 ), RCX(64 비트 ) 로구분됩니다

40 X64 CPU 환경에서는피호출함수내에서파라미터접근방법 (RBP+xx) 은지켜지지않습니다 int SummaryFunction(int i, int j) { int c; // 지역변수선언 c = i + j; // 첫번째파라미터 i, 두번째파라미터 j 의값을더해서지역변수 c 에넣습니다 return c; // 지역변수의 c 의값을리턴합니다. 호출자에게되돌려줍니다 int SummaryFunction( int i, int j) { mov dword ptr [rsp+10h],edx mov dword ptr [rsp+8],ecx push rbp push rdi 하제소프트 전달받은첫번째, 두번째파라미터를스택에 PUSH 하는코드를사용합니다 지역변수 (c) 를위한영역이초기화 파라미터변수는 [RBP+1XX] 형태로나타납니다 int c; sub mov mov rsp,0e8h rbp,rsp rdi,rsp EAX 레지스터 <= 두번째파라미터 (j), [RBP+108] c = i + j; return c; mov mov add mov mov mov lea pop pop ret eax,dword ptr [rbp+108h] ecx,dword ptr [rbp+100h] ecx,eax eax,ecx dword ptr [rbp+4],eax eax,dword ptr [rbp+4] rsp,[rbp+0e8h] rdi rbp ECX 레지스터 <= 첫번째파라미터 (i), [RBP+100] ECX += EAX EAX <= ECX 지역변수 (c), [RBP+4] <= EAX EAX 레지스터 <= 지역변수 (c), [RBP+4] 함수의리턴값은 EAX 레지스터 (int 타입 ) 에담겨집니다

41 X64 CPU 환경에서는피호출함수내에서파라미터접근방법 (RBP+xx) 은지켜지지않습니다 하제소프트 2.4 디스어셈블리윤각 x64 CPU에서 C 함수가사용되는문장을디스어셈블리했을때나타나는형태에대해서정리합니다 xxxxxx( ) // 피호출되는함수의내용 { mov [RBP+100], // 첫번째파라미터접근 mov [RBP+108], // 두번째파라미터접근 mov [RBP+KK], // 지역변수접근 { // 함수를호출하는문장을담고있는내용 mov RDX,??? // 두번째파라미터전달 mov RCX,??? // 첫번째파라미터전달 call xxxxxx // 함수호출 mov [RBP+TT], RAX // 리턴값과지역변수접근 함수진입점을거친뒤엔 [RBP+XXX] 형태는파라미터를접근하는행동입니다. 사용되는 X 값을보면, 몇번째파라미터인지를알수있습니다 항상 [RBP+KK] 형태는지역변수를접근하는행동입니다 함수가리턴되면리턴값은항상 RAX(EAX) 레지스터에담겨집니다

42 본강의 PDF 는하제소프트다운로드자료실에서받아보실수있습니다 하제소프트 주식회사하제소프트 ( 강사이봉석

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

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

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

WinDBG 실무

WinDBG 실무 주식회사하제소프트 (www.hajesoft.co.kr) 강사이봉석 과정소개 윈도우응용프로그램, 윈도우서비스프로그램, 윈도우디바이스드라이버를개발하는개발자들로하여금고급디버깅기술을제공하는 윈도우디버거 (WinDBG) 사용방법을익히게하여, 고급시스템프로그래머를양성하는데있습니다 윈도우디버거 (WinDBG) 를사용하는개발자는실무에서고급시스템프로그래머가갖추어야할중요한디버깅지식을습득함과동시에시간과비용을최대한아끼는프로그래밍습관과우수한결과물을만들어낼수있습니다

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

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

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

CKKeyPro 적용가이드

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

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

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

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

WinDBG 실무

WinDBG 실무 주식회사하제소프트 (www.hajesoft.co.kr) 강사이봉석 과정소개 윈도우응용프로그램, 윈도우서비스프로그램, 윈도우디바이스드라이버를개발하는개발자들로하여금고급디버깅기술을제공하는 윈도우디버거 (WinDBG) 사용방법을익히게하여, 고급시스템프로그래머를양성하는데있습니다 윈도우디버거 (WinDBG) 를사용하는개발자는실무에서고급시스템프로그래머가갖추어야할중요한디버깅지식을습득함과동시에시간과비용을최대한아끼는프로그래밍습관과우수한결과물을만들어낼수있습니다

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 PowerPoint - a2.ppt [호환 모드]

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

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

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

<BEEEBCC0BAEDB8AEBEEEC1A4B8AE2E687770>

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

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

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

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

금오공대 컴퓨터공학전공 강의자료 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 - hy2-12.pptx

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

More information

WinDBG 실무

WinDBG 실무 하제소프트 주식회사하제소프트 (www.hajesoft.co.kr) 강사이봉석 하제소프트 과정소개 윈도우응용프로그램, 윈도우서비스프로그램, 윈도우디바이스드라이버를개발하는개발자들로하여금고급디버깅기술을제공하는 윈도우디버거 (WinDBG) 사용방법을익히게하여, 고급시스템프로그래머를양성하는데있습니다 윈도우디버거 (WinDBG) 를사용하는개발자는실무에서고급시스템프로그래머가갖추어야할중요한디버깅지식을습득함과동시에시간과비용을최대한아끼는프로그래밍습관과우수한결과물을만들어낼수있습니다

More information

°ø±â¾Ð±â±â

°ø±â¾Ð±â±â 20, 30, 40 20, 30, 40 1 2 3 4 5 6 7 8 9 10 3.1 6.3 9.4 12.6 15.7 18.8 22.0 25.1 28.3 31.4 2.4 4.7 7.1 9.4 11.8 14.1 16.5 18.8 21.2 23.6 7.1 14.1 21.2 28.3 35.3 42.4 49.5 56.5 63.6 70.7 5.9 11.9 17.8 23.7

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

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

[ 마이크로프로세서 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

특허청구의 범위 청구항 1 앵커(20)를 이용한 옹벽 시공에 사용되는 옹벽패널에 있어서, 단위패널형태의 판 형태로 구성되며, 내부 중앙부가 후방 하부를 향해 기울어지도록 돌출 형성되어, 전면이 오 목하게 들어가고 후면이 돌출된 결속부(11)를 형성하되, 이 결속부(11

특허청구의 범위 청구항 1 앵커(20)를 이용한 옹벽 시공에 사용되는 옹벽패널에 있어서, 단위패널형태의 판 형태로 구성되며, 내부 중앙부가 후방 하부를 향해 기울어지도록 돌출 형성되어, 전면이 오 목하게 들어가고 후면이 돌출된 결속부(11)를 형성하되, 이 결속부(11 (51) Int. Cl. (19) 대한민국특허청(KR) (12) 등록특허공보(B1) E02D 29/02 (2006.01) E02D 17/20 (2006.01) E02B 3/14 (2006.01) (21) 출원번호 10-2010-0089517 (22) 출원일자 2010년09월13일 심사청구일자 (56) 선행기술조사문헌 JP2006037700 A* KR100920461

More information

학습목차 r 컴퓨터본체에서 CPU 의위치살펴보기 r CPU 의성능 r CPU 의기능 r CPU 의조직 r 레지스터의조직 r 명령어사이클 r 명령어파이프라이닝 컴퓨터구조 2 9. CPU 조직과기능

학습목차 r 컴퓨터본체에서 CPU 의위치살펴보기 r CPU 의성능 r CPU 의기능 r CPU 의조직 r 레지스터의조직 r 명령어사이클 r 명령어파이프라이닝 컴퓨터구조 2 9. CPU 조직과기능 컴퓨터구조 제 9 강 중앙처리장치의조직과기능 학습목차 r 컴퓨터본체에서 CPU 의위치살펴보기 r CPU 의성능 r CPU 의기능 r CPU 의조직 r 레지스터의조직 r 명령어사이클 r 명령어파이프라이닝 컴퓨터구조 2 9. CPU 조직과기능 학습목표 rcpu 의성능을향상시키는요인들을알아본다. rcpu 의기본적인기능을이해한다. rcpu 는 ALU, 제어장치, 레지스터집합,

More information

01.The basics technic of Shellcode Excuse the ads! We need some help to keep our site up. List Shellcode The basics of shellcode(ubuntu-16.04) C ASM M

01.The basics technic of Shellcode Excuse the ads! We need some help to keep our site up. List Shellcode The basics of shellcode(ubuntu-16.04) C ASM M 01.The basics technic of Shellcode Excuse the ads! We need some help to keep our site up. List Shellcode The basics of shellcode(ubuntu-16.04) C ASM Machine code Assembly code Linux system call in assembly

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

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

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

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

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

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

설계란 무엇인가?

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

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

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

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

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

<4D F736F F D20B9D9C0CCB7B5B9D9C0CCB7AFBDBA5FBCF6C1A42E646F63>

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

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

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

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

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

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

More information

1 1,.,

1 1,., ,.,. 7 86 0 70 7 7 7 74 75 76 77 78 79 70 7 7 7 75 74 7 7 7 70 79 78 77 76 75 74 7.,. x, x A(x ), B(x ) x x AB =x -x A{x } B{x } x >x AB =x -x B{x } A{x } x =[ -x(xæ0) -x (x

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

10-2 삼각형의닮음조건 p270 AD BE C ABC DE ABC 중 2 비상 10, 11 단원도형의닮음 (& 활용 ) - 2 -

10-2 삼각형의닮음조건 p270 AD BE C ABC DE ABC 중 2 비상 10, 11 단원도형의닮음 (& 활용 ) - 2 - 10 단원 : 도형의닮음 10-1 닮음도형 p265 ABC DEF ABC DEF EF B ABCD EFGH ABCD EFGH EF A AB GH ADFC CF KL 중 2 비상 10, 11 단원도형의닮음 (& 활용 ) - 1 - 10-2 삼각형의닮음조건 p270 AD BE C ABC DE ABC 중 2 비상 10, 11 단원도형의닮음 (& 활용 ) - 2 -

More information

API 매뉴얼

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

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

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

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

More information

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

문서의 제목 나눔고딕B, 54pt Windows Debugging (2) x86 stack inside 2015.03 레드스톤소프트김태형부장 http://kuaaan.tistory.com Register 기초 3 / 60 X86 Register 특별한목적으로사용되는레지스터 EIP : 다음에실행될 Instruction의주소를 pointing EAX : 함수가리턴할때리턴값을저장. 평소에는범용으로사용됨

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

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

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터 - Part2-3 3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터 3.1 포인터란 ü ü ü. ü. ü. ü ( ) ? 3.1 ü. ü C ( ).? ü ü PART2-4 ü ( ) PART3-4 3.2 포인터변수의선언과사용 3.2 포인터 변수의 선언과 사용 (1/8) 포인터 변수의

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

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

<4D F736F F F696E74202D204B FC7C1B7CEB1D7B7A55F F6E48616E646C6572B8A6C5EBC7D1BFA1B7AFB0CBC3E2B9D7BCF6C1A

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

More information

(01-16)유형아작중1-2_스피드.ps

(01-16)유형아작중1-2_스피드.ps 01 p.10 0001 000 61 0003 4 8 3 4 5 7 4 3 3 3 6 8 9 5 1 1 3 7 9 6 0 1 0004 4 0005 0006 3 0007 6 0008 30 0009 3 19 0010 10 ~14 14 ~18 9 18 ~1 11 1 ~16 4 16 ~0 4 30 0011 160 cm 170 cm 001 10 cm 5 0013 135

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

PowerPoint 프레젠테이션

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

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

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

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

More information

2015 CodeGate 풀이보고서 김성우 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다

2015 CodeGate 풀이보고서 김성우   1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다 2015 CodeGate 풀이보고서 김성우 rkwk0112@gmail.com http://cd80.tistory.com 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다 argv[1] 의주소는스택에있으므로 cmd부터버퍼를오버플로우시켜 argv[1] 이저장된주소까지접근이가능하면 strlen(argv[1]); 시

More information

저자는 코드나 정보제공에 있어서의 모든 행동에 대해 책임을 지지 않습니다

저자는 코드나 정보제공에 있어서의 모든 행동에 대해 책임을 지지 않습니다 Exploiting Windows Device Drivers By Piotr Bania http://pb.specialised.info "By the pricking of my thumbs, something wicked this way comes..." "Macbeth", William Shakespeare. Univ.Chosun

More information

본 발명은 중공코어 프리캐스트 슬래브 및 그 시공방법에 관한 것으로, 자세하게는 중공코어로 형성된 프리캐스트 슬래브 에 온돌을 일체로 구성한 슬래브 구조 및 그 시공방법에 관한 것이다. 이를 위한 온돌 일체형 중공코어 프리캐스트 슬래브는, 공장에서 제작되는 중공코어 프

본 발명은 중공코어 프리캐스트 슬래브 및 그 시공방법에 관한 것으로, 자세하게는 중공코어로 형성된 프리캐스트 슬래브 에 온돌을 일체로 구성한 슬래브 구조 및 그 시공방법에 관한 것이다. 이를 위한 온돌 일체형 중공코어 프리캐스트 슬래브는, 공장에서 제작되는 중공코어 프 (51) Int. Cl. E04B 5/32 (2006.01) (19)대한민국특허청(KR) (12) 등록특허공보(B1) (45) 공고일자 (11) 등록번호 (24) 등록일자 2007년03월12일 10-0693122 2007년03월05일 (21) 출원번호 10-2006-0048965 (65) 공개번호 (22) 출원일자 2006년05월30일 (43) 공개일자 심사청구일자

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

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

익스플로잇실습 / 튜토리얼 Easy RM to MP3 Converter ROP [ Direct RET VirtualProtect() 함수사용 ] By WraithOfGhost

익스플로잇실습 / 튜토리얼 Easy RM to MP3 Converter ROP [ Direct RET VirtualProtect() 함수사용 ] By WraithOfGhost 익스플로잇실습 / 튜토리얼 Easy RM to MP3 Converter 2.7.3 ROP [ Direct RET VirtualProtect() 함수사용 ] By WraithOfGhost Easy RM to MP3 Converter_v2.7.3을이용하여 ROP 공격에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional

More information

Microsoft Word - AntiCrackingTechnique.doc

Microsoft Word - AntiCrackingTechnique.doc Reverse Engineering Anti-Cracking Techniques 저자 : Nicolaous George (ishtus@astalavista.com) & Charalambous Glafkos (glafkos@astalavista.com) 편역 : Kancho ( kancholove@gmail.com ) 이문서는 www.milw0rm.com의 [papers]

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

<BDC3B8AEBEF320B9F8C8A320C0DBBCBA20B7E7C6BEC0BB20BBCCBEC6B3BBBCAD D466F E687770>

<BDC3B8AEBEF320B9F8C8A320C0DBBCBA20B7E7C6BEC0BB20BBCCBEC6B3BBBCAD D466F E687770> 시리얼번호작성루틴을뽑아내서 Brute-Force 돌리기.. 작성일 : 2005년가을작성자 : graylynx (graylynx at gmail.com) 크랙미정보 GOAL : Find the correct password No patching allowed Difficulty : 2/10 This is an exercise on brute-attacking.

More information

17장 클래스와 메소드

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

More information

03장.스택.key

03장.스택.key ---------------- DATA STRUCTURES USING C ---------------- 03CHAPTER 1 ? (stack): (LIFO:Last-In First-Out) 2 : top : ( index -1 ),,, 3 : ( ) ( ) -> ->. ->.... 4 Stack ADT : (LIFO) : init():. is_empty():

More information

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems C Programming 컴퓨터시스템 (Computer Systems) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 컴퓨터시스템 프로그래밍언어 2 컴퓨터시스템 컴퓨터시스템 컴퓨터하드웨어 컴퓨터소프트웨어 프로그래밍언어 3 컴퓨터시스템 컴퓨터시스템 하드웨어 : 물리적인장비 소프트웨어 : 프로그램 ( 명령어 ) 들의집합 Computer

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

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

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

(001~007)수능기적(적통)부속

(001~007)수능기적(적통)부속 0 6 06. C : k d=k+c k «+-, : «d= «± +C + =- : d=: ;[!; d=l +C : kf()d=k: f()d k : { f()+g()} d=: f()d+: g()d : { f()-g()} d=: f()d-: g()d : si d=-cos +C : cos d=si+c 008 : sec d=ta +C : cosec d=-cot +C

More information

@ p a g e c o n te n tt y p e = " te x t/ h tm l;c h a rs e t= u tf- 8 " fo r (in t i= 0 ; i< = 1 0 ; i+ + ) { o u t.p rin tln (" H e llo W o rld " + i + " < b r/> " ); = re s u lt + re s u lts u m ()

More information

/* */

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

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

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

Data Structure

Data Structure Function & Pointer C- 언어의활용을위한주요기법 (3) Dong Kyue Kim Hanyang University dqkim@hanyang.ac.kr 함수의인자전달 함수의인자전달 함수의인자전달방식 인자전달의기본방식은복사다. 함수호출시전달되는값을매개변수를통해서전달받는데, 이때에값의복사가일어난다. int main(void) int val = 10;

More information

G5 G25 H5 I5 J5 K5 AVERAGE B5 F5 AVERAGE G5 G24 MAX B5 F5 MIN B5 F5 $G$25 0.58 $H$25 $G$25 $G$25 0.58 $H$25 G24 H25 H24 I24 J24 K24 A5 A24 G5 G24, I5

G5 G25 H5 I5 J5 K5 AVERAGE B5 F5 AVERAGE G5 G24 MAX B5 F5 MIN B5 F5 $G$25 0.58 $H$25 $G$25 $G$25 0.58 $H$25 G24 H25 H24 I24 J24 K24 A5 A24 G5 G24, I5 C15 B6 B12 / B6 B7 C16 F6 F12 / F6 F7 G16 C16/C15 1 C18 B6 B12 / B6 B8 B9 C19 F6 F12 / F6 F8 F9 G19 C19/C18 1 1 G5 G25 H5 I5 J5 K5 AVERAGE B5 F5 AVERAGE G5 G24 MAX B5 F5 MIN B5 F5 $G$25 0.58 $H$25 $G$25

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

Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python Ollydbg 1.x, Immunity Debugg

Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python Ollydbg 1.x, Immunity Debugg 익스플로잇실습 / 튜토리얼 Eureka Mail Client 2.2q Omelet Egg Hunting By WraithOfGhost Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python 2.7.10 - Ollydbg

More information

11장 포인터

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

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

<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

기본자료형만으로이루어진인자를받아서함수를결과값으로반환하는고차함수 기본자료형과함수를인자와결과값에모두이용하는고차함수 다음절에서는여러가지예를통해서고차함수가어떤경우에유용한지를설명한다. 2 고차함수의 예??장에서대상체만바뀌고중간과정은동일한계산이반복될때함수를이용하면전체연산식을간 단

기본자료형만으로이루어진인자를받아서함수를결과값으로반환하는고차함수 기본자료형과함수를인자와결과값에모두이용하는고차함수 다음절에서는여러가지예를통해서고차함수가어떤경우에유용한지를설명한다. 2 고차함수의 예??장에서대상체만바뀌고중간과정은동일한계산이반복될때함수를이용하면전체연산식을간 단 EECS-101 전자계산입문 고차함수 박성우 2008년5월 29일 지금까지정수나부동소수와같은기본적인자료형의조합을인자로받고결과값으로반환하는 함수에대해서배웠다. 이번강의에서는함수자체를다른함수의인자로이용하거나결과값으로 이용하는 방법을 배운다. 1 고차함수의 의미 계산은무엇을어떻게처리하여결과값을얻는지설명하는것으로이루어진다. 여기서 무엇 과 결 과값 은계산의대상체로서정수나부동소수와같은기본자료형의조합으로표현하며,

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

슬라이드 1

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

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 - \301\337\260\243\260\355\273\347.docx)

(Microsoft Word - \301\337\260\243\260\355\273\347.docx) 내장형시스템공학 (NH466) 중간고사 학번 : 이름 : 문제 배점 점수 1 20 2 20 3 20 4 20 5 10 6 10 7 15 8 20 9 15 합계 150 1. (20 점 ) 다음용어에대해서설명하시오. (1) 정보은닉 (Information Hiding) (2) 캡슐화 (Encapsulation) (3) 오버로딩 (Overloading) (4) 생성자

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The 4 th Lecture 유명환 ( yoo@netplug.co.kr) 1 시간 (Time) 에대한정의 INDEX 2 왜타이머 (Timer) 와카운터 (Counter) 인가? 3 ATmega128 타이머 / 카운터동작구조 4 ATmega128 타이머 / 카운터관련레지스터 5 뻔뻔한노하우 : 레지스터비트설정방법 6 ATmega128

More information

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어서가장중요한부분이라고도할수있기때문입니다. 1. 새로운메크로생성 새메크로만들기버튺을클릭하여파일을생성합니다. 2. 메크로저장 -

More information