-
Notifications
You must be signed in to change notification settings - Fork 9
Simple Example.zh CN
下面是一个简单的例子,启动一个cmd.exe
作为受控端,并阻止其执行任何外部命令。
有关命令、表达式等的更多信息,请参阅项目wiki。
启动PEDollController.exe
,点击界面右上角的启动
按钮开始监听客户端。控制台窗口中会显示所有正在监听的IP地址。
如果要在主控端所在的机器上启动监控端,点击文件
-在本机上启动监控端
。根据需求选择架构。
否则,把Monitor_x86
或者Monitor_x64
文件夹复制到目标机器上,启动PEDollMonitor.exe
,并输入第1步中显示的IP地址。
监控端初始化完成后,主控端会显示提示信息:
来自 xx.xx.xx.xx:xxxx 的客户端连接:#0 “计算机名”(监控端)。
监控端
标签也会出现在图形界面上。
在监控端
标签-创建新受控端
-命令行:
处,输入cmd.exe
,之后点击框内的执行
按钮。此时在监控端所在的机器上会出现一个cmd.exe
进程,主控端会显示提示信息:
来自 xx.xx.xx.xx:xxxx 的客户端连接:#1 “cmd.exe”(受控端)。
双击图形界面已连接客户端
列表中的cmd.exe
一项,受控端
标签就会出现在图形界面上。
监控端的使命到此结束;可以将其关闭,不影响后续操作。
cmd.exe
执行外部命令使用的API是CreateProcessW。
点击受控端
标签-钩子
-添加...
,如下所示填写安装钩子
窗口:
注意: 如果cmd.exe
是32位的,除上图所示之外,还需要勾选栈平衡参数
,并将出栈字节数:
从0改为40。原因参见FAQ。
“Before”阶段操作
文本框中的文字——--echo="{wstr(arg(0))}" --echo="{wstr(arg(1))}"
——使得主控端在驳回函数调用之前,将函数调用时传入的前两个参数(这里是lpApplicationName
和lpCommandLine
)作为Unicode字符串显示出来。由此我们可以知道PEDoll都驳回了那些命令的执行。
点击确定
,安装钩子。
到现在为止,运行cmd.exe
的控制台应该还是空白状态。这是因为PEDoll会自动中断受控端的执行。点击中断/继续程序执行
框中的执行
按钮,恢复程序执行。
试着在挂钩了的cmd.exe
窗口中执行几个外部命令,例如cmd
、more
或者help
。这些命令的执行都会失败,只有一行来自cmd.exe
本身的输出:
系统无法执行指定的程序。
每条外部命令试图执行被驳回时,主控端的控制台也会有提示信息:
客户端“cmd.exe”钩子激活:#0 “CreateProcessW”-“before”阶段。
echo: "C:\Windows\system32\cmd.exe"
echo: "cmd"
verdict: 执行判定“reject”。
客户端“cmd.exe”钩子激活:#0 “CreateProcessW”-“after”阶段。
verdict: 执行判定“approve”。
以echo:
开头的两行就是钩子操作(上文“Before”阶段操作
文本框中的文字)的结果。