该文章内容可忽略,这个方法更好用: https://bbs.pediy.com/thread-261262.htm
该方法适用于不知道恶意脚本会调用哪些关键的 api
sos 在此:
https://docs.microsoft.com/zh-cn/dotnet/framework/tools/sos-dll-sos-debugging-extension
加载 sos:
一开始不知道 怎么给 iex 下断,去 msdn 查一下相关信息:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-expression?view=powershell-7
了解到所在模块为 Microsoft.PowerShell.Utility
name2ee 可以获取一些方法、类的结构和地址
我们通过 name2ee 找一下具体的模块:
应该就是这个 dll:
在电脑搜索这个 dll,用 dnSpy 打开,定位到 Microsoft.PowerShell.Commands->InvokeExpressionCommand
,里面有一个 ProcessRecord
方法,所以最终我们要下断的方法是:
本来以为可以用 bpmd 命令直接下断,结果断不下来,所以还是用 name2ee 找到函数地址,以后就不用做上面的准备工作了,可以直接执行下面的命令:
得到:
JITTED Code Address
就是我们要下断的地址,下断:
断下来之后,怎么找到命令呢?
执行 !dso
,找到所有的 Object,复制出来,搜索 Microsoft.PowerShell.Commands.InvokeExpressionCommand
得到:
dump Object
得到:
继续dump _command
对应的 value
得到:
可能多次触发断点,每次断点可能还有多个 InvokeExpressionCommand Object,一般最后一次断点的第 1 个 InvokeExpressionCommand 对应的 _command
value dump 出来的 string 是这种方法能做到的最好的效果
这种方法的优点是足够精确且通用,缺点就是略繁琐,如果能找到其他相关的 api 断点,就不需要用这种方法了
感谢yz
.load sos
Usage: !Name2EE module_name item_name
or
!Name2EE module_name!item_name
use
*
for
module_name to search
all
loaded modules
Examples: !Name2EE mscorlib.dll System.String.ToString
!Name2EE
*
!System.String
Usage: !Name2EE module_name item_name
or
!Name2EE module_name!item_name
use
*
for
module_name to search
all
loaded modules
Examples: !Name2EE mscorlib.dll System.String.ToString
!Name2EE
*
!System.String
!name2ee
*
iex
Module:
000007fef0711000
(Microsoft.PowerShell.Commands.Utility.dll)
Module:
000007fef0711000
(Microsoft.PowerShell.Commands.Utility.dll)
Microsoft.PowerShell.Commands.InvokeExpressionCommand.ProcessRecord
Microsoft.PowerShell.Commands.InvokeExpressionCommand.ProcessRecord
!name2ee Microsoft.PowerShell.Commands.Utility.dll Microsoft.PowerShell.Commands.InvokeExpressionCommand.ProcessRecord
!name2ee Microsoft.PowerShell.Commands.Utility.dll Microsoft.PowerShell.Commands.InvokeExpressionCommand.ProcessRecord
Module:
000007fef03e1000
(Microsoft.PowerShell.Commands.Utility.dll)
Token:
0x0000000006000476
MethodDesc:
000007fef03fd918
Name: Microsoft.PowerShell.Commands.InvokeExpressionCommand.ProcessRecord()
JITTED Code Address:
000007fef0548af0
Module:
000007fef03e1000
(Microsoft.PowerShell.Commands.Utility.dll)
Token:
0x0000000006000476
MethodDesc:
000007fef03fd918
Name: Microsoft.PowerShell.Commands.InvokeExpressionCommand.ProcessRecord()
JITTED Code Address:
000007fef0548af0
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2022-5-14 23:34
被qux编辑
,原因: 有更好的方法