Download presentation
Presentation is loading. Please wait.
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
12
__flsindex는 어디서 왔는가? _mainCRTStartup => mtinit
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
버퍼 보안 검사
26
Size Input RET ADDR EBP Buffer Buffer
27
RET ADDR EBP Security Cookie Buffer Buffer
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
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
감사합니다. 끝~
Similar presentations