프로젝트에서 소스코드가 없는 기존의 exe 프로그램을 새로 만들어야 하는 상황이 생겼다.
기존 프로그램의 소스코드를 알기 위해 디컴파일이라는 개념에 대해 조사했다.
 
정의
컴파일과는 반대로, 컴파일된 실행 파일을 소스코드로 되돌리는 작업이다.
리버스 엔지니어링이라고도 불린다.
디컴파일을 이해하기 위해서는 컴파일 과정에 대한 이해가 필요하다.
 
C#(혹은 VB.NET)의 컴파일 과정

C#이나 JAVA는 소스코드를 바이트코드(중간언어)로 컴파일한 후, 이를 기계어로 변환한다.
C#에서는 바이트코드를 IL(Intermediate Langauge)라고 부르며, JAVA에서는 Class파일이라 부른다.
 
바이트코드의 역어셈블

아래와 같은 경로에 있는 VisualStudio의 부속 실행파일인 ildasm.exe을 사용하면 바이트코드를 역어셈블하여 사람이 알 수 있도록 보여준다.
 
디컴파일러를 사용한 바이트코드의 소스코드화
.NET Reflector, dotPeek, ILSpy 등 디컴파일러를 사용하면 소스코드를 디컴파일 하지 못하도록 난독화를 하지 않은 이상,
실행파일을 디컴파일하여 소스코드를 볼 수 있다.
 
반응형

+ Recent posts