본문내용 바로가기
MD의선택 무료배송 이벤트 사은품 소득공제

모두를 위한 리버싱 지침서 리버싱을 통한 어셈블리 언어의 이해

에이콘 해킹 보안 시리즈 | 2판
데니스 유리체프 지음 | 윤우빈 옮김 | 에이콘출판 | 2021년 03월 30일 출간
클로버 리뷰쓰기

이 책의 다른 상품 정보

  • 정가 : 69,000원
    판매가 : 62,100 [10%↓ 6,900원 할인]
  • 혜택 :
    [기본적립] 3450원 적립 [5% 적립] [추가적립] 5만원 이상 구매 시 2,000원 추가적립 안내 [회원혜택] 회원 등급 별, 3만원 이상 구매 시 2~4% 추가적립 안내 [리뷰적립] 리뷰 작성 시 e교환권 최대 300원 추가적립 안내
  • 추가혜택 : 포인트 안내 도서소득공제 안내 추가혜택 더보기
  • 배송비 : 무료 배송비 안내
  • 개정정보 : 이 도서는 가장 최근에 출간된 개정판입니다. 2015년 01월 출간된 구판이 있습니다. 구판 보기
  • 배송일정 : 서울특별시 종로구 세종대로 기준 지역변경
    10월 25일 출고 예정 배송일정 안내
  • 바로드림 : 인터넷으로 주문하고 매장에서 직접 수령 안내 바로드림 혜택
    휴일에는 바로드림 픽업으로 더 빨리 받아 보세요. 바로드림 혜택받고 이용하기

이 책의 이벤트

해외주문/바로드림/제휴사주문/업체배송건의 경우 1+1 증정상품이 발송되지 않습니다.
  • 2022 캘린더 수록한 IT독자를 위한 readIT 노트 사은품
    2021.10.14 ~ 2021.11.30
  • 책을 통해 성장해나가는 개발자를 응원합니다.
    2017.06.22 ~ 2025.07.31
상품상세정보
ISBN 9791161755090(1161755098)
쪽수 1508쪽
크기 187 * 236 * 59 mm /2415g 판형알림
이 책의 원서/번역서 Reverse Engineering for Beginners: Understanding Assembly Language / Dennis Yurichev

책소개

이 책이 속한 분야

개발자가 작성한 소스코드가 어떻게 컴파일되는지 이해하려면 컴파일러가 만들어낸 어셈블리 코드를 분석하는 방법과 컴파일 과정에서 최적화 옵션이 어떤 영향을 주는지, 소스코드상의 프로그래밍 요소(배열, 구조체, 포인터 등)와 다양한 프로그래밍 로직에 대한 어셈블리 코드를 설명한다. 또한 동일 소스코드에 대해서 x86 계열의 CPU뿐만 아니라 ARM, MIPS에서 만들어지는 어셈블리 코드를 비교 분석해 다양한 어셈블리 코드를 이해할 수 있는 능력을 기를 수 있다. 이 책은 진정한 리버스 엔지니어라면 반드시 읽어야할 지침서다.

작가의 말

어셈블리어를 앞으로 쓸 일이 전혀 없더라도 어셈블리어를 이해하면 프로그래밍에 많은 도움이 된다고 말하는 사람들이 있다. 이 말은 전적으로 맞는 말이다. 하지만 이는 엄청난 열정을 갖고 있는 프로그래머에게 해당되며, 처음에는 그렇게 할 필요까지는 없다.
또한 독학으로 공부하는 사람들(저자를 포함해서)은 어려운 문제에 너무 매달려 쉬운 문제를 건너뛰는 경향이 있다. 그것은 매우 잘못된 방법이다. 스포츠나 음악과 비교해 생각해보면 운동을 할 때 처음부터 100킬로그램부터 시작하거나 바이올린 연주를 배우고자 파가니니의 곡부터 시작하는 사람은 없기 때문이다. 마음속으로 문제의 해결책을 제시할 수 있을 때만 문제 해결을 위한 시도가 가능하다.
연구라는 것은 많은 질문과 때로는 그 질문에 대한 대답으로 구성된다고 생각한다.
해결하고자 하는 근본적인 질문의 특별한 경우를 나타내는 작은 질문들을 반복적으로 해보는 방법을 익혀야 한다.
어떤 분야에 대한 탐험을 시작한다면 처음에는 그 분야에 대한 직관을 얻는 것으로 첫걸음을 디뎌야 한다. 일반적인 상황의 특정 부분을 완전히 이해하고자 작은 부분들을 많이 살펴보기 바란다.
그렇게 함으로써 어떤 것이 사실이고 어떤 것이 그렇지 않다는 것을 많이 배우게 되며, 유익한 방향과 피해야 할 방향에 대한 가이드를 얻을 수 있다.
결국 당신의 뇌는 더 큰 단계에 이를 수 있는 방법을 배우게 될 것이고, 커다란 문제 해결을 위한 하나의 큰 걸음을 내디딜 수 있게 된다.
하지만 거기서 멈춰서는 안 된다. 그 순간 당신이 접한 큰 문제를 제대로 이해한 세상에서 몇 안 되는 사람 중 하나가 될 것이다. 따라서 당신의 뇌가 지금 상상할 수 있는 것과 동일하거나 유사한 방법으로 문제의 주변에 무엇이 진실인지를 발견해야만 한다. 분석 결과가 ‘자연적인 경계’(복잡한 변수의 함수를 더 이상 분석할 필요가 없을 때까지의 상태와 유사한 의미)에 이를 때까지 진행해야 한다.

목차

