SharpHook 灵感来源于 SharpRDPThief project 。它使用了多种 API 钩子来获取我们需要的凭据。
在后台,它使用了 EasyHook 项目。一旦目标进程启动并运行,SharpHook 会自动将其依赖注入到目标进程中,然后通过 EasyHook 的 IPC 服务器发送凭据给我们。
| 进程 | API 调用 | 描述 | 状态 |
|---|---|---|---|
| mstsc | CredUnPackAuthenticationBufferW | 该钩子会注入 mstsc,应能提供用户名、密码和远程 IP | 完成 |
| runas | CreateProcessWithLogonW | 该钩子会注入 runas,应能提供用户名、密码和域名 | 完成 |
| powershell | CreateProcessWithLogonW | 该钩子会注入 powershell,对于用户输入不同凭据的命令(例如 Start-Process cmd -Credential X),应能输出相关信息 | 完成 |
| cmd | RtlInitUnicodeStringEx | 该钩子应注入 cmd,然后能够过滤关键字,例如:PsExec、password 等 | 进行中 - cmd 崩溃,原因未知 |
| MobaXterm | CharUpperBuffA | 该钩子会注入 MobaXterm,应能提供 SSH 和 RDP 登录的凭据 | 进行中 - 由于该进程是 32 位以及 Fody 无法正常工作而存在问题。作为变通方案,你可以将项目编译为 x86,它就能正常工作 |
| explorer(UAC 提示) | CredUnPackAuthenticationBufferW | 该钩子会注入 explorer,应能从 UAC 提示中提供用户名、密码和域名 | 进行中 - UAC 提示拒绝访问,可能是完整性级别问题 |

如果你能贡献代码,请随时提交,因为我在某些进程上遇到了一些问题。你可以在 Twitter 上找到我,或者直接发起 Pull Request。