Man*_*eel 20 audio hook winapi reverse-engineering
通过 Google 搜索结果,没有广为人知的方法可以从 Microsoft Windows 上的特定应用程序中捕获音频,至少不必求助于变通方法,例如将音频从一个进程发送到单独的虚拟音频环回设备(但这会导致无法听到声音,除非您使用硬件环回播放设备或通过主输出“收听”模拟输入)。
这些变通方法很笨拙,需要为每个特定应用程序进行配置,并且软件通常会出现错误行为,如果在执行期间更改其输出设备,则不再成功发出任何声音或直接停止工作。同时,推出Discord“实时流媒体”会话让您可以轻松无故障地与 VoIP 群组通话共享单个应用程序的声音。来自其他应用程序的声音被完全删除。看音频设备,似乎没有发生虚拟环回路由,客户端音频播放绝对零中断。该功能在 macOS 或 Linux 版本的软件上不可用,仅在 Windows 上可用。因此,在 Win32 中可以从特定进程捕获声音,但为什么其他人不这样做呢?比如说,在一个非常有用的软件分支中实现这样的东西需要什么,比如 OBS 或 Audacity?
编辑:不确定这是否有用,但我找到了这个页面:https : //obsproject.com/forum/threads/audio-sources.465/
特别是,这对我来说是有用的信息:
这与挂钩 Direct3D 非常相似。您挂钩 IAudioRenderClient 接口,并拦截 GetBuffer 以读取音频样本。
初学者的逆向工程时间!
另外,我不能给出明确的答案,但我可以引导你走向正确的方向。
Discord\modules\discord_hook在它的根目录中有一个名为的目录,在这里我们可以找到一个名为 的 JavaScript 文件,一个名为index.js的 json 文件manifest.json,一个名为的.node文件discord_hook.node(已编译/加密,我无法读取),一个带有.dlls 和.exes的目录,它还会生成一个名为hook.log.
index.js似乎只是加载discord_hook.node并做一些对我们不重要的其他事情。
谷歌搜索manifest.json把我带到这里:https : //developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json
该
manifest.json文件是使用 WebExtension API 的每个扩展程序必须包含的唯一文件。
在.json文件中,我们发现它引用了.exes、.dlls discord_hook.node、index.js、 和本身。
前面提到的 .node 文件大部分是人类无法读取的。
hook.log 不输出任何看似有用的东西,只是关于图形/视频共享的东西。
这让我们可以查看这里子目录中的exe和dll文件,我不知道asm,但是我们可以查看这些二进制文件中留下的一些字符串。
我发现一段字符串在偏移 1266B4 处引用音频以偏移 126EA6 DiscordHook.dll(这可能并且几乎肯定会在未来版本的不和谐中发生变化)
以下是一些似乎值得在此处发布的字符串。
Audio buffer stopped, WASAPI capture stopping
Failed to get format of WASAPI audio buffer, not capturing, error code [%d]
Failed to get WASAPI audio client from render client, not capturing
Starting capture of WASAPI buffer with sample rate %d, depth %d, %d channels
Starting capture of Windows Sonic stream with downmix sample rate %d, depth %d, %d channels
ISpatialAudioObjectRenderStream::Stop
ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjects
ISpatialAudioObjectRenderStream::EndUpdatingAudioObjects
ISpatialAudioObject::GetBuffer
HookWasapi failed to load audioses.dll
WaveFormatFromRenderClient failed with error code [%d]
LoadWASAPIOffsets failed with error code [%d]
WASAPI module sizes don't match (expected: %lu, actual: %lu)
WASAPI offsets invalid (stop: %lu, getBuffer: %lu, releaseBuffer: %lu, clientOffset: %lu, endpointOffset: %lu)
WASAPI offsets out of bounds (size: %lu, stop: %lu, getBuffer: %lu, releaseBuffer: %lu)
IAudioClient::Stop
IAudioRenderClient::GetBuffer
IAudioRenderClient::ReleaseBuffer
HookWasapi: MH_ApplyQueued failed 0x%x
Run Code Online (Sandbox Code Playgroud)
另外,我在谷歌上搜索了“hook process audio”,发现了这个:https : //ywjheart.wordpress.com/2017/02/26/audio-captureapihook-based-for-obs-studio/
它没有提供任何代码示例或下载,但它描述了一些关于在 OBS 中执行此操作的内容。他们还在底部链接了他们用来记录它的东西。
祝你好运,我希望所有这些信息都能在某种程度上有所帮助!