1장. 코드 패턴
1.1 방법론
1.2 몇 가지 기본 사항
1.2.1 CPU에 대한 간단한 소개
1.2.2 수 체계
1.2.3 다른 기수로의 변환
1.3 빈 함수
1.3.1 x86
1.3.2 ARM
1.3.3 MIPS
1.3.4 실제로 사용되는 빈 함수
1.4 리턴 값
1.4.1 x86
1.4.2 ARM
1.4.3 MIPS
1.5 Hello, world!
1.5.1 x86
1.5.2 x86-64
1.5.3 GCC: 한 가지 더
1.5.4 ARM
1.5.5 MIPS
1.5.6 결론
1.5.7 연습문제
1.6 함수 프롤로그와 에필로그
1.6.1 재귀
1.7 스택
1.7.1 스택이 거꾸로 자라는 이유
1.7.2 스택의 용도
1.7.3 전형적인 스택 레이아웃
1.7.4 스택 노이즈
1.7.5 연습문제
1.8 여러 개의 인자를 취하는 printf()
1.8.1 x86
1.8.2 ARM
1.8.3 MIPS
1.8.4 결론
1.8.5 부연 설명
1.9 scanf()
1.9.1 간단한 예
1.9.2 흔히 하는 실수
1.9.3 전역 변수
1.9.4 scanf()
1.9.5 연습문제
1.10 전달된 인자에 접근
1.10.1 x86
1.10.2 x64
1.10.3 ARM
1.10.4 MIPS
1.11 리턴 결과 더 알아보기
1.11.1 void를 리턴하는 함수의 결과 사용
1.11.2 함수의 결과를 사용하지 않는 경우
1.11.3 구조체 리턴
1.12 포인터
1.12.1 리턴 값
1.12.2 입력값 교환
1.13 GOTO 연산
1.13.1 데드 코드
1.13.2 연습
1.14 조건부 점프
1.14.1 간단한 예
1.14.2 절댓값 계산
1.14.3 3항 연산자
1.14.4 최댓값, 최솟값 구하기
1.14.5 결론
1.14.6 연습
1.15 switch()/case/default
1.15.1 경우의 수가 적은 switch()문
1.15.2 경우의 수가 많은 switch()문
1.15.3 한 블록에 여러 경우가 존재할 때
1.15.4 폴쓰루
1.15.5 연습
1.16 루프
1.16.1 간단한 예
1.16.2 메모리 블록 복사 루틴
1.16.3 조건 검사
1.16.4 결론
1.16.5 연습
1.17 간단한 C 문자열 처리
1.17.1 strlen()
1.17.2 문자열의 경계
1.18 산술 연산 명령 치환
1.18.1 곱셈
1.18.2 나눗셈
1.18.3 연습
1.19 부동소수점 장치
1.19.1 IEEE 754
1.19.2 x86
1.19.3 ARM, MIPS, x86/x64 SIMD
1.19.4 C/C++
1.19.5 간단한 예제
1.19.6 부동소수점 수를 인자로 전달
1.19.7 비교 연산 예제
1.19.8 어떤 상수 값
1.19.9 복사
1.19.10 스택과 계산기, 역폴란드 표기법
1.19.11 왜 80비트인가?
1.19.12 x64
1.19.13 연습
1.20 배열
1.20.1 간단한 예
1.20.2 버퍼 오버플로
1.20.3 버퍼 오버플로에서 보호하는 방법
1.20.4 배열 관련 내용 하나 더
1.20.5 문자열에 대한 포인터 배열
1.20.6 다차원 배열
1.20.7 문자열 집합을 2차원 배열로 처리
1.20.8 결론
1.20.9 연습
1.21 예: Angband 게임의 버그
1.22 특정 비트 처리
1.22.1 특정 비트 검사
1.22.2 특정 비트의 설정과 해제
1.22.3 시프트
1.22.4 특정 비트의 설정과 해제: FPU 예
1.22.5 1로 설정된 비트 수 세기
1.22.6 결론
1.22.7 연습
1.23 의사 난수 생성기로서의 선형 합동 생성기
1.23.1 x86
1.23.2 x64
1.23.3 32비트 ARM
1.23.4 MIPS
1.23.5 예제의 스레드 안전 버전
1.24 구조체
1.24.1 MSVC: SYSTEMTIME 예제
1.24.2 malloc()을 이용한 구조체 할당
1.24.3 유닉스: struct tm
1.24.4 구조체에서 필드 패킹
1.24.5 중첩된 구조체
1.24.6 구조체에서의 비트 필드
1.24.7 연습
1.25 공용체
1.25.1 의사 난수 생성기 예제
1.25.2 머신 엡실론 계산
1.25.3 FSCALE 명령어 교체
1.25.4 빠른 제곱근 계산
1.26 함수 포인터
1.26.1 MSVC
1.26.2 GCC
1.26.3 함수 포인터의 위험성
1.27 32비트 환경에서의 64비트 값
1.27.1 64비트 값 리턴
1.27.2 인자 전달, 덧셈, 뺄셈
1.27.3 곱셈, 나눗셈
1.27.4 우측 시프트
1.27.5 32비트 값을 64비트로 변환
1.28 SIMD
1.28.1 벡터화
1.28.2 SIMD strlen() 구현
1.29 64비트
1.29.1 x86-64
1.29.2 ARM
1.29.3 부동소수점 수
1.29.4 64비트 아키텍처에 대한 비판
1.30 SIMD를 이용한 부동소수점 수 처리
1.30.1 간단한 예제
1.30.2 부동소수점 수를 인자로 전달
1.30.3 비교 예제
1.30.4 머신 엡실론 계산: x64과 SIMD
1.30.5 의사 난수 생성기 예제 다시 보기
1.30.6 정리
1.31 ARM 관련 세부 사항
1.31.1 숫자 앞의 # 표시
1.31.2 주소 지정 모드
1.31.3 레지스터에 상수 로드
1.31.4 ARM64에서의 재배치
1.32 MIPS 관련 세부 사항
1.32.1 32비트 상수를 레지스터에 로드
1.32.2 MIPS에 대한 추가 자료


