디컴파일
< 디컴파일의 개념 >
먼저, 디컴파일을 이해하기 위해서는 컴파일에 대해 알아야 한다. 컴파일이란, 개발자가 작성한 소스 코드(고급언어)를 컴퓨터가 이해할 수 있는 기계어(저급언어)로 변환하는 과정을 의미한다.
그렇다면 디컴파일은 무엇일까? 말 그대로 '디컴파일'은 컴파일의 반대 과정이다. 즉, 컴퓨터가 이해하는 기계어를 다시 사람이 이해할 수 있는 고급언어로 변환하는 과정을 말한다.
< 왜 디컴파일이 필요한가? >
그럼 왜 이런 과정이 필요한 것일까? 주로 다음의 경우에 디컴파일이 사용된다.
소스 코드를 잃어버린 경우: 원본 소스 코드가 없더라도 컴파일된 실행 파일로부터 소스 코드를 복구할 수 있다.
소프트웨어 리버스 엔지니어링: 기계어로 변환된 프로그램을 분석해 그 작동 원리를 파악하거나 보안 취약점을 찾는데 사용된다.
< 실습 >
실습에 앞서, EXE파일,DLL파일의 실 소유자의 동의가 필요하기에 라이센스의 디컴파일 금지조항을 반드시 확인해야 한다. 아니면 불법 복제 및 소스코드 무단 도용 시, 법적 소송이 발생할 수 있기에 반드시 동의를 구하고 디컴파일 해야한다.
해당 실습에서는 코드를 블러 처리 한다.
우선 새로운 프로젝트를 하나 만들도록 한다.
참조 추가를 해서, 원하는 exe,DLL파일을 추가한다.
찾아보기 탭에서 원하는 exe,dll파일을 가져온다음, 확인을 누른다.
이후, 도구 -> 옵션 -> 텍스트 편집기 -> 고급 탭에서 디 컴파일된 원본으로의 이동을 사용하도록 설정을 체크 해준다.
기존 Form1에서 해당 디컴파일된 코드이름을 불러와 정의로 이동을 한다. 예 : 디컴파일된 이름이 Hello이면
.하면 여러 클래스가 보일 것인데, 거기서 특정 불러오고 싶은 클래스를 가져온 다음, 정의로 이동을 하면 된다.
정의로 이동을 할 때, 아래와 같이 창이 뜬다면 동의를 받고 확인을 누르자.
그럼 참조 추가한 파일의 원본 코드가 보일 것이다. 다만 cs파일의 소스코드와 디자인파일의 소스코드가 혼합되어 있을 수 있기에 분리작업을 통하여 코드를 완성해내면 된다.
이후 실행을 하면, exe파일의 원본 실행을 알 수 있다.