Skip to content

Simple Example.zh CN

EZForever edited this page Apr 10, 2020 · 4 revisions

基本使用方法

下面是一个简单的例子,启动一个cmd.exe作为受控端,并阻止其执行任何外部命令。

有关命令、表达式等的更多信息,请参阅项目wiki

1. 启动主控端

启动PEDollController.exe,点击界面右上角的启动按钮开始监听客户端。控制台窗口中会显示所有正在监听的IP地址。

2. 启动监控端

如果要在主控端所在的机器上启动监控端,点击文件-在本机上启动监控端。根据需求选择架构。

否则,把Monitor_x86或者Monitor_x64文件夹复制到目标机器上,启动PEDollMonitor.exe,并输入第1步中显示的IP地址。

监控端初始化完成后,主控端会显示提示信息:

来自 xx.xx.xx.xx:xxxx 的客户端连接:#0 “计算机名”(监控端)。

监控端标签也会出现在图形界面上。

3. 启动受控端cmd.exe

监控端标签-创建新受控端-命令行:处,输入cmd.exe,之后点击框内的执行按钮。此时在监控端所在的机器上会出现一个cmd.exe进程,主控端会显示提示信息:

来自 xx.xx.xx.xx:xxxx 的客户端连接:#1 “cmd.exe”(受控端)。

双击图形界面已连接客户端列表中的cmd.exe一项,受控端标签就会出现在图形界面上。

监控端的使命到此结束;可以将其关闭,不影响后续操作。

4. 安装执行外部命令时的钩子

cmd.exe 执行外部命令使用的API是CreateProcessW

点击受控端标签-钩子-添加...,如下所示填写安装钩子窗口:

SimpleExample.InstallHookDlg.zh-CN.png

注意: 如果cmd.exe是32位的,除上图所示之外,还需要勾选栈平衡参数,并将出栈字节数:从0改为40。原因参见FAQ

“Before”阶段操作文本框中的文字——--echo="{wstr(arg(0))}" --echo="{wstr(arg(1))}"——使得主控端在驳回函数调用之前,将函数调用时传入的前两个参数(这里是lpApplicationNamelpCommandLine)作为Unicode字符串显示出来。由此我们可以知道PEDoll都驳回了那些命令的执行。

点击确定,安装钩子。

5. 体验效果

到现在为止,运行cmd.exe的控制台应该还是空白状态。这是因为PEDoll会自动中断受控端的执行。点击中断/继续程序执行框中的执行按钮,恢复程序执行。

试着在挂钩了的cmd.exe窗口中执行几个外部命令,例如cmdmore或者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”阶段操作文本框中的文字)的结果。