该文章内容可忽略,这个方法更好用: https://bbs.pediy.com/thread-261262.htm
该方法适用于不知道恶意脚本会调用哪些关键的 api
sos 在此:447K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3P5X3S2Q4x3X3c8U0L8W2)9J5c8X3c8G2N6r3&6W2N6q4)9J5c8X3k6J5j5h3#2W2N6$3!0J5K9#2)9J5c8Y4c8G2L8$3I4K6i4K6u0r3M7$3!0K6i4K6u0V1k6r3I4D9i4K6u0V1M7$3!0K6i4K6u0V1k6r3g2T1N6h3N6Y4K9h3&6Y4i4K6u0V1k6i4S2@1k6h3&6K6K9h3!0F1
加载 sos:
一开始不知道 怎么给 iex 下断,去 msdn 查一下相关信息:6f4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8Y4m8G2N6$3g2J5M7$3S2W2L8r3I4Q4x3V1k6E0L8$3c8#2L8r3g2Q4x3V1k6E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2H3L8%4N6W2M7Y4y4Z5k6h3I4D9i4K6u0W2N6i4c8A6L8r3W2@1P5g2)9J5c8X3W2F1N6X3!0C8k6g2)9J5k6r3g2^5M7s2u0W2M7%4y4A6L8$3&6Q4x3@1k6$3K9h3g2%4i4K6y4p5M7r3!0%4k6i4u0K6K9r3g2D9L8q4)9J5k6o6M7`. 了解到所在模块为 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
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2022-5-14 23:34
被qux编辑
,原因: 有更好的方法