惡意程序分析利器PowerShellArsenal
簡介
PowerShellArsenal是一個(gè)PowerShell模塊,它的功能是幫助逆向工程師來分析.NET惡意軟件,PowerShellArsenal的功能非常強(qiáng)大,它可以反匯編.NET惡意軟件、分析和抓取內(nèi)存、解析文件格式和內(nèi)存結(jié)構(gòu),獲取內(nèi)部系統(tǒng)信息等。
1.Disassembly
反匯編代碼
(1)Get-CSDisassembly
使用Capstone Engine反匯編引擎反匯編代碼
使用方法:
- Get-CSDisassembly -Architecture {Arm | Arm64 | Mips | X86 | PPC | CS_ARCH_ALL} -Mode {LittleEndian | Arm | Mode16 |
- Mode32 | Mode64 | Thumb | Micro | N64 | BigEndian} -Code <Byte[]> [-Offset <UInt64>] [-Count <UInt32>] [-Syntax <S
- tring>] [-DetailOn] [<CommonParameters>]
(2)Get-ILDisassembly
MSIL(Microsoft Intermediate Language (MSIL)微軟中間語言。)反匯編器。
使用方法:
- Get-ILDisassembly -AssemblyPath <String> -MetadataToken <Int32> [<CommonParameters>]
- Get-ILDisassembly -MethodInfo <MethodBase> [<CommonParameters>]
- Get-ILDisassembly -MethodDef <MethodDef> [<CommonParameters>]
2.MalwareAnalysis
分析惡意軟件時(shí)需要用到的工具。
(1)New-FunctionDelegate
提供了一個(gè)X86或x86_64功能的可執(zhí)行包裝。
使用方法:
- New-FunctionDelegate [[-Parameters] <Type[]>] [[-ReturnType] <Type>] [-FunctionBytes] <Byte[]> [[-CallingConvention
- ] {Winapi | Cdecl | StdCall | ThisCall | FastCall}] [-DebugBreak] [<CommonParameters>]
(2)Invoke-LoadLibrary
主要調(diào)用kernel32!LoadLibrary用于惡意軟件分析,將DLL加載到當(dāng)前的PowerShell進(jìn)程中。
使用方法:
- Invoke-LoadLibrary [-FileName] <String> [<CommonParameters>]
(3)New-DllExportFunction
New-DllExportFunction接受一個(gè)模塊,然后導(dǎo)出procedure name,返回類型、參數(shù)類型。***創(chuàng)建一個(gè)托管的委托,可用于執(zhí)行非托管函數(shù)。
使用方法:
- New-DllExportFunction [-Module] <ProcessModule> [-ProcedureName] <String> [[-Parameters] <Type[]>] [[-ReturnType] <
- Type>] [<CommonParameters>]
(4)Get-HostsFile
解析HOSTS文件
使用方法:
- Get-HostsFile [[-Path] <String>] [-Show] [<CommonParameters>]
(5)New-HostsFileEntry
替換或添加內(nèi)容到HOSTS文件
使用方法:
- New-HostsFileEntry [-IPAddress] <IPAddress> [-Hostname] <String> [[-Comment] <String>] [-Path <String>] [-PassThru]
- [-Show] [<CommonParameters>]
(6)Remove-HostsFileEntry
從HOSTS文件中刪除內(nèi)容
使用方法:
- Remove-HostsFileEntry -IPAddress <IPAddress> [-Path <String>] [-PassThru] [-Show] [<CommonParameters>]
- Remove-HostsFileEntry -Hostname <String> [-Path <String>] [-PassThru] [-Show] [<CommonParameters>]
- Remove-HostsFileEntry [-Path <String>] [-PassThru] [-Show] [-HostsEntry <PSObject[]>] [<CommonParameters>]
(7)Get-AssemblyStrings
輸出.NET可執(zhí)行文件所有定義的字符串
使用方法:
- Get-AssemblyStrings -AssemblyPath <String> [-HeapType <String>] [-Raw] [<CommonParameters>]
- Get-AssemblyStrings -AssemblyBytes <Byte[]> [-HeapType <String>] [-Raw] [<CommonParameters>]
- Get-AssemblyStrings -AssemblyInfo <Assembly> [-HeapType <String>] [-Raw] [<CommonParameters>]
(8)Get-AssemblyResources
提取程序中的資源
- Get-AssemblyResources -AssemblyPath <String> [<CommonParameters>]
- Get-AssemblyResources -AssemblyBytes <Byte[]> [<CommonParameters>]
- Get-AssemblyResources -AssemblyInfo <Assembly> [<CommonParameters>]
(9)Remove-AssemblySuppressIldasmAttribute
從.NET程序集中刪除SuppressIldasmAttribute屬性。
使用方法:
- Remove-AssemblySuppressIldasmAttribute -AssemblyPath <String> -FilePath <String> [<CommonParameters>]
- Remove-AssemblySuppressIldasmAttribute -AssemblyBytes <Byte[]> -FilePath <String> [<CommonParameters>]
- Remove-AssemblySuppressIldasmAttribute -AssemblyInfo <Assembly> -FilePath <String> [<CommonParameters>]
(10)Get-AssemblyImplementedMethods
返回程序的所有方法。
使用方法:
- Get-AssemblyImplementedMethods -AssemblyPath <String> [<CommonParameters>]
- Get-AssemblyImplementedMethods -AssemblyBytes <Byte[]> [<CommonParameters>]
- Get-AssemblyImplementedMethods -AssemblyInfo <Assembly> [<CommonParameters>]
3.MemoryTools
檢查和分析進(jìn)程內(nèi)存
(1)Get-ProcessStrings
輸出一個(gè)進(jìn)程的用戶模式內(nèi)存中所以可打印的字符串
使用方法:
- Get-ProcessStrings [-ProcessID] <Int32> [-MinimumLength <UInt16>] [-Encoding <String>] [-IncludeImages] [<CommonPar
- ameters>]
(2)Get-VirtualMemoryInfo
調(diào)用的kernel32!VirtualQueryEx
使用方法:
- Get-VirtualMemoryInfo [-ProcessID] <Int32> [-ModuleBaseAddress] <IntPtr> [-PageSize <Int32>] [<CommonParameters>]
(3)Get-ProcessMemoryInfo
類似于!vadump WinDbg命令
使用方法:
- Get-ProcessMemoryInfo [-ProcessID] <Int32> [<CommonParameters>]
(4)Get-StructFromMemory
將數(shù)據(jù)從任意進(jìn)程中的非托管內(nèi)存塊調(diào)度到新分配的指定類型的托管對象。
- Get-StructFromMemory [-Id] <UInt16> [-MemoryAddress] <IntPtr> [-StructType] <Type> [<CommonParameters>]
4.Parsers
解析文件格式和內(nèi)存結(jié)構(gòu)
(1)Get-PE
分析內(nèi)存和磁盤上文件的PE頭
使用方法:
- Get-PE [-ProcessID] <Int32> [[-ModuleBaseAddress] <IntPtr>] [[-Module] <ProcessModule[]>] [-DumpDirectory <String>]
- [-IgnoreMalformedPE] [<CommonParameters>]
- Get-PE [-FileBytes] <Byte[]> [-IgnoreMalformedPE] [<CommonParameters>]
(2)Find-ProcessPEs
在內(nèi)存中查找可移植的可執(zhí)行文件,而不管它們是否以合法方式加載
使用方法:
- Find-ProcessPEs [-ProcessID] <Int32> [<CommonParameters>]
(3)Get-LibSymbols
顯示來自Windows LIB文件的符號信息。
使用方法:
- Get-LibSymbols [-Path] <String[]> [<CommonParameters>]
(4)Get-ObjDump
顯示有關(guān)Windows對象(OBJ)文件的信息。
使用方法:
- Get-ObjDump [-Path] <String[]> [<CommonParameters>]
5.WindowsInternals
獲取并分析低級別的Windows操作系統(tǒng)的信息。
(1)Get-NtSystemInformation
一個(gè)實(shí)用的程序,調(diào)用ntdll!NtQuerySystemInformation函數(shù),可用于查詢通常對用戶不可見的內(nèi)部操作系統(tǒng)信息。
使用方法:
- Get-NtSystemInformation [-PoolTagInformation] [<CommonParameters>]
- Get-NtSystemInformation [-ModuleInformation] [<CommonParameters>]
- Get-NtSystemInformation [-HandleInformation] [-ObjectType <String>] [<CommonParameters>]
- Get-NtSystemInformation [-ObjectInformation] [<CommonParameters>]
- Get-NtSystemInformation [-LockInformation] [<CommonParameters>]
- Get-NtSystemInformation [-CodeIntegrityInformation] [<CommonParameters>]
- Get-NtSystemInformation [-GlobalFlags] [<CommonParameters>]
(2)Get-PEB
返回一個(gè)進(jìn)程的進(jìn)程環(huán)境塊(PEB)。
使用方法:
- Get-PEB [-Id] <UInt16[]> [<CommonParameters>]
(3)Register-ProcessModuleTrace
跟蹤加載進(jìn)程的模塊
使用方法:
- Register-ProcessModuleTrace [<CommonParameters>]
(4)Get-ProcessModuleTrace
顯示已加載自調(diào)用Register-ProcessModuleTrace流程模塊
使用方法:
- Get-ProcessModuleTrace [<CommonParameters>]
(5)Unregister-ProcessModuleTrace
停止正在運(yùn)行的進(jìn)程模塊跟蹤
使用方法:
- Unregister-ProcessModuleTrace [<CommonParameters>]
(6)Get-SystemInfo
調(diào)用kernel32!GetSystemInfo來獲取系統(tǒng)的一些信息。
使用方法:
- Get-SystemInfo [<CommonParameters>]
6.Misc
其他的輔助功能
(1)Get-Member
用于擴(kuò)展內(nèi)置Get-Member cmdlet的代理函數(shù)
使用方法:
- Get-Member [-InputObject <PSObject>] [[-Name] <String[]>] [-MemberType {AliasProperty | CodeProperty | Property |
- NoteProperty | ScriptProperty | Properties | PropertySet | Method | CodeMethod | ScriptMethod | Methods | Parameter
- izedProperty | MemberSet | Event | Dynamic | All}] [-View {Extended | Adapted | Base | All}] [-Static] [-Force] [<C
- ommonParameters>]
- Get-Member [-InputObject <PSObject>] [[-Name] <String[]>] [-PrivateMemberType {Constructor | Event | Field | Metho
- d | Property | TypeInfo | Custom | NestedType | All}] [-Static] [-Force] [-Private] [<CommonParameters>]
(2)Get-Strings
Get-Strings cmdlet從文件返回字符串(Unicode和/或Ascii)。 此cmdlet對轉(zhuǎn)儲字符串很有用。
使用方法:
- Get-Strings [-Path] <String[]> [-Encoding <String>] [-MinimumLength <UInt32>] [<CommonParameters>]
(3)ConvertTo-String
ConvertTo-String執(zhí)行二進(jìn)制正則表達(dá)式非常有用。
使用方法:
- ConvertTo-String [-Path] <String> [<CommonParameters>]
(4)Get-Entropy
計(jì)算文件或字節(jié)數(shù)組的熵。
使用方法:
- Get-Entropy [-ByteArray] <Byte[]> [<CommonParameters>]
- Get-Entropy [-FilePath] <FileInfo> [<CommonParameters>]
項(xiàng)目地址:https://github.com/mattifestation/PowerShellArsenal