이미 소장하고 있다면 판매해 보세요.
|
1장소개 1
1. Binary Hack 입문 1 2. Binary Hack 용어 정리 4 3. file - 파일 종류 확인 12 4. od - 바이너리 파일 덤프 15 2장오브젝트 파일 Hack 21 5. ELF 입문 21 6. 정적 라이브러리와 공유 라이브러리 34 7. ldd - 공유 라이브러리 의존관계 확인 37 8. readelf - ELF 파일 정보 보기 42 9. objdump - (1) 오브젝트 파일 덤프 45 10. objdump - (2) 오브젝트 파일 역어셈블 50 11. objcopy - 실행 파일에 데이터 삽입하기 55 12. nm - 오브젝트 파일에 포함된 심볼 확인 56 13. strings - 바이너리 파일에서 문자열 추출 63 14. c++filt - C++ 심볼 demangle 65 15. addr2line - 주소에서 파일명과 행 번호 얻기 66 16. strip - 오브젝트 파일에서 심볼 삭제 68 17. ar - 정적 라이브러리 다루기 70 18. C와 C++ 프로그램 링크 방법 71 19. 링크할 때 심볼 충돌 방지하기 78 20. GNU/리눅스 시스템에서 공유 라이브러리에 PIC를 사용하는 이유 85 21. statifier - 동적 실행 파일에서 의사 정적 실행 파일 생성 89 3장GNU 프로그래밍 Hack 93 22. GCC 확장기능 입문 94 23. GCC로 인라인 어셈블러 사용 100 24. GCC 빌트인 함수를 이용한 최적화 105 25. glibc를 이용하지 않은 “Hello World” 109 26. TLS(Thread Local Storage) 114 27. glibc로 시스템 환경에 따라 라이브러리 전환하기 116 28. 링크된 라이브러리에 따라 프로그램 동작 바꾸기 120 29. 라이브러리 외부에 공개할 심볼 제한 122 30. 호환성 관리를 위해 버전별 심볼 사용 126 31. main( ) 함수 이전에 함수호출하기 134 32. 실행 중에 GCC가 트램펄린 코드를 생성하는 방법 138 33. 스택에 있는 코드의 실행 허용/금지 140 34. 힙에 있는 코드 실행 142 35. PIE(Position Independant Executable, 위치독립실행형식) 생성 144 36. C++로 synchronized method 작성 147 37. C++로 싱글톤 생성 152 38. g++ 예외 처리 이해(throw) 158 39. g++ 예외 처리 이해(SjLj) 160 40. g++ 예외 처리 이해(DWARF2) 168 41. g++ 예외 처리의 실행 시간 비용 172 4장보안 프로그래밍 Hack 177 42. GCC 보안 프로그래밍 입문 177 43.-ftrapv로 정수 연산 오버플로 검출 182 44. Mudflap - 버퍼 오버플로 검출 186 45.-D_FORTIFY_SOURCE로 버퍼 오버플로 검출 190 46.-fstack-protector로 스택 보호 194 47. bitmask 사용 시 unsigned를 사용하는 이유 198 48. big shift 작업이 위험한 이유 200 49. 64비트 환경에서 0과 NULL의 차이점 202 50. POSIX 스레드 안전한 함수 205 51.시그널 핸들러 안전하게 작성하기 209 52.sigwait - 비동기 시그널을 동기적으로 처리하기 215 53.sigsafe - 안전하게 시그널 처리하기 220 54. Valgrind - (1) 메모리 누수 검출하기 230 55. Valgrind - (2) 비정상적인 메모리 접근 검출하기 233 56. Helgrind - 멀티스레드 프로그램 디버그하기 237 57. fakeroot - 거짓 root 권한으로 프로세스 실행하기 241 5장런타임 Hack 245 58. 프로그램이 main( )에 도달하기까지의 과정 245 59. 시스템콜을 호출하는 방법 255 60.LD_PRELOAD로 공유 라이브러리 교체하기 259 61.LD_PRELOAD로 기존 함수 래핑하기 262 62.dlopen - 실행 중에 동적 링크하기 265 63. C로 백트레이스 표시 270 64. 실행 중인 프로세스의 절대경로 확인 276 65. 실행 중인 프로세스에서 로드하고 있는 공유 라이브러리 확인 280 66. 실행 중인 프로세스의 메모리 맵 확인 286 67. libbfd - 심볼 열거하기 292 68. 실행 중에 C++ 심볼 demangle하기 297 69. ffcall - 동적 시그니처로 함수호출 300 70. libdwarf - 디버그 정보 얻기 305 71. dumper - 구조체 데이터를 보기 쉽게 덤프하기 310 72. 오브젝트 파일을 직접 로드하기 314 73. libunwind - 콜 체인 제어하기 322 74. GNU lightning - 실행 중에 이식 가능한 코드 생성하기 326 75. 스택 영역의 주소 얻기 329 76.sigaltstack - 스택 오버플로에 대처하기 335 77. 함수 진입(enter)/종료(exit) 후킹하기 347 78. 시그널 핸들러로 프로그램 컨텍스트 변경하기 350 79. 프로그램 카운터 값 얻기 352 80. 자기수정코드로 프로그램 동작 변경 353 81.SIGSEGV로 주소 접근 유효성 확인 357 82. strace - 시스템콜 추적하기 360 83. ltrace - 공유 라이브러리의 함수호출 추적하기 362 84.Jockey로 리눅스 프로그램의 실행을 기록, 재생하기 364 85. prelink - 프로그램 기동 향상시키기 366 86. livepatch - 실행 중인 프로세스 패치하기 370 6장프로파일러쪾디버거 Hack 379 87.gprof - 프로파일 조사하기 379 88.sysprof - 시스템 프로파일 조사하기 383 89.oprofile - 상세한 시스템 프로파일 얻기 385 90.GDB - 실행 중인 프로세스 제어하기 390 91.하드웨어 디버그 기능 사용하기 393 92.C 프로그램에서 중단점 설정하기 397 7장그 밖의 Hack 399 93. Boehm GC의 구조 399 94. 프로세서의 메모리 정렬 406 95. PCL을 이용한 경량 병행처리 411 95. CPU 클록 수 세기 414 97. 부동소수점 수의 비트 표현 419 98. x86 부동소수점 연산자의 특성 421 99. 결과가 무한대 또는 NaN인 연산에서 시그널 발생하기 426 100.문헌안내 429 찾아보기 439 |
|
1장. 소개
Binary Hack의 개념을 익힌다. 이 책에 사용된 다양한 기술용어에 대한 해설과 Binary Hack의 가장 기본이 되는 툴을 소개하고 있다. 2장. 오브젝트 파일 Hack 실행 파일과 공유 라이브러리의 본체인 오브젝트 파일에 대해 심도 있게 설명한다. 먼저, GNU/리눅스 등에서 사용되는 ELF에 대해 해설하고, 라이브러리에 관한 Hack을 소개한다. 오브젝트 파일 Hack의 기본적인 GNU Binutils의 사용법도 설명하고 있다. 3장. GNU 프로그래밍 Hack GNU 개발환경, 이를테면 GCC, glibc를 시작으로 하는 GNU 소프트웨어에는 다양한 확장기능이 있다. 이 장에서는 GNU 개발환경의 힘을 최대한 끌어내는 테크닉에 대해 알아본다. 4장. 보안 프로그래밍 Hack 보안 프로그램을 작성하는 것은 현대에 가장 중요한 과제 중 하나다. 이 장에서는 보안 허점을 막기 위한 테크닉과 보안 허점을 발견하고 퇴치하는 방법을 소개한다. 5장. 런타임 Hack 프로그램 실행 시간에 프로그램이 자신의 코드를 재작성하거나, 자신의 상태를 조사할 수 있다면 재미있지 않겠는가? 이 장에서는 실행 중인 프로그램에 대해 적용 가능한 여러 가지 테크닉을 소개한다. 6장. 프로파일러/디버거 Hack 이 장에서는 프로파일러를 사용해 프로그램의 병목점을 알아내는 방법 및 고도의 디버거 사용법을 소개하고 있다. 또한 프로파일러로 gprof, sysprof, oprofile을, 디버거로는 GDB를 다루고 있다. 7장. 그 밖의 Hack 이 장에서는 위에서 분류할 수 없었던 Hack을 다룬다. 마지막 Hack은 참고문헌 안내로 앞으로의 Binary Hack 안내서가 되어 줄 서적과 웹사이트를 소개하고 있다. 이 책의 이용법 이 책은 처음부터 순서대로 읽거나 목차에서 재미있을 것 같은 항목을 선택해서 먼저 읽어도 상관없다. 만일 바이너리 기술에 관한 기초적인 지식을 얻고자 한다면 먼저 1장을 대강 읽어 봐도 좋다. 또한 프로그래밍 경험이 아직 많지 않다면 각 장의 초급 Hack을 먼저 읽는 것이 좋다. 이 책에서 다루는 것과 다루지 않는 것 이 책에는 Binary Hacking에 불가결한 기본 툴의 사용법에서 GCC 확장기능, OS 시스템콜, 인라인 어셈블러 등을 이용한 고도의 테크닉을 주로 다루고 있다. 대상 플랫폼은 유닉스(UNIX) 또는 GNU/리눅스에 초점을 맞추고 있다. 윈도우(Windows)의 Win32 API를 이용한 Binary Hacking은 거의 다루지 않지만, Cygwin을 이용한 GNU 기반의 개발환경에서는 이 책에서 다룬 Hack의 대부분을 적용할 수 있을 것이다. |