이번 주차는 유튜트 강의를 활용하여 리버싱에 대한 기초 지식을 알아갔다.
1~4강을 듣고 각자의 필기 내용과 질문을 공유하는 시간을 가졌다.
https://youtube.com/playlist?list=PLY12b4RRLcSdsxgVvTW3mnNzMjVrd8JhO&si=dw319z0VSZfxiXHy
리버싱이란?
공학의 반대 -> 역공학
ex) 스마트폰
<공학> 정방향
설계도 -> 재료 -> 만들기 -> 제품
<역공학> 역방향
제품 -> 어떤 방식으로 만들었는지 -> 재료 파악 -> 설계도 구현
리버싱 분석방법
1. 정적분석 : 파일을 실행하지 않고 분석하는 방법. 정적 파일의 겉모습을 분석한다. ex) IDA
2. 동적분석: 파일을 실행하지 않고 분석하는 방법. 파일 깊이 들어가서 분석 및 관찰한다. ex) cheat engine, Ollydbg, x64dbg
어셈블리어
기계와 1:1 대응되는 언어
패치와 크랙
패치: 프로세스의 메모리를 변경하는 것
크랙: 패치와 비스하나 불법적인 경우
gdb 사용방법
EP (Entry Point): 파일의 시작점
BP (Break Point): 프로세스를 일시적으로 중단할 지점
● x64dbg 단축키
Ctrl + F2 - 처음부터 디버깅 시작
F7 - 하나의 OP code 실행(내부로 들어감)
F8 - 하나의 OP code 실행
Ctrl + F9 - RETN 명령어까지 실행 (함수 탈출 목적)
SpaceBar - 코드 수정 가능
Hello World 분석하기
● Hello World 실행파일을 디버깅하여 어셈블리 언어로 변환하여 main 함수를 찾아보고 이 과정을 통해 기본적인 디버거의 사용 방법과 어셈블리 명령어를 알아보자
MassageBox를 호출하는 함수나 HelloWorld 문자열을 출력하는 부분을 찾는다.
바이트 오더링 (Byte Odering)
컴퓨터에서 메모리에 데이터를 저장하는 방식을 의미한다.
1. 빅 엔디안 (Big Endian)
모든 데이터를 순서대로 저장한다.
장점: 사람이 보기에 직관적이다.
단점: Window의 Intel 사용이 안된다. 서버용 CPU에서 사용된다.
2. 리틀 엔디안 (Little Endian)
멀티바이트만 역순으로 저장한다
장점: Window에서 사용된다. 데이터를 효율적으로 저장할 수 있다.
단점: 사람이 보기에 어렵다.
Name | 빅엔디안 | 리틀엔디안 | ||
byte | a | 1 | [12] | [12] |
word | b | 2 | [12][34] | [34][12] |
dword | ab | 4 | [12][34][56][78] | [78][56][34][12] |
char[] | str | 4 | [12][12][12][00] | [12][12][12][00] |
● 리틀엔디안 직접 확인해보기
CPU 레지스터
CPU 내부에 있는 저장공간을 말한다. 즉, CPU 내부에 있기에 데이터 연산속도가 매우 빠르다.
- 범용 레지스터 (General Register) : 막 쓰는 레지스터 ?
● 산술 명령어에서 상수/ 변수 값이 저장되는 용도
EAX | 결과값을 저장하거나 오퍼랜드를 축적 |
EBX | |
ECX | while문, for문 등 반복문을 사용할 때 loop count -1 감소 |
EDX |
● 메모리 주소를 저장하는 포인터 용도
ESI | |
EDI | |
EBP | ESP 값을 저장 |
ESP | 스택 메모리 주소 |
● 명령어 포인터 레지스터
EIP | CPU가 처리할 명령어 주소 |
● 플래그 레지스터 - 명령어 수행에 따라 True(1), False(0)로 세팅되며 32개가 있다
Zero Flag | 연산 명령 후에 결과 값이 0이 되면 1로 세팅된다. |
OverFlow Flag | 부호가 있는 수의 오버플로우가 발생했을 때, MSB가 변경되었을 때 1로 세팅된다. |
Carry Flag | 부호가 없는 수의 오버플로우가 발생했을 때 1로 세팅된다. |
'2. Reversing (리버싱)' 카테고리의 다른 글
[2024.03.30] 리버씽씽카 3주차 활동 (0) | 2024.03.30 |
---|---|
[2024.03.23] 리버씽씽카 2주차 활동 (1) | 2024.03.23 |
[2023.11.04] 리버싱 5주차 팀활동 (0) | 2023.11.10 |
[2023.10.07] 리버싱 3주차 팀활동 (0) | 2023.10.13 |
[2023.09.23] 리버싱 1주차 팀활동 (0) | 2023.09.29 |