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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
dotNIET — IDA Pro 플러그인으로, .NET Native 바이너리에서 런타임에 확인된 심볼을 가져오고 SharedLibrary.dll과 해당 PDB를 파싱하여 누락된 임포트를 분석용으로 복원합니다. | Kitploit
도구/GitHubGitHub/synacktiv/dotniet
Static AnalysisReverse EngineeringBinary Analysis
GitHubsynacktiv/dotniet

dotNIET

IDA Pro 플러그인으로, .NET Native 바이너리에서 런타임에 확인된 심볼을 가져오고 SharedLibrary.dll과 해당 PDB를 파싱하여 누락된 임포트를 분석용으로 복원합니다.

저장소 보기
112115년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
vladimir    

.NIET

Alt text

.NIET는 IDA Pro 플러그인입니다. 그 목적은 .NET Native 컴파일 바이너리가 런타임에 해석하는 누락된 심볼(보통 수천 개)을 가져오는 것입니다. 이러한 심볼은 SharedLibrary.dll 안에 있지만 이 DLL에 의해 내보내지지 않습니다.

.NIET는 IDA Pro 7.5와 python 3.8을 사용하여 다음 플랫폼에서 테스트되었습니다:

  • Windows
  • Linux

이 플러그인은 현재 다음 .NET Native 프레임워크 버전을 지원합니다:

  • 1.3
  • 1.6
  • 1.7
  • 2.2

다른 버전을 발견하면 이슈를 생성해 주세요.

설치

이 요소들을 IDA Pro 플러그인 디렉터리에 복사하세요:

root@kitploit:~
dotNIET_plugin.py
dotNIET\

의존성

.NIET는 리소스 디렉터리를 구문 분석하기 위해 pefile에 의존합니다.

pefile은 다음과 같이 설치할 수 있습니다:

root@kitploit:~
pip install pefile

요구 사항

심볼이 SharedLibrary.dll에서 가져와지기 때문에, 이 DLL은 해당 pdb와 함께 .NIET에 제공되어야 합니다. (플러그인은 _NT_SYMBOL_PATH 안에서 해당 위치를 검색합니다.)

.NET Native 프레임워크 버전을 식별하고 구성된 심볼 경로 내에 SharedLibrary.dll pdb가 존재하는지 확인하는 헬퍼가 구현되어 있습니다.

사용법

Alt text

.NIET는 단축키 Alt-Shift-N 또는 Edit/Plugins 메뉴를 통해 실행할 수 있습니다.

실행하면 플러그인은 현재 바이너리의 .NET Native 프레임워크 버전을 식별하려고 시도합니다. 올바른 버전에서 SharedLibrary.dll을 선택한 다음 Run을 클릭하기만 하면 됩니다.

.NIET는 대상 DLL의 .NET Native 프레임워크 버전을 식별하고 버전이 같지 않으면 메시지를 표시합니다. 일반적으로 주 버전(Major)과 부 버전(Minor) 번호만 중요합니다.

작동 방식

.NIET는 .rdata 섹션 안에서 .NET Native 사용자 지정 가져오기 설명자 테이블을 찾습니다. 이를 위해 Custom Header 구조의 특정 오프셋을 읽은 다음 서수 배열(ordinals array)을 구문 분석합니다.

이 서수 배열은 SharedLibrary.dll의 사용자 지정 테이블 항목 내 다양한 위치를 가리킵니다.

심볼 해석은 SharedLibrary.dll pdb를 구문 분석하기 위해 IDA Pro 헤드리스 인스턴스를 해당 바이너리 idat를 통해 실행하여 수행됩니다.

가져온 심볼 명명 규칙

심볼은 가능하면 있는 그대로 가져오지만 몇 가지 예외적인 경우가 발생할 수 있습니다:

  • 때때로 가져온 주소는 오프셋에 대한 jmpstubs 심볼이거나 심볼에 대한 단일 jmp 명령입니다. 이 경우 심볼 이름은 .NIET에 의해 대상 함수 이름 앞에 jmp_를 붙인 이름으로 대체됩니다.

  • .NET Native 런타임이 해석한 일부 주소는 여러 역참조(dereference) 후의 심볼을 가리킵니다. .NIET가 가져온 주소에서 심볼을 찾을 수 없으면 심볼을 찾을 때까지 역참조를 시도합니다. 심볼을 찾으면 deref_X가 해당 심볼 이름에 추가되며, 여기서 X는 역참조 횟수입니다.

  • 일부 주소는 EETableSection 테이블 내의 오프셋을 가리킵니다. .NET Native를 처음 접하는 저로서는 이것이 무엇인지 (아직?) 모르기 때문에 이러한 주소는 EETableSection_XXX로 표시되며, XXX는 SharedLibrary.dll 내 EETableSection으로부터의 오프셋입니다.

알려진 제한 사항

  • macOS IDA Pro 버전에서는 (아직) 작동하지 않습니다
  • .NIET는 상당히 큰 바이너리의 pdb를 구문 분석해야 하므로 꽤 느립니다
  • "restore .idata" 옵션("실행 취소" 옵션의 일종)은 가져온 심볼을 해제만 합니다. IDA는 가져오는 동안 이름을 자동으로 전파하기 때문에, 가져온 심볼의 모든 흔적을 제거하려면 자동 분석을 다시 실행해야 할 가능성이 높습니다. 해결 방법으로는 플러그인을 실행하기 전에 데이터베이스 스냅샷을 만드는 것이 있습니다.
  • .NIET는 SharedLibrary.dll 모듈에서만 심볼을 구문 분석하지만, 심볼 해석을 담당하는 원래 루틴은 다른 모듈도 구문 분석할 가능성을 제공할 것으로 보입니다(SharedLibrary.dll 모듈 외에 실제로 발생하는지 여부는 모릅니다).

문제 해결

idat 로그 파일은 %tmpdir%/dotNIETlogs.txt로 정의됩니다.

이런 이름을 사용하는 이유

왜냐하면 .NET Native를 리버싱하는 것은 악몽이기 때문입니다.

도구 다운로드