2장. 중요한 기초 내용
2.1 정수형 데이터 타입
2.1.1 비트
2.1.2 니블
2.1.3 바이트
2.1.4 와이드 문자
2.1.5 부호 있는 정수와 부호 없는 정수
2.1.6 워드
2.1.7 주소 레지스터
2.1.8 숫자
2.2 부호 있는 수의 표현
2.2.1 IMUL과 MUL 명령어
2.2.2 2의 보수에 대한 추가적인 내용
2.3 정수 오버플로
2.4 AND
2.4.1 값이 2n 경계에 있는지 확인
2.4.2 KOI-8R 키릴 문자 인코딩
2.5 빼기와 더하기를 위한 AND와 OR
2.5.1 ZX Spectrum ROM 문자열
2.6 XOR(exclusive OR)
2.6.1 일상에서의 XOR 연산
2.6.2 암호화
2.6.3 RAID4
2.6.4 XOR 스왑 알고리즘
2.6.5 XOR 링크드 리스트
2.6.6 조브리스트 해싱/타뷸레이션 해싱
2.6.7 부연 설명
2.6.8 MOV를 위한 AND/OR/XOR
2.7 POPCNT
2.8 엔디안
2.8.1 빅엔디안
2.8.2 리틀엔디안
2.8.3 예제
2.8.4 바이엔디안
2.8.5 데이터 변환
2.9 메모리
2.10 CPU
2.10.1 분기 예측기
2.10.2 데이터 의존성
2.11 해시 함수
2.11.1 단방향 함수의 동작 방식


3장. 좀 더 진보된 예제
3.1 이중 부정
3.2 strstr() 예제
3.3 온도 변환
3.3.1 정수 값
3.3.2 부동소수점 수
3.4 피보나치 수
3.4.1 예제 #1
3.4.2 예제 #2
3.4.3 정리
3.5 CRC32 계산 예제
3.6 네트워크 주소 계산 예제
3.6.1 calc_network_address()
3.6.2 form_IP()
3.6.3 print_as_IP()
3.6.4 form_netmask(), set_bit()
3.6.5 정리
3.7 루프: 몇 가지 반복 지시자
3.7.1 세 개의 반복 지시자
3.7.2 두 개의 반복 지시자
3.7.3 인텔 C++ 2011의 경우
3.8 더프의 디바이스
3.8.1 펼쳐진 루프를 사용해야 할까?
3.9 곱하기를 이용한 나누기
3.9.1 x86
3.9.2 동작 방식
3.9.3 ARM
3.9.4 MIPS
3.9.5 연습
3.10 문자열을 숫자로 변환(atoi())
3.10.1 간단한 예제
3.10.2 좀 더 복잡한 예제
3.10.3 연습
3.11 인라인 함수
3.11.1 문자열과 메모리 함수
3.12 C99 restrict
3.13 브랜치 없는 abs() 함수
3.13.1 최적화를 수행한 GCC 4.9.1 x64
3.13.2 최적화를 수행한 GCC 4.9 ARM64
3.14 가변 함수
3.14.1 산술 평균 계산
3.14.2 vprintf() 함수
3.14.3 Pin의 경우
3.14.4 형식 문자열 공격
3.15 문자열 트리밍
3.15.1 x64: 최적화를 수행한 MSVC 2013
3.15.2 x64: 최적화를 수행하지 않은 GCC 4.9.1
3.15.3 x64: 최적화를 수행한 GCC 4.9.1
3.15.4 ARM64: 최적화를 수행하지 않은 GCC(Linaro) 4.9
3.15.5 ARM64: 최적화를 수행한 GCC(Linaro) 4.9
3.15.6 ARM: 최적화를 수행한 Keil 6/2013(ARM 모드)
3.15.7 ARM: 최적화를 수행한 Keil 6/2013(Thumb 모드)
3.15.8 MIPS
3.16 toupper() 함수
3.16.1 x64
3.16.2 ARM
3.16.3 비트 연산 이용
3.16.4 정리
3.17 난독화
3.17.1 텍스트 문자열
3.17.2 실행 코드
3.17.3 가상 머신/의사 코드
3.17.4 추가 내용
3.17.5 연습
3.18 C++
3.18.1 클래스
3.18.2 ostream
3.18.3 참조
3.18.4 STL
3.18.5 메모리
3.19 음수의 배열 인덱스
3.19.1 끝에서부터 문자열 주소 지정
3.19.2 끝에서부터 메모리 블록의 주소 지정
3.19.3 인덱스가 1부터 시작하는 배열
3.20 비트 연산을 이용해 12비트를 배열에 패킹(x64, ARM/ ARM64, MIPS)
3.20.1 소개
3.20.2 데이터 구조체
3.20.3 알고리즘
3.20.4 C/C++ 코드
3.20.5 동작 방식
3.20.6 x86-64에서 최적화를 수행한 GCC 4.8.2
3.20.7 최적화를 수행한 Keil 5.05(Thumb 모드)
3.20.8 최적화를 수행한 Keil 5.05(ARM 모드)
3.20.9 (32비트 ARM) Thumb과 ARM 모드의 코드 밀도 비교
3.20.10 ARM64에서 최적화를 수행한 GCC 4.9.3
3.20.11 MIPS에서 최적화를 수행한 GCC 4.4.5
3.20.12 실제 FAT12와의 차이점
3.20.13 연습
3.20.14 정리
3.20.15 결론
3.21 포인터에 대한 추가 내용
3.21.1 포인터 대신 주소를 사용
3.21.2 포인터로 값을 전달
3.21.3 윈도우 커널에서의 포인터 어뷰징
3.21.4 Null 포인터
3.21.5 함수 인자로서의 배열
3.21.6 함수에 대한 포인터
3.21.7 객체 식별자로서의 포인터
3.21.8 오라클 RDBMS와 C/C++를 위한 간단한 가비지 컬렉터
3.22 루프 최적화
3.22.1 이상한 루프 최적화
3.22.2 또 다른 루프 최적화
3.23 구조체에 대한 추가 내용
3.23.1 가끔 C 구조체를 배열 대신 사용할 수 있다
3.23.2 C 구조체에서 크기가 지정되지 않은 배열
3.23.3 C 구조체의 버전
3.23.4 ‘Block out’ 게임의 하이 스코어 파일과 직렬화
3.24 memmove()와 memcpy()
3.24.1 안티디버깅 트릭
3.25 setjmp/longjmp
3.26 또 다른 스택 트릭
3.26.1 호출자의 인자/로컬 변수에 접근하기
3.26.2 문자열 리턴
3.27 OpenMP
3.27.1 MSVC
3.27.2 GCC
3.28 또 다른 하이젠버그
3.29 잊혀진 리턴
3.30 윈도우 16비트
3.30.1 예제 #1
3.30.2 예제 #2
3.30.3 예제 #3
3.30.4 예제 #4
3.30.5 예제 #5
3.30.6 예제 #6


4장. 자바
4.1 자바
4.1.1 소개
4.1.2 값을 리턴
4.1.3 간단한 계산 함수
4.1.4 JVM 메모리 모텔
4.1.5 간단한 함수 호출
4.1.6 beep() 호출
4.1.7 선형 합동 의사 난수 생성기
4.1.8 조건 점프
4.1.9 인자 전달
4.1.10 비트필드
4.1.11 루프
4.1.12 switch()
4.1.13 배열
4.1.14 문자열
4.1.15 예외
4.1.16 클래스
4.1.17 간단한 패치
4.1.18 요약


5장. 코드에서 중요하고 흥미로운 부분 찾아내기
5.1 실행 파일 식별
5.1.1 마이크로소프트 비주얼 C++
5.1.2 GCC
5.1.3 인텔 포트란
5.1.4 와콤, 오픈와콤
5.1.5 볼랜드
5.1.6 기타 DLL
5.2 외부와의 통신(함수 레벨)
5.3 외부와의 통신(Win32)
5.3.1 윈도우 API에서 자주 사용되는 함수
5.3.2 트라이얼 기간 연장
5.3.3 성가신 대화상자 제거
5.3.4 트레이서: 특정 모듈의 모든 함수 인터셉트
5.4 문자열
5.4.1 텍스트 문자열
5.4.2 바이너리에서 문자열 찾기
5.4.3 에러/디버그 메시지
5.4.4 의심스러운 매직 문자열
5.5 assert() 호출
5.6 상수
5.6.1 매직 넘버
5.6.2 특정 상수
5.6.3 상수 검색
5.7 특정 명령어 찾기
5.8 의심스러운 코드 패턴
5.8.1 XOR 명령어
5.8.2 사람이 직접 작성한 어셈블리 코드
5.9 트레이싱 중에 매직 넘버 사용
5.10 루프
5.10.1 몇 가지 바이너리 파일 패턴
5.10.2 메모리 스냅샷 비교
5.11 ISA 판단
5.11.1 올바로 디스어셈블되지 않은 코드
5.11.2 올바로 디스어셈블된 코드
5.12 기타 내용
5.12.1 일반적인 팁
5.12.2 바이너리 코드에서의 함수 순서
5.12.3 간단한 함수
5.12.4 C++


