
리버스 엔지니어링에 특화된 PowerShell 모듈
네이티브 및 관리 코드 디스어셈블.
Get-CSDisassemblyCapstone Engine 디스어셈블리 프레임워크를 사용하여 바이트 배열을 디스어셈블합니다.
Get-ILDisassemblyMethodInfo 개체에서 전달된 원시 MSIL 바이트 배열을 Ildasm과 유사한 방식으로 디스어셈블합니다.
악성코드 분석 시 유용한 도구.
New-FunctionDelegateX86 또는 X86_64 함수에 대한 실행 가능한 래퍼를 제공합니다.
Invoke-LoadLibrary현재 PowerShell 프로세스에 DLL을 로드합니다.
New-DllExportFunction관리되지 않는 내보내기 함수 주변에 실행 가능한 래퍼 델리게이트를 생성합니다.
Get-HostsFileHOSTS 파일을 파싱합니다.
New-HostsFileEntryHOSTS 파일에 항목을 바꾸거나 추가합니다.
Remove-HostsFileEntryHOSTS 파일에서 항목 또는 일련의 항목을 제거합니다.
Get-AssemblyStrings.NET 실행 파일에서 모든 문자열을 출력합니다.
Get-AssemblyResources.NET 어셈블리에서 관리되는 리소스를 추출합니다.
Remove-AssemblySuppressIldasmAttribute.NET 어셈블리에서 SuppressIldasmAttribute 특성을 제거합니다.
Get-AssemblyImplementedMethods어셈블리에서 MSIL로 구현된 모든 메서드를 반환합니다.
프로세스 메모리를 검사하고 분석합니다.
Get-ProcessStrings프로세스의 사용자 모드 메모리에서 인쇄 가능한 모든 문자열을 출력합니다.
Get-VirtualMemoryInfokernel32!VirtualQueryEx에 대한 래퍼입니다.
Get-ProcessMemoryInfo사용자 메모리의 모든 고유 페이지 집합에 대한 가상 메모리 정보를 검색합니다. 이 함수는 !vadump WinDbg 명령과 유사합니다.
Get-StructFromMemory임의 프로세스의 관리되지 않는 메모리 블록에서 지정된 유형의 새로 할당된 관리 객체로 데이터를 마샬링합니다.
파일 형식 및 메모리 내 구조를 파싱합니다.
Get-PE디스크 및 메모리 내 PE 파서 및 프로세스 덤퍼입니다.
Find-ProcessPEs적법한 방식으로 로드되었는지 여부에 관계없이 메모리에서 휴대용 실행 파일을 찾습니다.
Get-LibSymbolsWindows LIB 파일의 기호 정보를 표시합니다.
Get-ObjDumpWindows 개체(OBJ) 파일에 대한 정보를 표시합니다.
저수준 Windows OS 정보를 획득하고 분석합니다.
Get-NtSystemInformationntdll!NtQuerySystemInformation 함수를 호출하고 출력을 파싱하는 유틸리티입니다. 이 유틸리티는 일반적으로 사용자에게 표시되지 않는 내부 OS 정보를 쿼리하는 데 사용할 수 있습니다.
Get-PEB프로세스의 프로세스 환경 블록(PEB)을 반환합니다.
Register-ProcessModuleTrace로드된 프로세스 모듈의 추적을 시작합니다.
Get-ProcessModuleTraceRegister-ProcessModuleTrace 호출 이후 로드된 프로세스 모듈을 표시합니다.
Unregister-ProcessModuleTrace실행 중인 프로세스 모듈 추적을 중지합니다.
Get-SystemInfokernel32!GetSystemInfo에 대한 래퍼입니다.
기타 도우미 함수들.
Get-Member기본 제공 Get-Member cmdlet을 확장하는 프록시 함수입니다. '-Private' 매개변수를 추가하여 비공개 .NET 멤버를 표시할 수 있습니다.
Get-Strings유니코드와 ASCII 모두에서 파일의 문자열을 덤프합니다. 이 cmdlet은 Sysinternals의 strings.exe 기능을 복제합니다.
ConvertTo-String파일의 바이트를 원래 파일 바이트와 1:1 매핑되는 문자열로 변환합니다. ConvertTo-String은 바이너리 정규 표현식을 수행하는 데 유용합니다.
Get-Entropy파일 또는 바이트 배열의 엔트로피를 계산합니다.
일부 RE 함수에 필요한 라이브러리.
CapstoneCapstone 디스어셈블리 엔진 C# 바인딩.
De4dot강력한 .NET 난독 해제 및 .NET PE 파싱 라이브러리.
PSReflect메모리 내 enum, 구조체 및 Win32 함수를 쉽게 정의하는 데 사용되는 모듈.
Formatters다양한 PowerShellArsenal 함수의 출력 형식을 지정하는 데 사용되는 ps1xml 파일.
PowerShellArsenal 모듈 및 모든 개별 스크립트는 명시적으로 달리 명시되지 않는 한 BSD 3-Clause 라이선스를 따릅니다.
각 개별 스크립트의 주석 기반 도움말을 참조하여 자세한 사용법을 확인하세요.
모듈을 설치하려면 PowerShellArsenal 폴더 전체를 모듈 디렉터리 중 하나에 넣으세요. 기본 PowerShell 모듈 경로는 $Env:PSModulePath 환경 변수에 나열되어 있습니다.
기본 사용자별 모듈 경로는: "$Env:HomeDrive$Env:HOMEPATH\Documents\WindowsPowerShell\Modules" 기본 컴퓨터 수준 모듈 경로는: "$Env:windir\System32\WindowsPowerShell\v1.0\Modules"
모듈을 사용하려면 Import-Module PowerShellArsenal을 입력하세요.
가져온 명령을 보려면 Get-Command -Module PowerShellArsenal을 입력하세요.
PowerShell v3을 실행 중이고 '인터넷에서 다운로드한 스크립트를 실행하시겠습니까?'라는 성가신 경고를 제거하려면 PowerShellArsenal을 모듈 경로에 배치한 후 다음 한 줄을 실행하세요:
$Env:PSModulePath.Split(';') | % { if ( Test-Path (Join-Path $_ PowerShellArsenal) ) {Get-ChildItem $_ -Recurse | Unblock-File} }
각 개별 명령에 대한 도움말은 Get-Help를 사용하세요.
참고: 이 모듈에 포함된 도구는 모두 개별적으로 실행될 수 있도록 설계되었습니다. 모듈에 포함시키는 것은 단순히 이식성을 높이기 위함입니다.
PowerShellArsenal의 모든 기여자 및 향후 기여자 여러분, 스크립트/모듈을 작성할 때 이 스타일 가이드를 따라 주시기 바랍니다.
Write-Host는 절대 사용하지 마십시오. PowerShell 함수/cmdlet은 명령줄 유틸리티가 아닙니다! Write-Host를 사용하는 코드가 포함된 풀 리퀘스트는 고려되지 않습니다. 대신 사용자 지정 개체를 출력해야 합니다. 사용자 지정 개체 생성에 대한 자세한 내용은 다음 문서를 읽어보세요:
화면에 관련 디버깅 정보를 표시하려면 Write-Verbose를 사용하세요. 사용자는 언제든지 '-Verbose'를 추가하면 됩니다.
모든 스크립트에 대해 설명적이고 주석 기반의 도움말을 항상 제공하세요. 또한 자신의 이름과 BSD 3-Clause 라이선스(BSD 라이선스 적용을 막는 특별한 상황이 없는 한)를 포함해야 합니다.
모든 함수가 적절한 PowerShell 동사-명사 규칙을 따르는지 확인하세요. Get-Verb를 사용하여 PowerShell에서 사용하는 기본 동사를 확인하세요. 지원되는 동사에 대한 예외는 경우에 따라 검토됩니다.
변수 이름은 대문자로 쓰고 가능한 한 설명적으로 작성하는 것을 선호합니다.
코드 사이에 논리적 공백을 제공하세요. 가독성을 높이기 위해 코드를 들여쓰기하세요.
코드를 반복하는 경우 함수를 작성하세요.
예상되는 모든 오류를 Catch하고 의미 있는 출력을 제공하세요. 스크립트 실행을 중단해야 하는 오류가 있으면 'Throw'를 사용하세요. 실행을 중단할 필요가 없는 오류가 있으면 Write-Error를 사용하세요.
Win32 API와 인터페이스하는 스크립트를 작성하는 경우 Add-Type으로 C#을 인라인 컴파일하지 마세요. 가능하면 PSReflect 모듈을 사용하세요.
하드코딩된 경로를 사용하지 마세요. 스크립트는 바로 사용할 수 있어야 합니다. 아무도 코드를 수정할 필요가 없어야 합니다(원하는 경우는 제외).
PowerShell v2 호환성은 매우 바람직합니다.
위치 매개변수를 사용하고 적절한 경우 매개변수를 필수로 만드세요. 예를 들어 다음과 같은 형식을 선호합니다:
[Parameter(Position = 0, Mandatory = $True)]파이프라인 입력을 받는 경우가 아니라면 별칭을 사용하지 마세요. 별칭은 특정 별칭에 익숙하지 않은 사람들이 코드를 읽기 어렵게 만듭니다.
명령이 너무 길게 실행되지 않도록 하세요. 예를 들어 파이프라인은 줄 바꿈에 자연스러운 위치입니다.
인라인 주석을 과도하게 사용하지 마세요. 코드의 특정 측면이 독자에게 혼란을 줄 수 있는 경우에만 사용하세요.
원치 않는/관련 없는 출력을 억제하기 위해 Out-Null을 사용하는 대신 원치 않는 출력을 $null에 저장하세요. 이렇게 하면 약간의 성능 향상이 있습니다.
적절한 경우 매개변수에 기본값을 사용하세요. 이상적으로는 매개변수 없이도 작동하는 스크립트를 원합니다.
함수에 대한 주석 기반 도움말에 필요한 모든 종속성과 선택적 종속성을 명시적으로 명시하세요. 모든 라이브러리 종속성은 'Lib' 폴더에 있어야 합니다.
스크립트가 복잡한 사용자 지정 개체를 생성하는 경우 개체의 출력을 적절히 형식화하는 ps1xml 파일을 포함하세요. ps1xml 파일은 Lib\Formatters에 저장됩니다.