简介
PowerShellArsenal是一个PowerShell其功能是帮助逆向工程师分析模块.NET恶意软件,PowerShellArsenal它的功能非常强大,可以反汇编.NET恶意软件、分析和捕获内存、分析文件格式和内存结构、获取内部系统信息等。
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<String>][-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
分析恶意软件时需要用到的工具。
(1)New-FunctionDelegate
提供了一个X86或x86_64可执行包装的功能。
使用 *** :
New-FunctionDelegate[[-Parameters]<Type[]>][[-ReturnType]<Type>][-FunctionBytes]<Byte[]>[[-CallingConvention]{Winapi|Cdecl|StdCall|ThisCall|FastCall}][-DebugBreak][<CommonParameters>](2)Invoke-LoadLibrary
主要调用kernel32!LoadLibrary将用于恶意软件分析DLL加载到当前PowerShell进程中。
使用 *** :
Invoke-LoadLibrary[-FileName]<String>[<CommonParameters>](3)New-DllExportFunction
New-DllExportFunction接受模块,然后导出procedure name,返回类型、参数类型。***非托管函数可用于创建托管委托。
使用 *** :
New-DllExportFunction[-Module]<ProcessModule>[-ProcedureName]<String>[[-Parameters]<Type[]>][[-ReturnType]<Type>][<CommonParameters>](4)Get-HostsFile
解析HOSTS文件
使用 *** :
Get-HostsFile[[-Path]<String>][-Show][<CommonParameters>](5)New-HostsFileEntry
替换或添加内容HOSTS文件
使用 *** :
New-HostsFileEntry[-IPAddress]<IPAddress>[-Hostname]<String>[[-Comment]<String>][-Path<String>][-PassThru][-Show][<CommonParameters>](6)Remove-HostsFileEntry
从HOSTS删除文件中的内容
使用 *** :
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所有可执行文件定义的字符串
使用 *** :
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-AssemblySuppressIlda *** Attribute
从.NET集中删除程序SuppressIlda *** Attribute属性。
使用 *** :
Remove-AssemblySuppressIlda *** Attribute-AssemblyPath<String>-FilePath<String>[<CommonParameters>]Remove-AssemblySuppressIlda *** Attribute-AssemblyBytes<Byte[]>-FilePath<String>[<CommonParameters>]Remove-AssemblySuppressIlda *** Attribute-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
检查和分析过程中的内存
(1)Get-ProcessStrings
在用户模式内存中输出一个过程,因此可以打印字符串
使用 *** :
Get-ProcessStrings[-ProcessID]<Int32>[-MinimumLength<UInt16>][-Encoding<String>][-IncludeImages][<CommonParameters>](2)Get-VirtualMemoryInfo
调用的kernel32!VirtualQueryEx
使用 *** :
Get-VirtualMemoryInfo[-ProcessID]<Int32>[-ModuleBaseAddress]<IntPtr>[-PageSize<Int32>][<CommonParameters>](3)Get-ProcessMemoryInfo
类似于!vadump WinDbg命令
使用 *** :
Get-ProcessMemoryInfo[-ProcessID]<Int32>[<CommonParameters>](4)Get-StructFromMemory
将数据从任何过程中的非托管内存块调度到指定类型的新分配托管对象。
Get-StructFromMemory[-Id]<UInt16>[-MemoryAddress]<IntPtr>[-StructType]<Type>[<CommonParameters>]4.Parsers
分析文件格式和内存结构
(1)Get-PE
分析磁盘上的内存和文件PE头
使用 *** :
Get-PE[-ProcessID]<Int32>[[-ModuleBaseAddress]<IntPtr>][[-Module]<ProcessModule[]>][-DumpDirectory<String>][-IgnoreMalformedPE][<CommonParameters>]Get-PE[-FileBytes]<Byte[]>[-IgnoreMalformedPE][<CommonParameters>](2)Find-ProcessPEs
无论是否以合法的方式加载,在内存中找到可移植的可执行文件
使用 *** :
Find-ProcessPEs[-ProcessID]<Int32>[<CommonParameters>](3)Get-LibSymbols
显示来自Windows LIB符号信息的文件。
使用 *** :
Get-LibSymbols[-Path]<String[]>[<CommonParameters>](4)Get-ObjDump
显示有关Windows对象(OBJ)文件信息。
使用 *** :
Get-ObjDump[-Path]<String[]>[<CommonParameters>]5.WindowsInternals
获取和分析低级别的Windows操作系统的信息。
(1)Get-NtSystemInformation
调用实用程序ntdll!NtQuerySystemInformation函数,可用于查询通常对用户不可见的内部操作系统信息。
使用 *** :
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
返回一个过程环境块(PEB)。
使用 *** :
Get-PEB[-Id]<UInt16[]>[<CommonParameters>](3)Register-ProcessModuleTrace
模块跟踪加载过程
使用 *** :
Register-ProcessModuleTrace[<CommonParameters>](4)Get-ProcessModuleTrace
显示已加载自调用Register-ProcessModuleTrace流程模块
使用 *** :
Get-ProcessModuleTrace[<CommonParameters>](5)Unregister-ProcessModuleTrace
停止跟踪正在运行的过程模块
使用 *** :
Unregister-ProcessModuleTrace[<CommonParameters>](6)Get-SystemInfo
调用kernel32!GetSystemInfo获取系统的一些信息。
使用 *** :
Get-SystemInfo[<CommonParameters>]6.Misc
其它辅助功能
(1)Get-Member
用于扩展内置Get-Member cmdlet的 *** 函数
使用 *** :
Get-Member[-InputObject<PSObject>][[-Name]<String[]>][-MemberType{AliasProperty|CodeProperty|Property|NoteProperty|ScriptProperty|Properties|PropertySet|Method|CodeMethod|ScriptMethod|Methods|ParameterizedProperty|MemberSet|Event|Dynamic|All}][-View{Extended|Adapted|Base|All}][-Static][-Force][<CommonParameters>]Get-Member[-InputObject<PSObject>][[-Name]<String[]>][-PrivateMemberType{Constructor|Event|Field|Method|Property|TypeInfo|Custom|NestedType|All}][-Static][-Force][-Private][<CommonParameters>](2)Get-Strings
Get-Strings cmdlet从文件返回字符串(Unicode和/或Ascii)。此cmdlet对转储字符串非常有用。
使用 *** :
Get-Strings[-Path]<String[]>[-Encoding<String>][-MinimumLength<UInt32>][<CommonParameters>](3)ConvertTo-String
ConvertTo-String实施二进制正则表达式非常有用。
使用 *** :
ConvertTo-String[-Path]<String>[<CommonParameters>](4)Get-Entropy
计算文件或字节数组的熵。
使用 *** :
Get-Entropy[-ByteArray]<Byte[]>[<CommonParameters>]Get-Entropy[-FilePath]<FileInfo>[<CommonParameters>]项目地址:https://github.com/mattifestation/PowerShellArsenal