6장. 운영체제 관련
6.1 인자 전달 방법(호출 규약)
6.1.1 cdecl
6.1.2 stdcall
6.1.3 fastcall
6.1.4 thiscall
6.1.5 x86-64
6.1.6 float과 double 타입 값 리턴
6.1.7 인자 수정
6.1.8 함수 인자에 대한 포인터 가져오기
6.2 스레드 지역 저장소
6.2.1 선형 합동 생성기 재검토
6.3 시스템 콜(syscall-s)
6.3.1 리눅스
6.4 리눅스
6.4.1 위치 독립적 코드
6.4.2 리눅스에서의 LD_PRELOAD 트릭
6.5 윈도우 NT
6.5.1 CRT(win32)
6.5.2 Win32 PE
6.5.3 윈도우 SEH
6.5.4 윈도우 NT: 크리티컬 섹션


7장. 도구
7.1 바이너리 분석
7.1.1 디스어셈블러
7.1.2 디컴파일러
7.1.3 패치 비교
7.2 라이브 분석
7.2.1 디버거
7.2.2 라이브러리 호출 추적
7.2.3 시스템 콜 추적
7.2.4 네트워크 스니핑
7.2.5 Sysinternals
7.2.6 Valgrind
7.2.7 에뮬레이터
7.3 기타 도구
7.3.1 계산기
7.4 그 외에 빠진 도구가 있을까?


8장. 실전 예제
8.1 작업 관리자 속이기(윈도우 비스타)
8.1.1 LEA를 사용한 값 로딩
8.2 Color Lines 게임 속이기
8.3 지뢰 찾기(윈도우 XP)
8.3.1 자동으로 배열의 주소 찾기
8.3.2 연습문제
8.4 윈도우 시계 해킹
8.5 동글
8.5.1 예제 #1: 맥OS Classic과 파워PC
8.5.2 예제 #2: SCO OpenServer
8.5.3 예제 #3: MS-DOS
8.6 암호화된 데이터베이스 케이스 #1
8.6.1 Base64와 엔트로피
8.6.2 데이터 압축 여부 판단
8.6.3 데이터 암호화 여부 판단
8.6.4 CryptoPP
8.6.5 CFB 모드
8.6.6 초기화 벡터
8.6.7 버퍼의 구조
8.6.8 끝부분의 노이즈
8.6.9 결론
8.6.10 추가 내용: IV에 대한 무작위 대입 공격
8.7 오버클로킹 Cointerra 비트코인 채굴기
8.8 암호화된 간단한 실행 파일 분석
8.8.1 추가로 고려할 수 있는 또 다른 아이디어
8.9 SAP
8.9.1 SAP 클라이언트 네트워크 트래픽 압축
8.9.2 SAP 6.0 비밀번호 체크 함수
8.10 오라클 RDBMS
8.10.1 오라클 RDBMS의 V$VERSION 테이블
8.10.2 오라클 RDBMS의 X$KSMLRU 테이블
8.10.3 오라클 RDBMS의 V$TIMER 테이블
8.11 손으로 작성한 어셈블리 코드
8.11.1 EICAR 테스트 파일
8.12 데모
8.12.1 10 PRINT CHR$(205.5+RND(1)); : GOTO 10
8.12.2 망델브로 집합
8.13 기타 예제


