1. exe 내의 소스 코드를 본다?
실행 파일(.exe)은 이미 컴파일되어 기계어로 변환된 상태이기 때문에, 작성자가 처음에 쓴 원본 소스 코드(C++, Rust, Go 등)를 100% 그대로 완벽하게 복구하는 것은 불가능에 가깝다.
하지만 역공학(Reverse Engineering) 도구를 사용하여 코드를 분석하거나 비슷한 수준의 소스 코드로 복원할 수는 있다. 프로그램이 어떤 언어/프레임워크로 제작되었느냐에 따라 방법이 달라진다.
1. 프로그램 종류 파악 (블로그 -1- 글 참조)
먼저 해당 .exe 파일이 무엇으로 만들어졌는지 확인.
- 도구: Detect It Easy (DIE) 또는 Exeinfo PE
- 이 도구들을 사용하면 해당 파일이 .NET(C#), C++, Python, Delphi 등 무엇으로 만들어졌는지 알려준다.
2. 언어별 소스 코드 보기 (디컴파일)
① C#, VB.NET (가장 복구율이 높음)
이 언어들은 중간 언어(MSIL)를 사용하기 때문에 거의 원본에 가까운 소스 코드를 얻을 수 있다.
- 도구: dnSpy, ILSpy
- 방법: 프로그램을 실행하고 .exe 파일을 끌어다 놓으면 클래스, 함수, 변수명까지 상세히 볼 수 있다.
② Java (JAR을 EXE로 만든 경우)
- 도구: jd-gui, jadx
- 방법: Java 코드로 복원해 주며 가독성이 매우 좋다.
③ Python (PyInstaller 등으로 만든 경우)
- 도구: pyinstxtractor, uncompyle6 또는 decompyle3
- 방법: .exe에서 파이썬 바이트코드(.pyc)를 추출한 뒤, 이를 다시 .py 소스 파일로 변환한다.
④ Native 언어 (C, C++, Rust, Go, Delphi 등)
가장 어려운 경우. 코드가 완전히 기계어로 번역되어 소스 코드가 존재하지 않고, 어셈블리어로 변환된다.
- 디컴파일러(그나마 소스 형태로 보여줌):
- Ghidra: NSA(미국 국가안보국)에서 만든 무료 오픈소스 도구. C 언어 형태로 코드를 재구성해주는 강력한 'Decompiler' 기능을 갖추고 있다.
- IDA Pro: 업계 표준이지만 고가다. (무료 버전인 IDA Free도 존재)
- 디버거(실행 과정을 분석): x64dbg, OllyDbg
3. 웹 기반 기술 (Electron, NW.js 등)
최근 Discord나 Slack처럼 웹 기술로 만든 프로그램은 소스 코드가 내부에 묶여 있다.
- 도구: asar (Node.js 패키지 관리 도구)
- 방법: app.asar 같은 파일의 압축을 풀면 JavaScript, HTML, CSS 소스 코드를 직접 볼 수 있다.
주의사항 (중요)
- 난독화(Obfuscation): 개발자가 코드를 읽기 어렵게 꼬아 놓았다면(난독화 처리), 소스를 봐도 a, b, c 같은 의미 없는 변수명만 가득하여 로직 파악이 매우 힘들 수 있다.
- 저작권 및 법적 문제: 다른 사람의 프로그램을 역공학하여 소스 코드를 탈취하거나 수정하는 행위는 저작권법 위반 및 영업비밀 침해 등으로 법적 처벌을 받을 수 있다. 오직 교육용이나 보안 점검 목적으로만 본인의 환경에서 사용하시길 바란다.
- 보안: 신뢰할 수 없는 .exe를 분석할 때는 악성코드 감염 위험이 있으므로, 가상 머신(VMWare, VirtualBox) 환경에서 작업하는 것을 권장한다.
2. qwer.exe파일 이라면?
*qwer.exe는 학습을 위해 설정한 가상의 프로그램.
이 파일은 Rust(러스트) 언어로 작성되었으며 64비트 Windows용 Native EXE 파일.
특히 가장 고무적인 부분은 하단의 Embedded PDB (release) 문구. 보통 릴리즈용 프로그램은 보안을 위해 디버그 정보를 삭제(Strip)하지만, 이 파일은 함수 이름 등 분석에 결정적인 정보가 포함되어 있을 가능성이 크다고 봄.
이런 기술 스택의 파일을 분석(소스 코드 가시화)하는 방법은 다음과 같다.
1. 현실적인 목표
Rust는 C/C++와 마찬가지로 '네이티브 언어'. 따라서 작성자가 쓴 .rs 소스 코드를 그대로(1:1) 완벽하게 복구하는 도구는 존재하지 않는다. 대신 기계어를 사람이 읽기 쉬운 C언어 형태(의사 코드)나 어셈블리어로 바꿔서 로직을 파악해야 한다.
2. 추천 도구 및 방법
① Ghidra (가장 추천 - 무료)
미국 NSA에서 개발한 오픈소스 리버스 엔지니어링 도구.
- 장점: 강력한 Decompiler 기능이 있어 기계어를 C언어와 비슷한 코드로 변환해 줌.
- 분석 포인트:
- 이 파일은 PDB(디버그 데이터) 정보가 들어있으므로, Ghidra로 불러왔을 때 함수 이름(예: main, print_hello 등)이 깨지지 않고 보일 확률이 매우 높음.
- Rust는 이름 맹글링(Name Mangling)이 심한데, 최신 Ghidra는 이를 어느 정도 해석해 준다.
② Rust 전용 분석 도구 (보조)
- Ghidra-Rust: Ghidra에서 Rust 특유의 타입 시스템이나 라이브러리를 더 잘 인식하게 해주는 확장 스크립트들이 GitHub 등에 공개되어 있다.


3. 분석 시나리오
- Ghidra를 다운로드 한다. (해당 깃허브에서.)
- Ghidra 포터블 폴더를 압축 해제하고 실행(.bat) 한다. (기드라는 반드시 JDK(JAVA) 21 버전 이상이 설치되어 있어야 한다. 가령 CMD 창만 뜨고 실행이 안되면, JDK 21 이상 설치 여부를 확인할 것.)
- 프로젝트를 생성하고 해당 프로젝트에 분석할 qwer.exe파일을 Import 한다.
- 분석(Analysis) 옵션을 돌린다. (우측 하단의 파란색 게이지로 진행상황을 퍼센티지로 알려준다. 오래 걸릴 수도 있다. 가령, 수 시간이 소요될 수도 있다.)
- Symbol Tree에서 src나 main 등의 키워드를 검색한다.
- 1편의 DIE 결과에서 Embedded PDB라고 되어 있으므로, 원본 소스 파일의 경로(예: C:\Users\Documents\project\src\main.rs)나 함수들이 이름 그대로 나타날 가능성이 매우 크다.
- 오른쪽 Decompiler 창에서 복구된 로직을 분석한다.
4. 난관 (주의사항)
- 컴축(Generic Packer): DIE 결과 중간에 Packer: Generic... compressed라는 내용이 있었다. 만약 이 프로그램이 실행 시 압축을 푸는 방식(Packer)이 적용되어 있다면, 곧바로 디컴파일이 안 될 수 있다. 이 경우 실행시킨 뒤 메모리에서 덤프를 뜨거나 언패킹 과정을 먼저 거쳐야 한다. (하지만 Detect It Easy의 휴리스틱 진단이라 실제로는 압축이 아닐 수도 있다.)
- Rust 표준 라이브러리: Rust는 아주 간단한 프로그램도 표준 라이브러리가 크게 들어간다. 처음에 함수가 수만 개 보여서 당황할 수 있는데, 제작자가 직접 만든 로직은 전체 중 아주 작은 일부분이므로 '사용자 정의 함수' 위주로 찾아야 한다.
결론:
이 파일은 PDB 데이터가 포함된 Rust 프로그램이므로, Ghidra를 사용하면 원래 소스 코드의 흐름(함수명, 주요 로직 등)을 상당히 구체적으로 파악할 수 있는 상태다.
이번 편은 기드라로 qwer.exe를 임포트하는 걸 알아봤다.
다음 편에선 이제 기드라가 분석한 qwer.exe의 소스 코드를 분석하는 것을 알아보자.
'기타 개발' 카테고리의 다른 글
| 실행파일(.exe) 소스 코드 추출 하기 -3- (0) | 2026.05.24 |
|---|---|
| 실행파일(.exe) 소스 코드 추출 하기 -1- (0) | 2026.05.21 |
| 휴이온 KAMVAS 22 plus '커서중첩' 근본 원인 및 '간편해결책' (5) | 2025.08.14 |
| (휴이온 타블렛) KAMVAS 22 plus 커서 이상 현상 (0) | 2025.03.05 |
| (네트워크) DNS_PROBE_FINISHED_NXDOMAIN 해결 방법 (0) | 2025.03.03 |