본문 바로가기

모의해킹/리버싱

exe파일 언패킹/추출, 디컴파일

 

exe파일을 어떻게 .py파일로 추출할까?

  • 언패킹 / 추출 (unpack / extract): PyInstaller으로 묶인 exe에서 내부 리소스(embedded .pyc)를 꺼내는 단계.
  • 디컴파일 / 역컴파일 (decompile / reverse-compile): .pyc(Python 바이트코드)를 사람이 읽을 수 있는 .py 소스 형태로 복원하는 작업.

이 두 작업이 필요하다.

 

POC:

1. 일단 먼저 DIE를  사용하여 exe파일을 분석한다.

PE파일 분석

2. 일단 언어는 Python, 패커가 PyInstaller니까 pyinstxtractor.py를 사용하여 일단 언패커를 진행한다.

3. 언패커는 exe파일과  pyinstxtractor.py 파일을 같은 폴더에 넣고 진행하면된다.

python pyinstxtractor.py target.exe

 

4. 이제 디컴파일을 해야한다. 디컴파일 이란? 추출된 .pyc 파일을 디컴파일해서 .py로 복원하는 과정을 말한다.

5. GitHub에서 pycdc를 받는다. (https://github.com/zrax/pycdc) 릴리즈가 있으면 받는게 편하다.

6. CMake도 다운받는다.(https://cmake.org/download/) CMake란? "플랫폼·빌드도구 독립적인 빌드 시스템 생성기"로 스크립트나 코드들을 도구로 만들어주는 역할을 한다.

7. 이제 CMake로 pycdc를 exe형태로 만들어준다.

8. pycdc.exe가 생성되었으면 .pyc파일들을 .py로 디컴파일을 하면된다.

9. 사용했던 코드는 다음과 같다. (Power Shell)

# 해당 <프로젝트이름>.exe 있는 폴더에서 실행
cd C:\Users\Jun\Desktop\<경로>

# pyinstxtractor.py로 <프로젝트이름>.exe 추출
python pyinstxtractor.py <프로젝트이름>.exe

# 디렉터리 생성
New-Item -ItemType Directory -Force -Path "C:\Users\Jun\Desktop\<프로젝트이름>" | Out-Null

$pycdc = "C:\Users\Jun\Desktop\Release\pycdc.exe"
$src   = "C:\Users\Jun\Desktop\<프로젝트이름>”
$out   = "C:\Users\Jun\Desktop\<프로젝트이름>”

Get-ChildItem -Path $src -Recurse -Filter *.pyc | ForEach-Object {
	$dst = Join-Path $out ($_.BaseName + ".py")
	& $pycdc $_.FullName | Out-File -Encoding ascii $dst
	Write-Host "→" $_.Name "=> $dst”
}

10. 작업 끝나면 C:\Users\Jun\Desktop\<프로젝트이름> 폴더 안에 .py 파일들이 생긴다. (모두동일)

11. 이제 .py들로 분석을 시작하면된다.

 

 

 

'모의해킹 > 리버싱' 카테고리의 다른 글

Ghidra(기드라)로 수동 정적분석  (0) 2025.09.25
리버싱 문자열 실습문제  (2) 2024.07.30
리버싱 문자열  (1) 2024.07.30
기본 레지스터 기초공부, 디버거 사용법  (1) 2024.07.29