9장. 비공개 파일 포맷 리버싱
9.1 XOR 암호화
9.1.1 가장 간단한 XOR 암호화
9.1.2 노턴 가이드: 가장 간단한 1바이트 XOR 암호화
9.1.3 간단한 4바이트 XOR 암호화
9.1.4 XOR 마스크를 이용한 간단한 암호화
9.1.5 XOR 마스크를 이용한 간단한 암호화(두 번째 예제)
9.2 정보 엔트로피
9.2.1 Mathematica에서 엔트로피 분석
9.2.2 결론
9.2.3 도구
9.2.4 XOR를 이용한 원시적인 암호화 관련 용어
9.2.5 실행 코드의 엔트로피에 관한 추가 내용
9.2.6 PRNG
9.2.7 다른 예제
9.2.8 다양한 파일들의 엔트로피
9.2.9 엔트로피 낮추기
9.3 밀레니엄 게임 저장 파일
9.4 fortune 프로그램 인덱싱 파일
9.4.1 해킹
9.4.2 파일
9.5 오라클 RDBMS: .SYM 파일
9.6 오라클 RDBMS: .MSB 파일
9.6.1 정리
9.7 연습
9.8 추가 자료


10장. 동적 바이너리 인스트루멘테이션
10.1 XOR을 가로채기 위한 PIN DBI
10.2 PIN을 이용한 지뢰 찾기 게임 크랙
10.2.1 모든 rand() 함수 호출 가로채기
10.2.2 rand() 함수 호출을 우리 함수로 교체
10.2.3 지뢰가 배치되는 방법
10.2.4 연습
10.3 PIN 설치
10.4 인스트루멘테이션이라고 하는 이유


11장. 기타 사항
11.1 실행 파일 패치
11.1.1 텍스트 문자열
11.1.2 x86 코드
11.2 함수 인자 수의 통계
11.3 컴파일러 인트린직
11.4 컴파일러 이상 동작
11.4.1 오라클 RDBMS 11.2와 인텔 C++ 10.1
11.4.2 MSVC 6.0
11.4.3 정리
11.5 아이태니엄
11.6 8086 메모리 모델
11.7 기본 블록 재배치
11.7.1 프로필 기반 최적화
11.8 Hex-Rays 2.2.0 사용 경험
11.8.1 버그
11.8.2 이상한 특징
11.8.3 침묵
11.8.4 콤마
11.8.5 데이터 타입
11.8.6 길고 혼란스러운 표현
11.8.7 문제 해결 방안
11.8.8 정리


12장. 추천 책과 블로그
12.1 책과 기타 자료
12.1.1 리버스 엔지니어링
12.1.2 윈도우
12.1.3 C/C++
12.1.4 x86 / x86-64
12.1.5 ARM
12.1.6 어셈블리어
12.1.7 자바
12.1.8 유닉스
12.1.9 프로그래밍 일반
12.1.10 암호학


13장. 커뮤니티
13.1 질문


부록
.1 x86
.1.1 용어
.1.2 범용 레지스터(GPR, General Purpose Registers)
.1.3 FPU 레지스터
.1.4 SIMD 레지스터
.1.5 디버깅 레지스터
.1.6 명령어
.1.7 npad
.2 ARM
.2.1 용어
.2.2 버전
.2.3 32비트 ARM(AArch32)
.2.4 64비트 ARM(AArch64)
.2.5 명령어
.3 MIPS
.3.1 레지스터
.3.2 명령어
.4 GCC 라이브러리 함수
.5 MSVC 라이브러리 함수
.6 치트시트
.6.1 IDA
.6.2 OllyDbg
.6.3 MSVC
.6.4 GCC
.6.5 GDB

추천사

피트 피니건(Pete Finnigan)(오라클 RDBMS 보안 전문가)

데니스 유리체프가 쓴 문서를 읽었다. 훌륭하다

마이클 시코스키(Michael Sikorski)(『실전 악성코드와 멀웨어 분석(Practical Malware Analysis)』(에이콘, 2013)의 저자)

흥미로운 책이다. 유리체프는 대단한 작업을 해냈다.

허버트 보스(Herbert Bos)(VU 대학교 암스테르담의 정교수, 『Modern Operating Systems 4/e』(Pearson, 2014)의 공동 저자)

이 훌륭한 리버싱 가이드에 찬사를 보낸다

루이스 로차(Luis Rocha)(CISSP/ISSAP, 버라이즌 비즈니스의 네트워크 및 정보보안 기술 매니저)

믿기 어려울 정도로 놀라운 책이다

요리스 반 더 비스(Joris van de Vis)(SAP Netweaver 및 보안 전문가)

엄청난 노력과 훌륭한 책에 감사를 표한다

