리버스엔지니어링
이번에 소개할 것은 리버스 엔지니어링입니다. 리버스 엔지니어링이란 무언일까? 처음 들어보시는 분들도 많은 수 있습니다. 역공학이라고도 불리는 리버스 엔지니어링은 코드 분석을 수행할 수 있습니다.
일반적인 의미에서 리버스 엔지니어링(Reverse Engineering, RE; 역공학)이라고 하면 물건이나 기계장치 혹은 시스템 등의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하고 새로운 아이디어를 추가하는 일련의 작업입니다.
리버스 코드 엔지니어링
리버스 코드 엔지니어링(Reverse Code Engineering)은 소프트웨어 분야의 리버스 엔지니어링이라고 생각하면 됩니다. 아직 정확한 용어의 통일이 되지 않아서 여러 가지 용어들이 같이 사용되고 있기 때문에 리버싱, 역공학, RE 등의 용어를 섞어 쓰고 있습니다.
리버싱(분석) 방법
실행 파일의 분석 방법에는 크게 두 가지 방법이 있습니다. 정적 분석과 동적 분석입니다.
정적분석
정적분석이란 파일의 겉모습의 분석하는 방법입니다. 정적 분석 단계에서는 파일을 실행하지 않고 그 파일의 종류라든지 크기, 헤더정보, 내부 문자열, 실행압축여부, 디지털 인증서 등 다양한 정보를 확인 하는 것입니다. 또한 디스어셈블러를 이용한 내부 코드와 구조를 확인하는 것도 정적 분석의 범주에 들어갈 수 있습니다. 정적분석을 하고 정보가 부족하거나 확실하지 않다면 동적분석을 시행합니다.
동적분석
동적분석이란 파일을 직접 실행시켜서 어떤 행위를 하는지 분석하고, 디버깅을 통하여 코드의 흐름과 메모리 상태 등을 확인 하는 것입니다. 파일, 레지스트리, 네트워크 등을 자세히 보면서 프로그램의 행위를 분석합니다. 또한 디버깅을 도와줄 디버거를 이용하여 프로그램 내부 구조와 동작 원리를 분석할 수 있습니다.
디버깅
원래 디버깅의 뜻은 오류를 수정하는 과정입니다. 컴퓨터 프로그램의 잘못을 찾아내고 고치는 작업을 말하는데 이러한 오류를 수정하는 과정에서 프로그램이 어떻게 돌아가는 지를 확인 할 수 있습니다.
일단 작성된 프로그램들이 정확한가(즉 잘못 작성된 부분이 없는가)를 조사하는 과정. 이 작업은
주어진 문제대로 프로그램이 작성되었는가를 순서도와 메모리의 작업 영역표에 실제 데이터를 넣어서 수동 작업으로 정확한 결과가 나오는가를 확인합니다.
또한 이 작업은 프로그램의 한 스텝 한 스텝씩을 추적해가는 추적(trace) 기능을 이용해도 좋지만, 프로그램 처리 내용이나 기억 장치의 내용을 덤프(복사)하여 디버그 보조기를 이용하는 것이 좋습니다.
컴퓨터 분야에서 디버깅이란 컴퓨터 프로그램이나 하드웨어 장치에서 잘못된 부분, 즉 버그를 찾아서 수정하거나 또는 에러를 피해나가는 처리과정입니다. 프로그램이나 하드웨어 장치의 결함을 제거하기 위해서는 문제가 되는 부분을 분리시킨 후 수정해야 합니다.
프로그램이 디버깅되었다거나 프로그램의 결함을 해결하였다는 것은 더 이상의 잘못된 부분이 없다는 것을 의미합니다. 컴퓨터 쪽을 배우시는 분은 디버깅이라는 단어에 아주 익숙하실 것 같습니다. 프로그램의 결함을 수정할 수 있으며, 따라서 디버깅을 하여 악성코드와 같은 프로그램을 분석할 수도 있습니다.
디버거
에러를 포함하고 있는 프로그램에 관하여 그 에러의 원인을 색출하기 위하여 보조적으로 이용되는 프로그램입니다. 프로그램을 추적하거나 특정 변수 간의 관계식을 프로그램의 구절마다 조사하여 가급적 빠른 시점에 프로그램의 이상 동작을 검출하는 데 사용됩니다. 사용을 잘하려면 숙련된 전문가가 되어야 합니다. 올리디버거라는 무료 프로그램이 있습니다.
직역하면 오류 수정기이지만 한글로 말하면 어딘가 어색한 것 같습니다. 그냥 디버거라고 부릅시다. 프로그램의 오류를 찾아내기 위한 소프트웨어를 말합니다. 대상으로 하는 프로그램을 명령마다 분할해서 실행시키고, 그때의 레지스터 값이나 프로그램 계수기, 플래그 등 중앙 처리 장치의 내부 상황을 나타냅니다. 쉽게 말하면 프로그램을 실행하면 컴퓨터 내부의 상황이 어떻게 돌아가고 있는지를 알 수 있다고 생각하면 됩니다. 트레이서라고도 합니다.
'IT' 카테고리의 다른 글
안드로이드 8.0 오레오(Oreo) (0) | 2017.08.22 |
---|---|
라즈베리파이 VNC 설정 (내부망, 외부망) (0) | 2017.08.20 |
인공지능과 딥러닝에 대해 (0) | 2017.08.16 |
정규표현식, Regular Expression의 기본 (0) | 2017.08.14 |
라즈베리파이 SSH 접속 설정 (0) | 2017.08.13 |
댓글