YeoPEVA
리버싱 핵심 원리 챕터1,2장 필기 및 정리 본문
1단원 – 리버싱 스토리
리버스 엔지니어링이란? -> 역공학이라고 하기도 함, 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을
분석하여 그 원리를 이해, 단점을 보완, 새로운 아이디어를 추가하는 일련의 작업이라고 함.
리버스 코드 엔지니어링 -> 소프트웨어 분야의 리버스 엔지니어링 | 용어 통일이 정확하게 안되있음.
그래서 역공학이라 하기도 하고.. RCE,RE, 리버싱 등.. 뭐 그렇게 쓰입니다.
이 책에서는 RCE, RE or 리버싱이라 표현 | 분석, 상세 분석 용어 사용
소프트웨어를 리버싱 관점에서 상세하게 분석한다는 뜻임.
분석 방법..?
정적 분석
-> 겉 모습을 관찰하여 분석하는 방법임. [직접적인 실행은 하지 않음.]
파일의 종류, 크기, 헤더정보, Import/Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버깅 정보
디지털 인증서 등의 다양한 내용을 확인함. | 디스어셈블러 사용 – 내부 코드와 그 구조 확인 또한
정적 분석에 들어갈 수 있음. [동적 분석에 좋은 자료가 됨]
동적 분석
-> 파일을 직접 실행시켜 그 행위를 분석, 디버깅을 통하여 코드 흐름과 메모리 상태 등을 자세히 살펴봄
파일 | 레지스터리 | 네트워크 등을 관찰하면서 프로그램의 행위를 분석, 또한 디버거를 이용해
프로그램 내부 구조와 동작 원리를 분석함.
정적 분석 [구조와 동작 원리 예측] -> 예상과 비교하면서 동적 분석 [효과적인 분석이 가능하다.]
소스코드, Hex 코드, 어셈블리 코드
리버싱 취급 대상? -> exe 와 같은 실행파일이 대부분 | 소스코드 없이 실행 파일의 바이너리 자체 분석
고로.. 소스코드와 바이너리 코드 사이의 관계를 살펴 보는 것이 리버싱을 이해 할시에 도움이 됨
소스 코드 [코드 작성, 빌드 -> 실행파일 등장]
Hex Code [ 실행 파일 – [컴퓨터 이해 가능한 2진수 ..인데 어떻게 이걸 읽어?] -> [Hex 형식 변화]
-> 헥사 에디터 사용하여 hex 형식으로 봄 [아 편하당]
어셈블리 코드 -> Hex code는 편해지긴 하지만, 사람이 봐도 뭔 소리인지 모르는 경우가 있음 [..]
그래서 더 이해가 쉬운 어셈블리 형태로 보기 위해 디버거로 열어서 어셈블리 형태로
보는 것이 가능하다. [Hex code -> 디스어셈블 과정 -> 어셈블리 코드 등장!]
일반적으로 이러한 어셈블리 코드를 분석하는데 ARM 같이 환경에 따라 또 쓰이는 것이 다르고
처음에 보면 이게 뭔 소리인지도 몰랑 으히히히힠키히
패치와 크랙
패치 -> 프로그램 파일 or 실행 중인 프로세스 메모리 내용 변경을 패치라고 함.
크랙 -> 패치와 같은 일이지만 비 도덕적, 비합법적인 경우를 말함.
이런 식으로 리버싱은 양날의 칼이 될 수 있음. [피해 입힐지도..] 그러니 주의합시다!
준비물 -> 목표,열정,구글 그리고 딴딴한 멘탈
목표 -> 리버싱을 왜 배워야 하는지에 대한 대답 [배워서 랜섬웨어 분석 하고 싶어요.]
자신만의 목표를 설정해서 맞춰서 하는게 역시 빠른편이다.
열정 -> 목표를 향해 끈기 있게 나아갈 수 있게 해주는 힘! [열정!]
열정만 가지고 있으면, 아무리 넘어져도 괜찮다! 다시 시도하다보면 전문가가 될 수 있다!
구글 -> 뭔 말이 필요한가, 최고의 교수이자, 선생이자, 만물 도서관인 구글이다!
방해물? -> 과욕, 조급함
과욕 -> 생소한 개념이 많아, 한번에 다 이해하고자 하면 힘듬, 어느정도에서 만족 필요
조급함 -> 공부할 내용 넘나 많음 [OS 이해, 시스템 프로그래밍, API, 어셈블리어, 함수 호출 구조,
PE 파일, 언패킹 | 패킹 등 많으니까..] 천천히 해결하자.
리버싱의 묘오오미?
-> 고수준 언어 [C,C++,VB ETC]를 리버싱 할 경우 저수준 언어인 어셈블리로 바꾸어 분석함.
고로, 소스코드 공개는 안했지만, 실력 있는 리버서에게는 그냥 내부 구조가 보임. [히읽]
한마디로 소스코드가 일부 사람에게는 그냥 보임 [ㅇㅁㅇ?]
묘미를 느껴봅시다!
2단원
F7 – 하나의 OP code 실행 [CALL – 코드 내부]
F8 – 하나의 OP code 실행 [코드 내부 x | 함수 자체 실행]
Ctrl + F2 – 다시 처음부터 디버깅 시작 [디버깅 당하는 프로세스를 종료하고 재실행]
Ctrl + G – 원하는 주소를 찾아감 [코드를 확인할 때 사용 | 실행 x]
F9 – 실행 [BP 있을 경우, BP 그곳에서 실행 정지]
Ctrl + F9 – 함수 코드 내에서 RETN 명령어까지 실행 [함수 탈출시 사용]
F4 – 커서 위치까지 실행 [디버깅 하고 싶은 주소까지 바로 이동] | BP + F9 라 생각하면 편함
; - 코맨트 추가 [주석이라 생각하면 편할 듯]
마우스 메뉴 Search for -> user-defined comment – 사용자가 입력한 코맨트 목록 확인
: - 라벨 추가 [label]
마우스 메뉴 Search for -> defined label – 사용자가 입력한 Label 목록 확인
F2 – 브레이크 포인트 설정 및 해제
마우스 메뉴 Search for -> All referenced text strings – 코드에서 참조되는 문자열 보기
마우스 메뉴 Search for -> All intermodular calls – 코드에서 호출되는 모든 API 함수 보기
마우스 메뉴 Search for -> All intermodules – 모든 API 함수 보기
Ctrl + E – 데이터 편집
스페이스 바 – 어셈블리 코드 작성
마우스 메뉴 Copy to executable file – 파일의 복사본 생성
기본 어셈블리 명령어들
CALL xxxx– 함수 호출 [xxxx 주소 함수]
JMP xxxx – 점프 [xxxx 주소로]
PUSH xxxx – 스택에 [xxxx 으로 저장]
RETN – 스택에 저장된 복귀 주소로 점프
프로세스 data 및 code 패치 -> Edit data 및 Assemble 이용 바람
VA [Virtual Address] – 프로세스 가상 메모리
OP code – CPU 명령어 [바이트 code]
PE[Portable Executable] – windows 실행 파일 [EXE,DLL 등등..]
'#Reversing > Reversing - 정리' 카테고리의 다른 글
쿠쿠 샌드박스 구축 (0) | 2019.03.14 |
---|---|
리버싱 핵심원리 6장, 7장 필기 및 정리 (3) | 2018.02.22 |
어셈블리어 - CMP, 그리고 JMP에 대해 알아보자! (3) | 2017.07.23 |
리버스 엔지니어링 - 전반적인 계획 (0) | 2017.07.21 |
올리디버거 색상 설정 (0) | 2017.07.19 |