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

PROFILE IMAGE
어노잉
· 0 ·

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


책 내용과 일부 다를 수 있고, 이해를 돕기 위한 저만의 예시도 일부 포함되어 있습니다.


본 게시글에서 사용되는 소스코드와 파일은 리버싱 핵심원리에서 제공하는 파일을 사용하며, 사용하는 도구는 다를 수 있습니다.

리버스 엔지니어링

리버스 엔지니어링(Reverse Engineering)은 '역공학'이라고 번역하며, 보통 기계장치나 시스템의 구조와 기능, 동작을 분석하여 그 원리를 파헤쳐 새로운 기능을 추가하거나 개선하는 것을 말합니다.

책에선 리버스 코드 엔지니어링(Reverse Code Engineering)을 언급하고 있지만 대부분 리버싱 또는 리버스 엔지니어링으로 부르기 때문에 본 게시글부터 리버싱으로 줄여서 부르겠습니다.

 

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

 

보통 게임의 비공식 사설 서버(프리서버)는 유출이나 리버싱을 통해 만들어지고 배포됩니다. 대부분 리버싱을 통해 만들어지는데, 원래 게임의 네트워크 통신과 클라이언트의 동작을 분석 및 파악하여 별도로 구현한 서버에 접속할 수 있도록 마개조합니다. 리버싱의 안 좋은 방향의 대표적인 예이고, 법적인 처벌을 받을 수 있습니다.

 

리버싱의 좋은 방향은 악성코드 분석입니다. 컴퓨터 바이러스의 동작 원리를 분석 및 파악하여 치료(제거)할 수 있는 프로그램을 만들어 낼 수 있습니다.

분석 방법

정적 분석

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

동적 분석

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

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

패치와 크랙

패치

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

크랙

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

PROFILE IMAGE
K's Garage 어노잉

주제 가리지 않고 잡다하게 다 하는 블로그

D-DAY
블로그 운영일 블로그를 운영한 기간이예요!
🌅 새해 2025년 새해까지 남은 기간이예요!
보관함
달력
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31