사내스터디 발표 윈도우즈메모리의이해_20100428

1,402 views

Published on

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,402
On SlideShare
0
From Embeds
0
Number of Embeds
257
Actions
Shares
0
Downloads
2
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

사내스터디 발표 윈도우즈메모리의이해_20100428

  1. 1. 사내 스터디 윈도우즈 메모리의 이해 드림익스큐션 2010-4-28 서버 중원
  2. 2. c++에서.. 코드, 스택, 힙은 어디에 저장되나요?
  3. 3. PE Format HEADER (Portable Executable File Format) IMAGE_DOS_HEADER (64 bytes) ‘PE’ HEADER MS-DOS Stub IMAGE_FILE_HEADER IMAGE_NT_HEADERS IMAGE_OPTION_HEADER SECTION IMAGE_SESSION_HEADER - Image base - Entry address - Heap size .exe - Stack size ...
  4. 4. PE Format SECTION .text Section code .rdata Session Read only run time data HEADER .data Section Initialized data Imported names table .idata Section SECTION .rsrc Section Resources .exe .Other Section
  5. 5. #include <windows.h> #include <iostream> using namespace std; void test() { printf("Hello Worldn"); } int main() { test(); MessageBox(NULL, L"Hello World", NULL, MB_OK); getchar(); }tchar(); }
  6. 6. TEB(Thread Environment Block)란? - 스레드 스택 - 스레드 로컬 저장소 등 각종 정보들 DWORD GetLastError()
  7. 7. - TIB에서는 디버깅 중인지 정보를 가지고 있습니다. - FS 레지스터는 TIB의 포인터를 저장합니다. - 해커에 추적되지 않도록 IsDebuggerPresent() API와 같은 함수를 만들어주세요.
  8. 8. P201 DEBUGGING APPLICATIONS FOR WINDOWS. 로빈스 BOOL AntiHackIsDebuggerPresent( void) { BOOL bRet = TRUE; __asm { MOV EAX, FS:[00000018H] MOV EAX, DWORD PTR [EAX + 030H] MOVZX EAX, BYTE PTR [EAX+002H] MOV bRet, EAX } return (bRet); }
  9. 9. HelloWorld 프로그램을 메모리에 로드하면 얼마나 잡힐까? #include <stdio.h> Void main() { printf(“helloWorldn”); }
  10. 10. 0xFFFF’FFFF System Memory 2GB PROCESS VIRTUAL No Access 64kb 0x8000’0000 ADDRESS 0x7FFF’0000 TEB PEB SPACE Kernel32.dll User32.dll Gdi32.dll Other Dlls QA? 0x1000’0000 Free .EXE 0x0040’0000 Heap 0x0013’0000 Stack 0x0003’0000 No Access 64kb malloc()이 실패하면? 0x0000’0000
  11. 11. 8

×