Presentation is loading. Please wait.

Presentation is loading. Please wait.

CRT 뽀개기 신영진.

Similar presentations


Presentation on theme: "CRT 뽀개기 신영진."— Presentation transcript:

1 CRT 뽀개기 신영진

2 누규? 신영진 codewiz, codewiz@gmail.com @codemaru http://www.jiniya.net
Microsoft Visual C++ MVP 월간 마이크로소프트웨어 필자 ㈜웰비아닷컴 게임보안 제품 개발

3 핵심 주제 멀티스레드 CRT 버퍼 보안 검사 전역 변수 초기화

4 CRT 일반론

5 CRT가 먼가요? C/C++ Runtime Library C/C++ 표준 함수들을 포함하고 있는 라이브러리

6 CRT도 종류가 있다? 디버그와 릴리즈 멀티스레드와 싱글스레드(2005부터 삭제됨) 정적 라이브러리와 동적 라이브러리

7 디버그 vs 릴리즈 DllMain(instance, reason, lpReserved)
Release 모드에서 lpReserved를 건드리면 쪼다 된다는거

8 멀티스레드 vs 싱글스레드

9 멀티스레드 버전은?

10 _getptd

11

12 __flsindex는 어디서 왔는가? _mainCRTStartup => mtinit

13

14 tiddata

15 그래서 결론은?

16 ptd 1번 스레드 2번 스레드 ptd 3번 스레드 ptd

17 정적 vs 동적 라이브러리 EXE EXE CRT DLL DLL CRT DLL CRT

18 CRT 종류 이름 설명 Libc.lib 정적, 싱글스레드, 릴리즈 Libcd.lib 정적, 싱글스레드, 디버그
Libcmt.lib 정적, 멀티스레드, 릴리즈 Libcmtd.lib 정적, 멀티스레드, 디버그 Msvcrt.lib 동적, 멀티스레드, 릴리즈 Msvcrtd.lib 동적, 멀티스레드, 디버그

19 CRT 설정하기

20 라이브러리 충돌 EXE CRT a.lib CRT DLL

21 해결방법

22 CRT가 하는 일? C/C++ 표준 함수 제공 프로그램 초기화/클린업 예외 처리 지원 안전한 예외 처리기(Safe SEH)
버퍼 보안 검사 64비트 정수 연산 지원 스택 관리 자체 힙 관리 전역 변수 초기화 우리가 모르는 온갖 잡다한 일들,…

23 버퍼 보안 검사

24 버퍼 보안 검사

25

26 Size Input RET ADDR EBP Buffer Buffer

27 RET ADDR EBP Security Cookie Buffer Buffer

28

29 push ebp mov ebp, esp sub esp, 0Ch mov eax, dword ptr [__security_cookie] xor eax, ebp mov dword ptr [ebp – 4], eax

30 mov ecx, dword ptr [ebp – 4]
xor ecx, ebp call _security_check_cookie mov esp, ebp pop ebp ret

31 __security_check_cookie

32 전역 변수 초기화

33 전역 변수 초기화

34 dumpbin

35 cinit

36 _initterm

37 .CRT$X…

38 스택 관리 기법

39 스택 할당

40 윈도우 스택 관리 메커니즘 Commit Commit Commit Commit EXCEPTION GUARD PAGE
Reserved Guard Page Reserved Reserved

41 _chkstk

42

43

44 예외 처리

45 C++ Exception, SEH

46 C++ Exception

47 CRT 전용 힙

48 malloc

49 malloc_base

50 heap_alloc

51 heap_init

52 new/delete 문제

53 new/delete 문제 EXE CRT DLL CRT

54 감사합니다. 끝~


Download ppt "CRT 뽀개기 신영진."

Similar presentations


Ads by Google