Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
dncil — FLARE 팀의 CIL(Common Intermediate Language) 명령어를 디스어셈블하기 위한 오픈소스 라이브러리. | Kitploit
도구/GitHubGitHub/mandiant/dncil
Reverse EngineeringMalware AnalysisBinary Analysis
GitHubmandiant/dncil

dncil

FLARE 팀의 CIL(Common Intermediate Language) 명령어를 디스어셈블하기 위한 오픈소스 라이브러리.

저장소 보기
1782026일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

dncil

PyPI - Python Version Last release CI Downloads License

dncil은 Python으로 작성된 Common Intermediate Language(CIL) 디스어셈블리 라이브러리로, .NET 관리 메서드의 헤더, 명령어, 예외 처리기를 파싱하는 것을 지원합니다. 파싱된 데이터는 객체 지향 API로 제공되어 dncil을 사용해 CIL 분석 도구를 빠르게 개발할 수 있습니다.

왜 Python인가? dnLib과 같이 CIL 디스어셈블리를 지원하는 기존 라이브러리는 C#으로 작성되어 있습니다. 이러한 도구를 활용하려면 C# 애플리케이션을 만들어야 하며, 이는 C# 개발 경험이 필요함을 의미합니다. 순수 Python 대안인 dncil을 사용하면 다음이 가능합니다:

  1. 프로그래밍 방식으로 CIL을 분석하기 위해 C# 경험이 필요하지 않습니다.
  2. CIL 분석 도구를 빠르게 개발하고 테스트할 수 있습니다.
  3. CIL 분석 도구를 기존 Python 프로젝트에 쉽게 통합할 수 있습니다.

예제

예제 스크립트 print_cil_from_dn_file.py는 dncil을 .NET 분석 라이브러리 dnfile과 함께 사용하여 .NET 실행 파일에서 찾은 관리 메서드를 디스어셈블합니다. 어떤 기능을 하는지 살펴보겠습니다.

먼저, 다음 C# 소스 코드를 컴파일합니다:

root@kitploit:~
using System;	

public class HelloWorld
{
    public static void Main(string[] args)
    {
        Console.WriteLine ("Hello World!");
    }
}

컴파일 결과는 우리 코드를 어떻게 실행할지 Common Language Runtime(CLR)에 알려주는 .NET 메타데이터를 포함하는 PE 실행 파일이 됩니다. dnfile을 사용하여 이 메타데이터를 파싱하면 관리 메서드 Main의 오프셋을 얻을 수 있습니다. 그런 다음 dncil을 사용하여 이 위치에 저장된 CIL 명령어를 디스어셈블하고 표시합니다.

위 동작을 직접 확인해 보겠습니다:

root@kitploit:~
$ python scripts/print_cil_from_dn_file.py hello-world.exe 

Method: Main
0000    00                  nop            
0001    72 01 00 00 70      ldstr          "Hello World!"
0006    28 04 00 00 0a      call           System.Console::WriteLine
000B    00                  nop            
000C    2a                  ret            

우리의 메서드 Main은 CilMethodBody 클래스로 표현됩니다. 이 클래스는 주어진 관리 메서드의 헤더, CIL 명령어, 예외 처리기를 포함하는 데이터를 보유합니다. 또한 다양한 헬퍼 함수를 제공합니다:

root@kitploit:~
>  main_method_body.flags
SmallFormat  :  false
TinyFormat   :  false
FatFormat    :  false
TinyFormat1  :  true
MoreSects    :  false
InitLocals   :  false
CompressedIL :  false
>  main_method_body.size
14
>  hexdump.hexdump(main_method_body.get_bytes())
00000000: 36 00 72 01 00 00 70 28  04 00 00 0A 00 2A        6.r...p(.....*
>  hexdump.hexdump(main_method_body.get_header_bytes())
00000000: 36                                                6
>  hexdump.hexdump(main_method_body.get_instruction_bytes())
00000000: 00 72 01 00 00 70 28 04  00 00 0A 00 2A           .r...p(.....*

관리 메서드 Main에서 찾은 각각의 CIL 명령어는 Instruction 클래스로 표현됩니다. 이 클래스는 주어진 CIL 명령어의 오프셋, 니모닉(mnemonic), 오퍼코드(opcode), 오퍼랜드(operand)를 포함하는 데이터를 보유합니다. 또한 다양한 헬퍼 함수를 제공합니다:

root@kitploit:~
>  len(main_method_body.instructions)
5
>  insn = main_method_body.instructions[1]
>  insn.offset
1
>  insn.mnemonic
'ldstr'
>  insn.operand
token(0x70000001)
>  insn.is_ldstr()
True
>  insn.size
5
>  hexdump.hexdump(insn.get_bytes())
00000000: 72 01 00 00 70                                    r...p
>  hexdump.hexdump(insn.get_opcode_bytes())
00000000: 72                                                r
>  hexdump.hexdump(insn.get_operand_bytes())
00000000: 01 00 00 70                                       ...p

설치

dncil을 설치하려면 pip을 사용하여 dncil 모듈을 가져옵니다:

root@kitploit:~
$ pip install dncil

예제 스크립트를 실행하려면 dnfile을 설치해야 합니다. 또는 아래 개발 섹션에 설명된 대로 개발 의존성과 함께 dncil을 설치할 수도 있습니다.

.NET 관리 메서드를 포함하는 바이트 스트림에서 CIL 명령어를 출력하는 dncil 사용에 대한 간단한 예제는 print_cil_from_bytes.py를 참조하세요.

개발

dncil 소스 코드를 검토하고 수정하려면 GitHub에서 다운로드하여 로컬에 설치해야 합니다.

다음 명령을 사용하여 개발 의존성과 함께 dncil을 로컬에 설치합니다:

root@kitploit:~
$ pip install /local/path/to/src[dev]

아래에 설명된 대로 테스트와 린팅을 실행하려면 dncil의 개발 의존성이 필요합니다.

테스트

테스트를 실행하려면 다음 명령을 사용합니다:

root@kitploit:~
$ pytest /local/path/to/src/tests

린팅

형식 오류를 식별하려면 다음 명령을 사용합니다:

root@kitploit:~
$ black -l 120 -c /local/path/to/src
$ isort --profile black --length-sort --line-width 120 -c /local/path/to/src
$ mypy --config-file /local/path/to/src/.github/mypy/mypy.ini /local/path/to/src/dncil/ /local/path/to/src/scripts/ /local/path/to/src/tests/

크레딧

dncil은 dnLib에서 찾은 CIL 파싱 코드를 기반으로 합니다.

도구 다운로드