监控声卡发声
最近,需要用一台电脑24小时播出网络电台。由于受网络稳定性的影响,电台经常被阻停,要手工刷新网页来重新播出。为免麻烦,决定做一个能监控声卡是否正在发声软件,只有在声卡静音达到规定时间的情况下才判断播出中断,程序自动刷新播出。查找了好多这方面的信息,发现资料很少,要不是泛泛地说用waveout系列api却没有一个实例,要不就是提供的实例是win7、net的,不适合我的环境。期间电台老停播,为解燃眉之急,我采纳了另一论坛热心坛友的建议:监控网络流量,如流量低于某一阀值一定时间,就判断网络阻塞,播出中断,需要自动刷新;监控网络流量的实例很多,小半天功夫就完成了软件,经测试,有一定的实用性,最长可以达一星期不间断播出,但仍会中断,比如系统或杀毒软件自动升级阻塞播出,这时软件是无法通过流量监控的(因为这时的流量很大)。
决定还是监控声卡是否发声可靠,又无休止地百度,终于找到一个第三方dll库可以达到要求,可惜需要注册,否则不定时弹出要求你注册的窗口,还有很响的叮声播出,这肯定不行。无奈用ollydbg跟踪调试,花了一晚上时间总算破解了该dll,绕过了注册提示,具备了实用性。现就开发过程中的经验心得纪要如下(最后提供监控声卡发声的源代码):
一、不能直接使用网页内嵌电台的方式播出,首先网页很多能发出“的”声的flash,还不时弹出其他窗口;其次有好多做电台的网站都是二道甚至三道贩子,链接级数过多,可靠性差。因此需要找到网络电台真正的地址,现在flash内嵌的播放器已经很难找到真正的网址了,只有万能的sniffer(网络嗅探)是王牌工具。
二、要破解还是用ollydbg吧,softice虽然调试的权限更高(可调试系统驱动),但不直观、繁琐。ollydbg很好用,一般小小的加密能很快搞掉。
三、要熟悉api,尤其是user32的,能让你破解事半功倍。破解首先应根据经验从常用api断点入手,其次从内存数据入手(如显示出的字符串),没办法了才是整段整段汇编代码跟踪的。
四、大多dll并不是按照vb的接口设计的,不能在工程里引用,但你仍然可以通过声明使用dll里的函数,就是你常见的Private Declare Function ...,对未注册第三方dll的使用,一般和程序放在同一个目录,在使用前最好加个代码:chdir app.path,这样才能确保dll正常使用。
五、上声卡发声监控源代码,为尊重第三方版权,源代码并没有提供绕过注册提示的代码,只简要介绍了下方法,不过我已生成了一个没有注册提示的可执行文件做示范。
录音sdk调用.rar
(232.5 KB)