当前位置: 首页 > 科技观察

恶意程序分析工具PowerShellArsenal

时间:2023-03-17 13:44:26 科技观察

介绍PowerShellArsenal是一个PowerShell模块,它的作用是帮助逆向工程师分析.NET恶意软件,PowerShellArsenal非常强大,它可以反汇编.NET恶意软件,分析和抓取内存,解析文件格式和内存structures,getinternalsysteminformation等1.Disassembly反汇编代码(1)Get-CSDisassembly使用CapstoneEngine反汇编引擎反汇编代码用法:Get-CSDisassembly-Architecture{Arm|Arm64|Mips|X86|PPC|CS_ARCH_ALL}-Mode{LittleEndian|Arm|Mode16|Mode32|Mode64|Thumb|Micro|N64|BigEndian}-Code[-Offset][-Count][-Syntax][-DetailOn][](2)Get-ILDisassemblyMSIL(MicrosoftIntermediateLanguage(MSIL)微软中间语言。)反汇编程序。使用方法:Get-ILDisassembly-AssemblyPath-MetadataToken[]Get-ILDisassembly-MethodInfo[]Get-ILDisassembly-MethodDef[]2.MalwareAnalysis分析恶意软件所需的工具。(1)New-FunctionDelegate为X86或x86_64函数提供可执行包装器。用法:New-FunctionDelegate[[-Parameters]][[-ReturnType]][-FunctionBytes][[-CallingConvention]{Winapi|Cdecl|StdCall|ThisCall|FastCall}][-DebugBreak][](2)Invoke-LoadLibrary主要调用kernel32!LoadLibrary进行恶意软件分析,将DLL加载到当前PowerShell进程中。使用方法:Invoke-LoadLibrary[-FileName][](3)New-DllExportFunctionNew-DllExportFunction接受一个模块,然后导出过程名称、返回类型和参数类型。***创建可用于执行非托管函数的托管委托。用法:New-DllExportFunction[-Module][-ProcedureName][[-Parameters]][[-ReturnType]][](4)Get-HostsFile解析HOSTS文件使用方法:Get-HostsFile[[-Path]][-Show][](5)New-HostsFileEntry替换或添加HOSTS文件内容使用方法:New-HostsFileEntry[-IPAddress][-Hostname][[-Comment]][-Path][-PassThru][-Show][](6)从中删除-HostsFileEntryHOSTS文件如何删除内容:Remove-HostsFileEntry-IPAddress[-Path][-PassThru][-Show][]Remove-HostsFileEntry-Hostname[-Path][-PassThru][-Show][]Remove-HostsFileEntry[-Path][-PassThru][-Show][-HostsEntry][](7)获取-AssemblyStrings输出.NET可执行文件所有定义的字符串使用方法:Get-AssemblyStrings-AssemblyPath[-HeapType][-Raw][]Get-AssemblyStrings-AssemblyBytes[-HeapType][-Raw][]Get-AssemblyStrings-AssemblyInfo[-HeapType][-Raw][](8)Get-AssemblyResources提取程序中的资源Get-AssemblyResources-AssemblyPath[]Get-AssemblyResources-AssemblyBytes[]Get-AssemblyResources-AssemblyInfo[](9)Remove-AssemblySuppressIldasmAttribute从.NET程序集中删除SuppressIldasmAttribute属性使用方法:Remove-AssemblySuppressIldasmAttribute-AssemblyPath-FilePath[]Remove-AssemblySuppressIldasmAttribute-AssemblyBytes-FilePath[]Remove-AssemblySuppressIldasmAttribute-AssemblyInfo-FilePath[](10)Get-AssemblyImplementedMethods返回程序的所有方法。Usage:Get-AssemblyImplementedMethods-AssemblyPath[]Get-AssemblyImplementedMethods-AssemblyBytes[]Get-AssemblyImplementedMethods-AssemblyInfo[]3.MemoryTools分析和进程内存(1)Get-ProcessStrings输出进??程用户态内存中的可打印字符串。使用方法:Get-ProcessStrings[-ProcessID][-MinimumLength][-Encoding][-IncludeImages][](2)Get-VirtualMemoryInfo调用的Kernel32!VirtualQueryExHowto使用:Get-VirtualMemoryInfo[-ProcessID][-ModuleBaseAddress][-PageSize][](3)Get-ProcessMemoryInfo类似于!vadumpWinDbg命令用法:Get-ProcessMemoryInfo[-ProcessID][](4)Get-StructFromMemory将数据从任何进程中的非托管内存块调度到一个新分配的指定类型的托管对象。Get-StructFromMemory[-Id][-MemoryAddress][-StructType][]4.Parsers解析文件格式和内存结构(1)Get-PE分析内存和磁盘文件PE头使用方法:Get-PE[-ProcessID][[-ModuleBaseAddress]][[-Module]][-DumpDirectory][-IgnoreMalformedPE][]Get-PE[-FileBytes][-IgnoreMalformedPE][](2)Find-ProcessPEs在内存中查找可移植的可执行文件,不管它们是否以合法的方式加载,使用方法:Find-ProcessPEs[-ProcessID][](3)Get-LibSymbols显示来自WindowsLIB文件的符号信息。使用方法:Get-LibSymbols[-Path][](4)Get-ObjDump显示有关Windows对象(OBJ)文件的信息。使用方法:Get-ObjDump[-Path][]5.WindowsInternals获取并分析低级Windows操作系统信息。(1)Get-NtSystemInformation是一个调用ntdll!NtQuerySystemInformation函数的实用程序,可以用来查询通常对用户不可见的操作系统内部信息。使用方法:Get-NtSystemInformation[-PoolTagInformation][]Get-NtSystemInformation[-ModuleInformation][]Get-NtSystemInformation[-HandleInformation][-ObjectType][]Get-NtSystemInformation[-ObjectInformation][]Get-NtSystemInformation[-LockInformation][]Get-NtSystemInformation[-CodeIntegrityInformation][]Get-NtSystemInformation[-GlobalFlags][](2)Get-PEB返回一个进程的进程环境块(PEB)。使用方法:Get-PEB[-Id][](3)Register-ProcessModuleTrace跟踪模块加载过程使用方法:Register-ProcessModuleTrace[](4)Get-ProcessModuleTrace显示Load自调用Register-ProcessModuleTrace进程模块使用方法:Get-ProcessModuleTrace[](5)Unregister-ProcessModuleTrace停止运行进程模块跟踪使用方法:Unregister-ProcessModuleTrace[](6)Get-SystemInfo调用kernel32!GetSystemInfo获取有关系统的一些信息。使用方法:Get-SystemInfo[]6.其他辅助功能(1)Get-Member用于扩展内置的Get-Membercmdlet的代理功能使用方法:Get-Member[-InputObject][[-Name]][-MemberType{AliasProperty|CodeProperty|Property|NoteProperty|ScriptProperty|Properties|PropertySet|Method|CodeMethod|ScriptMethod|Methods|ParameterizedProperty|MemberSet|Event|Dynamic|All}][-View{Extended|Adapted|Base|All}][-Static][-Force][]Get-Member[-InputObject][[-Name]][-PrivateMemberType{Constructor|Event|Field|Method|Property|TypeInfo|Custom|NestedType|All}][-Static][-Force][-Private][](2)Get-StringsGet-Stringscmdlet返回字符串(Unicode和/或Ascii)。此cmdlet对于转储字符串很有用。使用方法:Get-Strings[-Path][-Encoding][-MinimumLength][](3)ConvertTo-StringConvertTo-String对于执行二进制正则非常有用表达式。Usage:ConvertTo-String[-Path][](4)Get-Entropy计算文件或字节数组的熵。使用方法:Get-Entropy[-ByteArray][]Get-Entropy[-FilePath][]项目地址:https://github.com/mattifestation/PowerShellArsenal