PowerShell功能十分强大。它旨在从命令行自动执行任务并解决配置管理的问题,由此创建了许多重要工具。PowerShell有很多优点:例如易于导入模块,能够访问核心API和远程命令,也正是由于这些优点使其成为攻击者执行无文件攻击的首选工具之一。使用本地或预先安装的工具来进行攻击已经越来越受欢迎,至少部分是由于基于文件的AV系统(例如ML引擎)的进步以检测从未见过的攻击。
如何调试PowerShell 脚本
在运行窗口输入powershell ISE打开IDE窗口,随便打开一个PS脚本
IDE界面
首先来介绍一下这个界面
如图所示: IDE环境被分成了三个窗格,这个窗格的布局可以自定义。
管理断点
在 Windows PowerShell 调试环境中设置三种类型的断点:
行断点 在脚本运行期间,当达到所指定的行时,脚本暂停
变量断点。 每当指定变量的值发生变化时,脚本就会暂停。
命令断点。 在脚本运行期间,每当要运行指定命令时,脚本暂停。 它可以包括参数,以便仅对所需操作进一步筛选断点。 该命令还可以是你创建的函数。
只有行断点可以通过使用菜单或键盘快捷方式进行设置。 可以设置其他两种类型的断点,但应通过使用 Set-PSBreakpoint cmdlet 从控制台窗格中进行设置。
设置断点
设置行断点:右键单击你想要设置行断点的行,然后单击“切换断点,或者直接用快捷键F9
设置变量断点:
示例:
# This command sets a breakpoint on the Server variable in the Sample.ps1 script.
Set-PSBreakpoint -Script sample.ps1 -Variable Server
列出所有断点
在“调试”菜单上,单击“列出断点”,或者在控制台输入这条命令Get-PSBreakpoint
移除所有断点
若要移除在当前会话中定义的所有断点,在“调试”菜单上,单击“删除所有断点”
禁用所有断点
若要禁用在当前会话中的所有断点,在“调试”菜单上,单击“禁用所有断点”,或者在控制台输入这条命令Get-PSBreakpoint | Disable-PSBreakpoint
管理调试会话启动调试
按 F5 或在工具栏上,单击“运行脚本”图标,或在“调试”菜单上,单击“运行/继续”。 脚本将一直运行,直到它遇到第一个断点。 它将在此处暂停操作,并突出显示它暂停时所在的行。
继续调试
按 F5 或在工具栏上,单击“运行脚本”图标,或在“调试”菜单上,单击“运行/继续”或在控制台窗格中,键入 C,然后按 ENTER。 这将导致脚本继续运行到下一个断点,或如果接下来没有遇到任何断点的话运行到脚本的末尾。
查看调用堆栈
若要查看当前调用堆栈,请按 CTRL+SHIFT+D,或在“调试”菜单上,单击“显示调用堆栈”,在控制台窗格中,键入 K,然后按 ENTER。
停止调试
按 SHIFT-F5,或在“调试”菜单上,单击“停止调试器”,或者,在控制台窗格中,键入 Q,然后按 ENTER。
如何单步如何显示变量的值
powershell是没有监视窗口的,那么如何查看某个变量的值呢?有两个方法:
在脚本窗格中,将鼠标悬停在变量上,会自动显示变量的值
在控制台窗格中,键入变量的名称并按回车键
Powershell代码混淆解决方案常见的混淆方法
对于PowerShell而言,以下是一些常见的混淆方法:
还有更复杂的混淆方法,如变量创建和替换。混淆器将随机变量定义为字符串的全部或部分,并通过文件在该字符串的位置插入/替换它的地方。 有许多方法可以实现替换。以下是几个例子: