
.NET 어셈블리에서 P/Invoke, Dynamic P/Invoke 및 D/Invoke를 자동으로 탐지하기 위한 PowerShell 모듈입니다. 관리되지 않는 API 호출, MDTokens 및 내보내기 위치를 DnSpy 북마크에 표시하여 맬웨어 분석을 지원합니다.
Get-PDInvokeImports는 어셈블리에서 P/Invoke, Dynamic P/Invoke 및 D/Invoke 사용을 자동으로 감지할 수 있는 도구(PowerShell 모듈)입니다. 참조된 모든 위치를 표시하고 DnSpy_Bookmarks.xml로 내보냅니다.
이 PS 모듈은 .NET 어셈블리 리버싱 중에 어셈블리에서 사용되는 관리되지 않는 API 함수 호출을 빠르게 식별하는 데 유용하고 도움이 될 수 있습니다. 때때로 악성 코드 어셈블리는 정크 코드로 가득 차 있으며 주요 기능은 직접적인 WIN API 또는 NTAPI 호출로 구현됩니다.
Get-PDInvokeImports를 사용하면 어셈블리에서 사용되는 P/Invoke, Dynamic P/Invoke 및 D/Invoke를 빠르게 개괄할 수 있습니다. 어떤 함수가 사용되는지 + MDTokens, 선언된 위치, 코드에서 사용된 모든 위치를 보여줍니다.
코드에서 참조된 P/Invoke, Dynamic P/Invoke 및 D/Invoke가 감지된 모든 위치를 DnSpy Bookmarks.xml로 내보낼 수 있습니다.
예: 정크 코드 + CF 난독화로 가득 차 있고 주요 기능이 관리되지 않는 WinAPI\NTAPI 호출을 통해 이루어지는 1MB 어셈블리를 상상해 보세요.
이 PS 모듈은 PowerShell로 작성되었으며 Windows PowerShell(.NET Framework) 및 PowerShell Core(.NET, .NET Core 기반)와 완전히 호환됩니다. dnlib을 사용하여 어셈블리를 구문 분석하고 .NET 리플렉션을 사용하여 dnlib을 로드합니다. Dnlib은 .NET framework 및 .NET standard에서 사용할 수 있습니다. 즉, Windows 및 Linux OS에서 dnlib에 종속된 이 PS 모듈을 사용할 수 있습니다.
간단히 말하면, 이들은 관리 코드에서 관리되지 않는 코드를 호출할 수 있는 구현 방법입니다(단순화하면 .NET에서 직접 WinAPI/NTAPI를 호출하는 데 사용할 수 있음).
일부는 구현하기 더 쉽고, 일부는 AV 탐지 및 후킹을 더 잘 회피합니다.
추가 정보:
P/Invoke -
[PInvoke]
D/Invoke - [DInvoke]
Dynamic P/Invoke - [Dynamic PInvoke]
[Releases]에는 지정된 플랫폼용으로 이미 컴파일된 dnlib와 Get-PDInvokeImports.ps1 스크립트가 포함되어 있습니다.
Windows – [릴리스] 다운로드 (Windows PowerShell 또는 PowerShell Core에서 사용)
Linux – [릴리스] 다운로드 (PowerShell Core에서 사용)
필요한 경우 - 직접 dnlib 컴파일 (Windows – .NET Framework, Linux-netstandard)
필수 매개변수입니다.
스캔할 어셈블리 경로를 지정합니다.
선택적 매개변수입니다.
dnlib.dll의 시스템 경로입니다.
PowerShell이 dnlib.dll의 위치에서 실행 중인 경우 이 매개변수를 무시할 수 있으며, 그렇지 않으면 이 매개변수를 지정하십시오.
선택적 매개변수입니다.
코드에서 참조된 모든 감지된 P/Invoke, Dynamic P/Invoke 및 D/Invoke 위치를 DnSpy Bookmarks XML 파일(DnSpy_Bookmarks.xml)로 내보내는 데 사용됩니다.
DnSpy-Analyze-UsedBy와 유사합니다(전체 코드에서 모든 PInvoke 및 DInvoke가 사용되는 위치의 좋은 개요).
따라서 북마크 창을 통해 DnSpy로 가져올 수 있습니다(DnSpy -> 보기 -> 북마크 -> 북마크 창 -> 파일에서 북마크 가져오기 -> DnSpy_Bookmarks.xml 선택).
PS> Import-Module .\Get-PDInvokeImports.ps1
PS> Get-PDInvokeImports -PathToAssembly 'C:\testfiles\malware.exe'
PS> Get-PDInvokeImports -PathToAssembly .\malware.exe –ExportDnSpyBookmarks
PS> Get-PDInvokeImports -PathToAssembly 'C:\testfiles\malware.exe' -PathToDnlib "C:\dnlib.dll" –ExportDnSpyBookmarks




탐지는 일반적인 난독화를 무력화할 수 있을 만큼 강력해야 합니다..
SmartAssembly, ConfuserEx 등과 같은 가장 일반적인 난독화 도구로 테스트되었습니다.
탐지 내부: P/Invoke는 항상 존재해야 하는 PinvokeImpl 특성을 통해 감지됩니다.
D/Invoke는 "UnmanagedFunctionPointerAttribute" 특성과 "CallingConvention"을 통해 감지됩니다 (이것은 특정 상황에서 무력화될 수 있지만 – RedTeam의 상상에 맡깁니다 (어쨌든 이길 것입니다)).
Dynamic P/Invoke 탐지는 DefinePInvokeMethod()를 참조하는 methodX와 methodX를 참조하는 모든 methodY를 찾는 것을 기반으로 합니다.
[dnlib] (.NET 메타데이터 리더/라이터, 난독화된 어셈블리도 읽을 수 있음)
[DnSpyEx - 선택 사항]