hook微信语音,实现替换并发送指定语音
文章地址:https://www.jianshu.com/p/562d15ddc61c
确定需要hook的对象和方法,是AudioRecord而不是MediaRecorder。
熟悉文件的流操作,以及AudioRecord的工作过程。
Xposed的使用,注意是在before里面还是after中操作,另外这两者之间的操作也得掌握透彻。
1、通过控制一个在进程间通信的变量,把需要分开编译的代码全部整合在一起
2、模拟器上的hook需要给微信一个AudioRecord变量,并在微信语音输入的开始和结束时调用相应的操作
由于模拟器点击录制语音时弹不出话筒,前两天的例子是自己实现一个AudioRecord,所以这次直接hook微信的AudioRecord的startRecording方法,并设置返回值,让微信的录制流程不能正常执行。然后hookgetRecordState方法,自己维护AudioRecord的开始和停止。在startRecording中设为starting状态,在stop时设置为stopped状态,这样微信就可以正常执行read函数了,我们在read中再hook改变发送的语音,即可实现在模拟器中替换发送的语音了。
1、int pushAudio(String pcmfile);//使得每次微信发语音 都发出指定的pcm语音
2、int recordAudio(String pcmfile);//将微信录音 录到指定目录下
1、将文件父目录的权限修改的从read中移动到stop操作
2、去掉多余的代码, 在stop删除临时文件
3、修改调用Api的逻辑,实现相应的功能调用
1、修改主界面布局。目前有五个语音可以录制,发送
2、利用ContentProvider来实现进程间通信
删除没有必要的类,简化代码
今天发现在模拟器上发送指定语音失败,经过测试后发现需要hook AudioRecord的构造函数,该构造函数有5个参数,其第五个参数bufferSizeInBytes的值在模拟器和 真机上有区别,所以将模拟器的值hook后修改为真机上的值即可。代码的修改即在Module里面增加对构造函数的hook