본문 바로가기

공부

(12)
리버싱 공부 04 로 공부하였다. 04 IA-32 Register 기본 설명 4.1. CPU 레지스터 : CPU 내부에 존재하는 다목적 저장 공간, RAM과는 다르게 CPU와 한 몸이라 고속으로 처리 가능 IA-32(Inter Architecture 32비트)에서 제공하는 어셈블리 명령어를 공부해야(방대한 양이라 한번에 공부하는건 어려움) 디버깅을 잘 할 수 있는데 이 명령어를 제대로 이해하려면 레지스터를 알아야한다. 4.2. IA-32의 레지스터 IA-32는 지원하는 기능과 레지스터의 수가 매우 많다. 초급 단계일 때는 Basic program execution register를 알아두자. 순차적으로 Control, Memory management, Debug 레지스터 등에 대해서 공부하면 좋다. 관련 매뉴얼 : htt..
리버싱 공부 03 로 공부하였다. 03 리틀 엔디언 표기법 3.1. 바이트 오더링 : 데이터를 저장하는 방식(빅 엔디언, 리틀 엔디언) BYTE b = 0x12; WORD w = 0x1234; DWORD dw = 0x12345678; char str[] = "abced"; 타입 이름 크기 빅 엔디언 리틀 엔디언 BYTE b 1 [12] [12] WORD w 2 [12][34] [34][12] DWORD dw 4 [12][34][56][78] [78][56][34][12] char [] str 6 [61][62][63][64][65][00] [61][62][63][64][65][00] 즉, 리틀 엔디언 방식은 데이터 순서를 반대로 저장한다. 리틀 엔디언도 바이트 자체는 정상적인 순서로 저장한다. 문자열은 char 배열이기 ..
리버싱 공부 02 로 공부하였다. +소스 코드 및 실습 예제 링크 : https://github.com/reversecore/book/tree/master/%EC%8B%A4%EC%8A%B5%EC%98%88%EC%A0%9C/01_%EA%B8%B0%EC%B4%88_%EB%A6%AC%EB%B2%84%EC%8B%B1 02 Hello World! 리버싱 2.1. Hellow World! 프로그램 왼쪽이 디버그 모드, 오른쪽이 릴리즈 모드로 빌드한건데 실행 결과는 차이가 없다는 것을 알 수 있다. Debug모드 vs Release모드 빌드의 차이점 : https://coding-factory.tistory.com/648 위 링크에서 설명을 잘해놓았다. 쉽게 말하자면 release모드로 빌드 되었을 때 코드가 훨씬 간결해져서 보기 편..
리버싱 공부 01 로 공부하였다. 1부 기초 리버싱 01 리버싱 스토리 1.1.리버스 엔지니어링(역공학) : 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업. 1.2. 리버스 코드 엔지니어링 : 소프트웨어 분야의 리버스 엔지니어링 1.2.1. 리버싱 방법 : 정적 분석, 동적 분석 1) 정적 분석 : 파일의 겉모습을 관찰하여 분석하는 방법(파일 실행X) 파일의 종류, 크기, 헤더 정보, API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등 + 디스어셈블러를 이용해서 내부 코드와 그 구조를 확인하는 것 => 동적 분석의 참고 자료로 활용 2) 동적 분석 : 파일을 직접 실행해 행위를 분석하고, 디..