모의해킹/리버싱

Deep Dive Reversing

철민1234 2023. 6. 27. 22:54
728x90

• 리버싱이란

- 프로그램의 실행파일을 분석하고 이해하는 과정

- 프로그램의 동작 원리, 알고리즘, 보안 기법 등을 파악할 수 있음

- 소프트웨어 제작 과정

 > 소스 코드 작성 -> 컴파일/링크 -> 실행 가능한 Binary 파일

- 리버싱 과정

 > Binary 파일 해석(어셈블리) -> 프로그램 소스 코드 추측 -> 목적 행위에 필요한 정보 수집 및 행위 실행

 

• 분석의 종류

- 정적 분석 : 바이너리 파일을 파일 구조를 통해 헤더, 코드 영역, 데이터 영역 등으로 나누고 필요한 정보를 수집하는 행위

> 정적 분석 도구 : Hxd, PEView, IDA, Ghidra

- 동적 분석 : 파일을 실행시켜서 디버거 등의 툴을 이용해 메모리, 레지스터 등의 정보를 종합하여 실행단계에서 정보를 수집하는 행위

> 동적 분석 도구 : OllyDbg, Windbg, x64 dbg, gdb, IDA, Sandbox

 

• 실습 1

더보기
전체 화면

 

실행 파일

프로그램이 실행 되기 전의 실행되는 ntdll.dll 파일

EIP : 명령 지시자 (현재 위치?)

 

프로그램 실행

 

F9 : 프로그램 실행 

F8 : 한줄씩 실행, Call 명령어에서 함수로 들어가지 않고 실행

F7 : 한줄씩 실행, Call 명령어에서 함수로 들어가게 해 줌

F2 : Break Point

Ctrl + F2 : 프로그램 재시작

 

- 리버싱 

1. 실행흐름을 찾는다. => 삽질,,,,

 

2. 메모리에서 검색한다.

마우스 오른쪽 클릭 -> Search for -> All User Modules -> String references 

 3. Xref를 통해서 찾는다.

마우스 오른쪽 클릭 -> Search for -> All Modules -> Intermodular calls

Hello World.exe 파일

프로그램 실행 시, Hello World! 메시지 박수 내용 수정 

 

메모리 검색

수정할 메시지 내용을 메모리 검색을 통해 위치를 찾아준다.

 

4092 A0 메모리에 Hello World! 가 램에 저장되어 있다.

0040100 E 메모리에서 저장된 MessageBoxw를 출력해 주는 거 같다.

 

4092 A0 메모리에 저장된 내용을 확인하기 위해 Memory Window 클릭 후 Ctrl+G 단축키를 눌러 4092A0 메모리로 이동을 해주면 Hello world! 가 저장된 걸 확인할 수 있다.

 

마우스 우클릭 -> Edit를 통해 해당 메시지 내용을 수정하면 메시지 수정한다.

 

수정된 메시지로 출력이 된다.


• 실습 2 (Crackme 1)

Crackme1.exe 실행(흐름 : register, 시리얼 넘버를 우회? 확인?)

 

F9를 눌러 crackme1.exe 파일 실행 위치로 이동한다.

 

실패 메시지(우회하기 위해)를 통해 메모리 위치를 찾는다.

 

찾은 메모리 위치를 에서 조금 올라가 보니 의심되는 부분이 있어 Break Point를 걸어준다.

 

의심되는 "Registered User"를 입력해 준다.

 

Break Point 걸어둔 곳에서부터 F8로 한 줄씩 실행을 시키다 보면  jne에서 점프를 하지 않고 밑으로 내려간다. 즉 Registered User 가 맞는 답이다.

이렇게 시리얼 넘버도 확인을 하면 해당 문제를 풀 수 있다.

 

• Byte Ordering 

- 빅 엔디안 방식 : 낮은 주소에  데이터의 높은 바이트부터 저장하는 방식 (0x1234 -> 0x1234) 

- 리틀 엔디안 방식 : 낮은 주소에 데이터의 작은 바이트부터 저장하는 방식 (0x1234 -> 0x3412)