imgusdn
기초 리버싱 01 본문
리버스 엔지니어링
일반적인 의미에서 리버스 엔지니어링(Reverse Engineering, RE: 역공학)은
물건이나 기계장치 혹은 시스템 등의 구조, 기능 동작 등을 분석하여
그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업
리버스 코드 엔지니어링
리버스 코드 엔지니어링(Reverse Code Engineering, RCE)은 소프트웨어 분야의 리버스 엔지니어링
소프트웨어를 리버싱 관점에서 상세하게 분석한다는 뜻
리버싱(분석) 방법
실행 파일의 분석 방법에는 정적 분석과 동적 분석이 있다.
정적 분석
파일의 겉모습을 관찰하여 분석하는 방법.
파일을 실행하지 않고, 파일의 종류(EXE, DLL, DOC, ZIP 등), 크기, 헤더(PE)정보, Import/Export API, 내부 문자열,
실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등의 다양한 내용을 확인하는 것.
디스어셈블러를 이용해서 내부 코드와 그 구조를 확인하는 것도 정적 분석의 범주
이러한 방법으로 얻어낸 다양한 정보는 이후 동적 분석 방법에 좋은 참고 자료로 활용된다.
동적 분석
파일을 직접 실행시켜서 그 행위를 분석하고, 디버깅을 통하여 코드 흐름과 메모리 상태 등을 자세히 살펴보는 방법
파일, 레지스트리, 네트워크 등을 관찰하면서 프로그램의 행위를 분석한다.
디버거를 이용하여 프로그램 내부 구조와 동작 원리를 분석할 수 있다.
Source Code
리버싱에서 취급하는 대상은 보통 실행 파일인 경우가 많아 소스코드 없이 실행 파일의 바이너리 자체를 분석한다.
-> 소스코드와 바이너리 코드 사이의 관계를 살펴 보는 것이 리버싱을 이해하는데 도움 됨.
개발 도구에서 소스코드(Helloworld.cpp)를 빌드하면 Helloworld.exe 실행 파일이 생성된다.
Hex Code
생성된 실행 파일은 컴퓨터가 이해할 수 있는 2진수(Binary) 형식으로 되어 있다.
0과 1로만 구성되어 있는 binary 파일을 해석하는 것은 힘들기 때문에
2진수 -> 16진수(Hex) 형식으로 변환시키는데 자릿수가 줄어들어 보기에 수월하다.
Assembly code
Hex Code는 사람에게 직관적인 형태가 아니기 때문에 사람이 좀 더 이해하기 쉬운 어셈블리(Assembly) 코드 형태로 보기 위해 Helloworld.exe 실행 파일을 디버거를 이용해 열어본다.
Hex Code를 디스어셈블 과정을 거쳐서 어셈블리 코드로 변환하여 보여준다.
일반적인 리버싱 과정에서는 어셈블리 코드를 분석하곤 한다.
사람이 이해하기 편한 언어의 과정
기계어(2진수,Binary) -> Hex Code(16진수) -> Assembly Code -> 고급언어 (파이썬, 자바, C언어 등)
패치와 크랙
패치(patch) : 프로그램의 파일 혹은 실행 중인 프로세스 메모리의 내용을 변경하는 작업
크랙(crack) : 패치와 같은 개념이지만 특별히 그 의도가 비합법적이고 비도덕적인 경우
패치의 ex) Microsoft의 Windows 업데이트
패치의 주된 목적은 프로그램의 취약점 수정과 기능 개선 등.
크랙은 주로 저작권을 침해하는 행위(불법 복제/사용 등)에 주로 사용
'리버싱' 카테고리의 다른 글
Hello Wolrd 실행파일을 디버깅 (0) | 2023.06.22 |
---|