ReverseEngineering For CTF
O 개요
- 장치 또는 시스템의 기술적인 원리를 그 구조분석을 통해 발견하는 과정
O 리눅스 역공학
- GDB: ptrace 기반 소스레벨 디버거
- Biew: HexEdot
- CTF의 경우, 공격성 기법의 조합 및 최신 기법 요구
O 어셈블리
- 주요 데이터의 교환 및 조건 분기의 주요 유형
명령어 |
설명 |
lea edx,b |
Edx에 변수 b의 포인터 저장 |
Mov ebx,a |
Ebx는 변수 a의 값 저장 |
Mov ecx, offset a |
Exc는 변수 a에 대한 포인터 저장 |
Mov [edx],ebx |
변수 a를 변수 b에 복사 |
Mov b, ebx |
변수 a를 b에 복사 |
Cmp eax,ebx |
Eax와 ebx를 비교 |
Jz xxx |
두 값이 같으면 xxx로 분기 |
O GDB를 활용한 기본 Flow
- 프로그램을 로드-> b main -> run
- 인텔 문법으로 변경: set disassembly-flavor intel
O GDB 사용법
- 실행
n GDB를 이용하기 위해서는 컴파일 과정에서 디버깅 정보를 삽입(컴파일 시 g)
예) $ gcc -g -o main main.c
./gdb file ./gdb pid |
- 종료방법
GDB> q |
- Breakpoint(gdb가 종료될 때 까지 유효)
GDB> b(break) [함수명] // 일반 함수 lable은 NAME만, main은 *&main+offset GDB> b |
- Breakpoint Condition
GDB> condition [N] var == 0 //var변수가 0일때 N번 브레이크포인트 동작 |
- Breakpoint List
GDB> info break |
- Breakpoint Clear
GDB> d // 모든 break point 지움 GDB> disable br 1 3 // 1, 3번 브레이크 포인트 비활성화 |
- 프로그램 실행
GDB> run GDB> run arg1 arg2 |
- Tracing
GDB> step // 함수 내부로 진입, stepi 는 instruction 위주 GDB> step 6 // 함수 내부로 6번 진입 GDB> next // 함수 실행 후 진행, nexti 는 instruction 위주 GDB> next 6 // next 6번 수행 |
- Until, Continue, return
GDB> until // step 명령 시 함수 내부 탈출 GDB> continue // 다음 명령 실행 GDB> return // 함수 탈출 |
- Watch Point
GDB> watch [변수명] // 변수에 값이 Wrtie GDB> rwatch [변수명] // 변수에 값이 Read GDB> awatch [변수명] // 변수에 값이 Read, Write |
- Register
GDB> info locals // 지역변수 목록 GDB> info variales // 전역변수 목록 GDB> print [변수명], [함수명], *[변수명], $[레지스터] |
- Examine
GDB> x/[범위][출력형식][범위의 단위] 출력 형식 Ex) x/12i main |
'잡다' 카테고리의 다른 글
다이어리 (0) | 2021.03.12 |
---|---|
용기, 삶 (0) | 2021.02.03 |
PenetrationTest For CTF (0) | 2021.01.18 |
ltrace (0) | 2021.01.18 |
Digital Forensic For CTF (0) | 2021.01.18 |