교내 보안 동아리 활동으로 2학기~겨울방학까지 리버싱 스터디를 진행하였습니다.
벌써 어지럽지만 리버싱 개념을 잡고 어셈블리부터 차근차근 공부하기로
리버싱 입문 chapter01 읽고 정리한 내용입니다
리버싱 엔지니어링(Reverse Engineering)
소프트웨어 공학의 한 분야로, 이미 만들어진 시스템을 역으로 추척하여 시스템의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하고 처음의 문서나 설계 기법 등의 자료를 얻어내는 것, 역공학이라고도 함
*필요한 지식: 레지스터, 메모리, 스택, 어셈블러, PE 구조, 디버깅 등
정적 분석(static analysis)
- 파일을 실행하지 않고, 파일을 관찰하여 분석하는 방법
- 주로 악성코드와 같이 실행하면서 분석하기 어려운 시스템을 정적 분석을 통해 분석
동적 분석(dynamic analysis)
- 실제 또는 가상 프로세서에서 프로그램을 실행하며 분석하는 방법
- 프로그램의 동작 과정, 기능, 메모리/CPU 사용량, 스택값, 전체 성능 등의 정보를 확인할 수 있음
1. 프로그램 실행 구조
2. 레지스터
: CPU에서 사용하는 고속의 기억장치, 연산을 수행하기 위해 메모리에 있는 데이터를 가져옴
- EAX: 곱셈과 나눗셈 명령에서 사용되며, 함수의 반환값을 저장
- EBX: 인덱스에 사용
- ECX: 반복 카운터 저장
- EDX: EAX와 같이 사용되며 부호 확장 명령 등에 활용
- ESI: 데이터 복사 및 조작 시 소스 데이터 주소 저장
- EDI: 복사 작업을 할 때 목적지 주소 저장
- EBP: 하나의스택 프레임의 시작 주소 저장
- ESP: 하나의 스택 프레임의 끝 지점 주소 저장, PUSH, POP 명령어에 따라서 4바이트씩 변함
- EIP: 다음에 실행할 명령어가 저장된 메모리 주소 저장
3. 스택
- LIFO 방식으로 동작, PUSH, POP
- 스택은 시작 주소에서 주소가 작아지는 방향으로 데이터가 쌓인다.
- PUSH: ESP-4 POP: ESP+4
- ESP(스택 포인터): 현재 프로그램이 사용하는 스택의 위치
- 스택 프레임: 서브루틴(함수)이 가지는 자신만의 스택 영역, 함수가 호출될 때 생성, 종료될 때 소멸, 복귀 주소를 POP
4. PE 파일
- 윈도우에서는 실행파일을 PE(Portable Executable) 파일이라고 부른다.
- PE 파일은 헤더와 바디로 구성된다.
*header: 프로그램을 실행하는데 필요한 기본 정보, 규칙
*body: 기계어(코드 및 데이터) - 엔트리 포인트가 PE 파일 실행이 시작되는 주소임
- PE 포맷
* 실행 계열: exe, scr
*라이브러리 계열: dll, ocx, cpl, drv
*드라이버 계열: sys, vxd
*오브젝트 계열: dbj - 주소 지정 방법
*pFile: PE 파일 내부에서의 오프셋
*RVA: 메모리에 로드됐을 때, 기준값에서 얼마나 떨어져 있는지를 나타내는 상대위치
*VA: 가상 메모리상에 저장되는 실제 주소
->pFile은 하드디스크에 저장되었을 때, VA와 RVA는 메모리에 로드됐을 때 의미가 있는 값임
5. 어셈블러
- 컴퓨터가 이해할 수 있는 연속적인 비트로 구성된 기계어를 사람이 알아볼 수 있도록 만든 일종의 매크로 모음
- 기계어와 1:1로 매칭됨
- 최대 3개까지 인자를 받아들일 수 있음, 오른쪽에서 왼쪽으로 로직이 흘러감
ex) ADD EAX, EBX -> EAX 레지스터 값에 EBX 레지스터 값을 더해 EAX 레지스터에 저장
->01D8
6. OllyDbg
- 윈도우용 어셈블러를 분석할 수 있는 디버거(http://www.ollydbg.de/)
--------------------------------------------------------------------------------------------------------------------
리버싱 기초 예제 abex crackme
Lena 강의 등 참고하면 좋음
'해킹 및 보안 > 리버싱' 카테고리의 다른 글
[스무디] 어셈블리어 강의 정리 (18~22강) (0) | 2022.11.10 |
---|---|
[스무디]어셈블리어 강의 13~17강 정리 (0) | 2022.10.13 |
[스무디] 어셈블리어 강의 8~12강 정리 (0) | 2022.10.06 |
[스무디] 어셈블리어 강의4~7강 정리 (0) | 2022.10.02 |
[ 스무디 ] 어셈블리어 강의 1~ 3강 정리 (1) | 2022.10.02 |