출판사 서평

★ 이 책에서 다루는 내용 ★

OS 개발자가 아니라면 어셈블리로 코드를 작성할 필요는 없을 것이다. 또한 최신 컴파일러(2010)는 사람보다 최적화 수행 능력이 더 좋다. 또한 최신의 CPU는 매우 복잡해서 어셈블리에 대한 지식이 CPU의 세부 내용을 이해하는 데 그렇게 도움이 되지는 않는다. 하지만 최소한 두 가지 영역에서는 어셈블리에 대한 이해가 도움이 된다. 무엇보다도 보안/악성 프로그램 연구에 도움이 된다. 그리고 디버깅하는 동안 컴파일된 코드를 이해한다면 많은 도움이 된다. 따라서 이 책은 어셈블리 코드를 작성하기보다... 더보기

Klover 리뷰 (0)

북로그 리뷰 (0) 쓰러가기

북로그 리뷰는 본인 인증 후 작성 가능합니다.
책이나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 내용은 비공개 처리 될 수 있습니다.
※ 북로그 리뷰 리워드 제공 2021. 4. 1 종료

문장수집 (0) 문장수집 쓰기 나의 독서기록 보기
※구매 후 문장수집 작성 시, 리워드를 제공합니다. 안내

교환/반품/품절안내

※ 상품 설명에 반품/교환 관련한 안내가 있는 경우 그 내용을 우선으로 합니다. (업체 사정에 따라 달라질 수 있습니다.)

교환/반품/품절안내
반품/교환방법 마이룸 > 주문관리 > 주문/배송내역 > 주문조회 > 반품/교환신청 ,
[1:1상담>반품/교환/환불] 또는 고객센터 (1544-1900)

※ 오픈마켓, 해외배송주문, 기프트 주문시 [1:1상담>반품/교환/환불]
    또는 고객센터 (1544-1900)
반품/교환가능 기간 변심반품의 경우 수령 후 7일 이내,
상품의 결함 및 계약내용과 다를 경우 문제점 발견 후 30일 이내
반품/교환비용 변심 혹은 구매착오로 인한 반품/교환은 반송료 고객 부담
반품/교환 불가 사유
  • 소비자의 책임 있는 사유로 상품 등이 손실 또는 훼손된 경우
    (단지 확인을 위한 포장 훼손은 제외)
  • 소비자의 사용, 포장 개봉에 의해 상품 등의 가치가 현저히 감소한 경우
    예) 화장품, 식품, 가전제품(악세서리 포함) 등
  • 복제가 가능한 상품 등의 포장을 훼손한 경우
    예) 음반/DVD/비디오, 소프트웨어, 만화책, 잡지, 영상 화보집
  • 소비자의 요청에 따라 개별적으로 주문 제작되는 상품의 경우 ((1)해외주문도서)
  • 디지털 컨텐츠인 eBook, 오디오북 등을 1회 이상 다운로드를 받았을 경우
  • 시간의 경과에 의해 재판매가 곤란한 정도로 가치가 현저히 감소한 경우
  • 전자상거래 등에서의 소비자보호에 관한 법률이 정하는 소비자 청약철회 제한 내용에
    해당되는 경우
(1) 해외주문도서 : 이용자의 요청에 의한 개인주문상품으로 단순변심 및 착오로 인한 취소/교환/반품 시 ‘해외주문 반품/취소 수수료’ 고객 부담 (해외주문 반품/취소 수수료 : ①서양도서-판매정가의 12%, ②일본도서-판매정가의 7%를 적용)
상품 품절 공급사(출판사) 재고 사정에 의해 품절/지연될 수 있으며, 품절 시 관련 사항에 대해서는
이메일과 문자로 안내드리겠습니다.
소비자 피해보상
환불지연에 따른 배상
  • 상품의 불량에 의한 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은
    소비자분쟁해결 기준 (공정거래위원회 고시)에 준하여 처리됨
  • 대금 환불 및 환불지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의
    소비자 보호에 관한 법률에 따라 처리함
바로가기
  • 우측 확장형 배너 2
  • 우측 확장형 배너 2
최근 본 상품