콘텐츠로 이동

리버싱 핵심원리 1부 1장 정리

Note

본 게시글의 내용은 리버싱 핵심원리를 보며 복습 겸 정리하였습니다.

책의 내용과 일부 상이할 수 있고, 이해를 돕기 위해 강좌 형식의 말투와 적절한(?) 예시를 추가하였습니다.

본 게시글에서 사용되는 소스 코드와 파일, 프로그램은 리버싱 핵심원리에서 제공하는 파일과 언급되는 것들을 기반으로 하며, 일부 상이할 수 있습니다.

리버스 엔지니어링

리버스 엔지니어링(Reverse Engineering)은 기계장치나 시스템의 구조와 기능, 동작을 분석하여 그 원리를 파악 후 새로운 기능을 추가하거나 제거 또는 개선하는 것을 말합니다. 한국어로 '역공학'이라 번역하여 부르기도 합니다. 보통은 줄여서 '리버싱'이라 합니다.

리버싱의 예시

리버싱의 대표적인 예시로 게임의 비공식 사설 서버와 악성코드 분석이 있습니다.

보통 게임의 비공식 사설 서버(일명 프리서버)는 의도치 않거나 의도한(?) 유출이나 사용자의 리버싱을 통해 만들어지고 배포됩니다. 보통 사용자의 리버싱으로 만들어지는 편인데, 원래 게임의 네트워크 통신과 클라이언트 동작을 분석 및 파악하여 별도로 구현한 서버에 접속할 수 있도록 마개조를 합니다. 리버싱의 안 좋은 예시이고, 법적으로 금지된 행위이기 때문에 발각 시 처벌 받을 수 있습니다.

분석 방법

정적 분석

정적 분석(Static Analysis)은 프로그램을 실행하지 않고 파일을 직접 분석하는 방법입니다. 파일의 헤더, 문자열 등 다양한 정보를 확인하고 디스어셈블러(Disassembler)를 이용해 내부 코드와 구조를 분석하기도 합니다. 실행하지 않기 때문에 비교적 안전하게 분석할 수 있고 일명 숨겨진 코드라 불리는 데드 코드(Dead Code)를 발견할 수 있습니다. 다만, 난독화 또는 암호화가 되어 있는 경우 분석에 큰 어려움이 생긴다는 단점이 있습니다.

동적 분석

동적 분석(Dynamic Analysis)은 프로그램을 실행하여 런타임 동작을 관찰하여 파악하고 분석하는 방법입니다. 프로그램을 실행하기 때문에 정적 분석에 비해 동작을 비교적 쉽게 파악할 수 있습니다. 다만, 악성코드가 포함되어 있거나 특정 조건에서만 실행되는 경우 다소 안전하지 못하고 제한이 따른다는 단점이 있습니다.

리버싱의 디버깅은 조금 다르다

디버깅은 소프트웨어의 개발 과정에서 오류를 찾아내 수정하는데 이용한다는 개념적인 말이 있지만 리버싱에선 다소 의미가 다르다. 주된 목적은 소스 코드가 없는 상태에서 프로그램의 동작을 분석하고, 기계어나 바이너리 파일을 분석하여 프로그램의 내부 구조와 동작 방식을 파악하는 것이다.

패치와 크랙

패치

패치는 소프트웨어의 제공자나 타 사용자가 기능을 추가하거나 개선하는 것을 말합니다. 대표적으로 버그 개선, 보안 강화 등이 있습니다. Windows OS의 보안 업데이트가 대표적인 예시라 할 수 있습니다.

크랙

크랙은 소프트웨어의 보안(보호) 동작을 우회하거나 이것을 깨뜨려버리는 것을 말합니다. 대표적으로 정품 인증 우회, 시리얼 생성기(키젠), 게임 복제판(복돌) 등이 있습니다.