反向工程在 Windows 上收听此设备 - 当没有 API 时反向工程 Windows

逆向工程 视窗 dll x64dbg 视窗 10
2021-06-27 04:45:02

我正在编写一个Autohotkey脚本来切换Listen to this device我的麦克风,而无需与 GUI 交互。

听这个设备

我认为这将是一个简单的注册表项被修改,所以我使用RegShot来查找密钥:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture\{My-Microphone's-UUID}\Properties

密钥被称为{24dbb0fc-9311-4b3d-9cf0-18ff155639d4},1(在所有计算机上)。

以及切换这样的Listen to this device更改时的值:(0的更改为f的)

xxxxxxxxxxxxxxxx0000xxxx
xxxxxxxxxxxxxxxxffffxxxx

但是当我检查 GUI 时,我看到Listen to this device勾选框已被勾选但我实际上听不到我的麦克风发出的任何声音,当我取消勾选它时,单击应用,重新勾选并再次应用,我听到我的声音麦克风。所以我想我可能需要DllCallPostMessage在这里,比如我点击时发送了什么消息或调用了什么dllapply但我在互联网上找不到任何东西。我不知道如何让 Windows 了解此设置已更改。

请教我如何使用 x64dbg 对其进行逆向工程。

1个回答

AFAIK,知道使用哪些注册表项并不总是足够的,因为注册表只是存储首选项等内容的地方。设置注册表值可能不会对设备产生任何直接影响。设备配置方式的真实来源是设备本身。

根据我的经验,控制面板往往是由操作系统托管的轻量级 GUI,执行任何实际工作的进程是 GUI 通过 IPC 与之对话的守护进程。

查看 API Monitor 中记录的 API 调用,我们可以看到控制面板将 RPC 消息发送到 AudioSrv 服务。sc queryex在命令提示符中使用,您可以找到托管此服务实例的 svchost(服务主机)的 PI​​D。

从那里,在 IDA 中进行字符串搜索,我们找到了一些 AudioSrv 代码正在使用的字符串“ListenTo”。它可能是用于调试的字符串,但那将是我在 IDA 中进行一些静态分析或使用调试器设置断点的第一个地方。

有一些工具可以帮助确定执行某些操作时运行的代码。我想到了 CheatEngine 中的 Ultimap,你可以在网上找到它的教程。您还可以在 x64dbg 中执行进程跟踪并查找任何系统调用,这通常很有趣,因为它表明进程正在向内核请求某些东西(例如控制设备)。

最终,这可能需要大量工作才能获得一个 hacky 解决方案,因此您可能会探索替代方案,例如创建虚拟设备驱动程序。