- UID
- 1
- 精华
- 245
- 积分
- 75957
- 威望
- 744 点
- 宅币
- 24257 个
- 贡献
- 46222 次
- 宅之契约
- 0 份
- 最后登录
- 2024-4-28
- 在线时间
- 2298 小时
- QQ
用户组: 管理员
一只技术宅
- UID
- 1
- 精华
- 245
- 威望
- 744 点
- 宅币
- 24257 个
- 贡献
- 46222 次
- 宅之契约
- 0 份
- 在线时间
- 2298 小时
- 注册时间
- 2014-1-26
|
原理很简单。弄一个导出表和原dsound.dll一致的自定义DLL,里面的函数就都可以劫持了。
dsound.dll是使用DirectSound必不可少的DLL,通过使用它,游戏可以播放各种各样的音效。就比如《光环2》这个游戏,它就是使用DirectSound进行声音的播放的。
我觉得《光环2》的精英战士长得比较萌,而且声音也铿锵有力(虽然四个下颌让它们吐字不清)。通过劫持dsound.dll可以实现游戏音效的截取。
当然不能急,要一步一步来。写的函数名字和调用约定以及参数个数必须和原DLL完全一致,才能保证完全加载。
我这里给的源代码是自己写了个dsound.dll,然后它引用了原始的dsound.dll。做法就是用LoadLibrary加载原始DLL,调用原始的函数,然后对其进行处理。
先看ds.def- LIBRARY
- EXPORTS
- DirectSoundCreate @1
- DirectSoundEnumerateA @2
- DirectSoundEnumerateW @3
- DllCanUnloadNow @4
- DllGetClassObject @5
- DirectSoundCaptureCreate @6
- DirectSoundCaptureEnumerateA @7
- DirectSoundCaptureEnumerateW @8
- GetDeviceID @9
- DirectSoundFullDuplexCreate @10
- DirectSoundCreate8 @11
- DirectSoundCaptureCreate8 @12
复制代码 你会发现它和原始的dsound.dll一致。然后就是源码部分。因为是汇编写的所以代码略丑。这个源码需要用nasm编译,然后用link链接(VC6的link),你需要链接的库是kernel32.lib
SRC:
DummyDS.7z
(587.41 KB, 下载次数: 9, 售价: 2 个宅币)
我这个帖子只是举一个举一反三的作用。大家看了可以编写别的DLL的劫持程序。 |
|