Hook Wav Out, Dump 原始的音频文件.

某音频文件经过优化编码,发现解码以后是通过Wav Out API播放的.不具体研究他是如何解密的,直接Hook Wav 播放的API得到原始数据:

 

#include <mmsystem.h>
#pragma comment( lib, "winmm.lib" )

数据头的格式:

extern "C"  __declspec(dllexport) MMRESULT WINAPI MyWaveOutOpen( LPHWAVEOUT phwo, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
	{
		FILE *fp = fopen("test.dump.log","a+");
		if(fp)
		{
			fprintf(fp,"waveOutOpen\n");
			fprintf(fp,"pwfx->cbSize:%d\n",pwfx->cbSize);
			fprintf(fp,"pwfx->nAvgBytesPerSec:%d\n",pwfx->nAvgBytesPerSec);
			fprintf(fp,"pwfx->nBlockAlign:%d\n",pwfx->nBlockAlign);
			fprintf(fp,"pwfx->nChannels:%d\n",pwfx->nChannels);
			fprintf(fp,"pwfx->nSamplesPerSec:%d\n",pwfx->nSamplesPerSec);
			fprintf(fp,"pwfx->wBitsPerSample:%d\n",pwfx->wBitsPerSample); 

			fprintf(fp,"pwfx->wFormatTag:%d\n",pwfx->wFormatTag); 

			fclose(fp);
		}
		return waveOutOpen(phwo,uDeviceID,pwfx,dwCallback,dwInstance,fdwOpen);

	}

原始数据:

extern "C" __declspec(dllexport)  MMRESULT MyWaveOutWrite(HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh )
	{

		FILE *fp = fopen("test.dump.log","a+");
		if(fp)
		{
			fprintf(fp,"BufferLength:%d,Flags:%d-- cbwh:%d \n",pwh->dwBufferLength,pwh->dwFlags, cbwh);
			fclose(fp);
		}

		FILE *fpEx;
		fpEx = fopen("test.dump","ab+");
		if(fpEx)
		{
			fseek(fpEx,0,SEEK_END);
			fwrite(pwh->lpData,1,pwh->dwBufferLength,fpEx);
			fclose(fpEx);
		}


		//return MMSYSERR_NOERROR; //
		return waveOutWrite(hwo,pwh,cbwh);

		
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值