Skip to content

oxqnd/ZeroDis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ZeroDis: Zero Dependency Disassembler

ZeroDisλŠ” μ™ΈλΆ€ 라이브러리 μ˜μ‘΄μ„± 없이 κ΅¬ν˜„λœ μˆœμˆ˜ν•œ x86/64 λ””μŠ€μ–΄μ…ˆλΈ”λŸ¬μž…λ‹ˆλ‹€. μ‹€ν–‰ 파일의 μ½”λ“œ μ„Ήμ…˜μ„ μΆ”μΆœν•˜μ—¬ μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œλ‘œ λ³€ν™˜ν•˜κ³ , ν•¨μˆ˜ 호좜과 λΆ„κΈ°λ₯Ό λΆ„μ„ν•˜μ—¬ 라벨을 μƒμ„±ν•©λ‹ˆλ‹€. 이 λ„κ΅¬λŠ” λ¦¬λ²„μŠ€ μ—”μ§€λ‹ˆμ–΄λ§, λ³΄μ•ˆ 뢄석, ν”„λ‘œκ·Έλž¨ 뢄석 등에 μœ μš©ν•˜κ²Œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ ꡬ쑰

ZeroDis/
β”œβ”€β”€ ZeroDis/
β”‚   β”œβ”€β”€ main.cpp              # ν”„λ‘œκ·Έλž¨ μ§„μž…μ  및 CLI μΈν„°νŽ˜μ΄μŠ€
β”‚   β”œβ”€β”€ disassembler.h        # λ””μŠ€μ–΄μ…ˆλΈ”λŸ¬ 헀더
β”‚   β”œβ”€β”€ disassembler.cpp      # λ””μŠ€μ–΄μ…ˆλΈ”λŸ¬ κ΅¬ν˜„
β”‚   β”œβ”€β”€ instruction.h         # λͺ…λ Ήμ–΄ ꡬ쑰체 μ •μ˜
β”‚   β”œβ”€β”€ instruction.cpp       # λͺ…λ Ήμ–΄ 처리 κ΅¬ν˜„
β”‚   β”œβ”€β”€ pe_loader.h           # PE 파일 λ‘œλ” 헀더
β”‚   β”œβ”€β”€ pe_loader.cpp         # PE 파일 λ‘œλ” κ΅¬ν˜„
β”‚   └── x64/                  # λΉŒλ“œ 좜λ ₯ 디렉토리
β”œβ”€β”€ x64/                      # μ†”λ£¨μ…˜ λΉŒλ“œ 좜λ ₯ 디렉토리
└── ZeroDis.sln               # Visual Studio μ†”λ£¨μ…˜ 파일

μ£Όμš” κΈ°λŠ₯

  • PE 파일의 .text μ„Ήμ…˜ μΆ”μΆœ 및 뢄석

    • DOS 헀더, PE 헀더, μ„Ήμ…˜ 헀더 뢄석
    • μ½”λ“œ μ„Ήμ…˜ λ©”λͺ¨λ¦¬ λ§€ν•‘
    • 가상 μ£Όμ†Œ 계산
  • x86/64 μ–΄μ…ˆλΈ”λ¦¬ λͺ…λ Ήμ–΄ λ””μŠ€μ–΄μ…ˆλΈ”λ§

    • κΈ°λ³Έ μ‚°μˆ /논리 μ—°μ‚° (add, sub, mov, and, or, xor λ“±)
    • λΆ„κΈ° λͺ…λ Ήμ–΄ (jmp, jcc)
    • ν•¨μˆ˜ 호좜 (call, ret)
    • μŠ€νƒ μ‘°μž‘ (push, pop)
    • λ©”λͺ¨λ¦¬ μ ‘κ·Ό (lea)
    • REX ν”„λ¦¬ν”½μŠ€ 지원
    • ModR/M, SIB λ°”μ΄νŠΈ λ””μ½”λ”©
  • ν•¨μˆ˜ 호좜 및 λΆ„κΈ° 좔적을 ν†΅ν•œ 라벨 생성

    • 직접 호좜 뢄석
    • 쑰건뢀 λΆ„κΈ° 뢄석
    • ν•¨μˆ˜ μ‹œμž‘μ  식별
    • μžλ™ 라벨 생성
  • λ‹€μ–‘ν•œ 좜λ ₯ ν˜•μ‹ 지원

    • 일반 ν…μŠ€νŠΈ (κΈ°λ³Έ)
      • μ£Όμ†Œ, λ°”μ΄νŠΈ μ½”λ“œ, λͺ…λ Ήμ–΄, ν”Όμ—°μ‚°μž μ •λ ¬
      • 라벨 ν‘œμ‹œ
      • 주석 지원
    • JSON ν˜•μ‹
      • κ΅¬μ‘°ν™”λœ 데이터 좜λ ₯
      • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ 톡합 용이
    • CSV ν˜•μ‹
      • μŠ€ν”„λ ˆλ“œμ‹œνŠΈ 뢄석 용이
      • 데이터 처리 및 필터링 용이

μ‚¬μš© 방법

ZeroDis <μ‹€ν–‰νŒŒμΌ.exe> [μ˜΅μ…˜]

μ˜΅μ…˜

  • --nobytes: λͺ…λ Ήμ–΄μ˜ λ°”μ΄νŠΈ μ½”λ“œ 좜λ ₯을 μƒλž΅ν•©λ‹ˆλ‹€.
  • --nolabel: μƒμ„±λœ 라벨 좜λ ₯을 μƒλž΅ν•©λ‹ˆλ‹€.
  • --json: κ²°κ³Όλ₯Ό JSON ν˜•μ‹μœΌλ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.
  • --csv: κ²°κ³Όλ₯Ό CSV ν˜•μ‹μœΌλ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.
  • --out filename: 좜λ ₯ λ‚΄μš©μ„ μ§€μ •λœ 파일둜 μ €μž₯ν•©λ‹ˆλ‹€.
  • --help: 도움말을 ν‘œμ‹œν•©λ‹ˆλ‹€.

좜λ ₯ μ˜ˆμ‹œ

일반 ν…μŠ€νŠΈ ν˜•μ‹

00000000: 48 89 5C 24 08    mov [rsp+8], rbx
00000005: 48 89 6C 24 10    mov [rsp+10], rbp
0000000A: 48 89 74 24 18    mov [rsp+18], rsi
0000000F: 57               push rdi
00000010: 48 83 EC 20       sub rsp, 20

CSV ν˜•μ‹

Label AddressHex AddressDec ByteCount BytesRaw Mnemonic Operands
L1 00000000 0 5 48895C2408 mov [rsp+8], rbx
00000005 5 5 48896C2410 mov [rsp+10], rbp
0000000A 10 5 4889742418 mov [rsp+18], rsi
0000000F 15 1 57 push rdi
L2 00000010 16 4 4883EC20 sub rsp, 20

μš”κ΅¬μ‚¬ν•­

  • Visual Studio 2019 이상
  • Windows SDK
  • C++17 지원 컴파일러
  • Windows 운영체제

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages