现在的状态很差,不过真的有好多东西要写啊!还是先随便写点东西找找感觉吧!这一篇文章就描述一下前一段时间hack过的某安卓电话答录机吧。
最初想研究这个话题是在刚学安卓开发的时候。我想既然有这种两人打电话免费的服务,那么是否有可能利用这种免费语音通信进行数据传输呢?
理论上讲当然是可以的。在这种语音链路上,原来传输的是语音数据,现在改为一般数据就好。而且语音链路上传输的是声音波形数据,那么我把一般数据编码(比如:1+8+1)为语音数据,再传送出去不就好了吗?
理论上当然可以。问题是存在这种语音读写接口吗?
当时我花了整个国庆七天去尝试寻找相关的API接口和开源实现,但都没有可行方案。国内国外有不少人都在寻找利用了这种语音读写接口的电话自动答录软件。毕竟有的座机自带这种功能的,运营商也会提供付费服务。但安卓自己就没有。不仅要问了,语音数据已经流入我的手机了,我想录下来怎么了?我的声音是通过mic流入手机再流出到语音链路上的,那通过一个文件流入到CPU,再到音频解码器,再流出到语音链路上又有什么不可以?
但问题是就不可以!我找了一些底层硬件的相关原理和操作系统相关的原理资料,虽然原理上是可以的,但就是没有明确的可用接口。我曾尝试使用ALSA将这种语音读写链路打通,但未能成功(看来还是我太菜,底层还是太深了)。
多年后,也是前不久,CSDN上有位朋友问起了我这个问题,在惊讶于他怎么会知道我研究过这个之余,我又尝试去寻找了相关问题解决方案状态。
我搜索了“自动应答”、“auto answer machine”、“android voicemail”等关键字。发现的一部分有较好导向性的链接:
链接[1-3]是大家在讨论相关为什么没有相关软件。链接3中的网友sudosu给出提示“就是自动答录机,已开发出来了 http://www.52pojie.cn/thread-385952-1-1.html”。链接5似乎是在2014时的一个众筹项目,不知现在怎么样了。链接6说因为一些“特殊原因”,Google在底层限制了,但实际上是可通过一些操作实现的:
实际上也是根据链接3提示的那个软件的smali源码里的关键词找到了链接6。
上节链接3提示的链接为:自动答录机 v2.4.5.2 破解版,但已经不能下载了。但搜索“自动答录机 v2.4.5.2”就能找到了。
得到了APK先反编译为smali:
项目根目录下的lib目录里有一些.so,assets目录里有amix和aplay(都是ALSA相关,用于控制音频codec芯片)。
搜索源码以寻找在哪里使用到了这些命令:
找到了这两个文件:
从中看到amix的操作参数,如“Incall_Music Audio Mixer MultiMedia1”。
如此初步分析后,我想还是得看一下软件实际的运行效果(没有直接运行是怕这种软件不安全,勒索软件太可怕啊。不过想到这是从稍微可信的地方下载的,试试应该不会有大碍)。
运行后发现,需要登陆,相关文件:
前者是登陆activity,后者是登陆按钮事件的处理。那当然是让他直接登陆啦!这是我一开始的想法 ,不过我对smali语法不熟,没有找到关键点。
于是看日志:
发现有一些错误,因为它在请求网络,而我使用droidwall,默认是不会让它访问网络的。我又发现它请求的一些域名是正确解析了。显然我不希望它去访问那些服务器,于是修改/etc/hosts:
其中后三个是广告相关的,第一个是主控服务器,改成了我另一台电脑的IP以监听请求:
使用这种方式可以找到此客户端在请求http服务器时所发现的数据,从中可以看到各种参数。从刚才中的logcat后台错误也可以看到请求http相关类的提示,并进而找到http响应报文的语法格式,如第一个hello请求的响应为(请求报文就不发了,现在是根据之前的hack日志写的,当时没记录):
其中http是可以自己定义的,只要符合http协议。json串根据相关文件中的代码构建而成。
以下是过VIP验证:
我将vip的时间改成2018年了,这样就能通过了 ^ ^ (之所有要搜"GetVipDateTask",是从logcat日志里看到的提示)
但不能自动接听,不过手动接口后,对方可以听到播放的.wav录音。尝试寻找原因:修改了smali但未能成功,似乎是底层限制;尝试切换最新版本(2.4.6.2),可行。
但无法录音!
搜索“VOICE_CALL”相关资料,发现android 4.3之前可以,之后不可以了(安卓手机如何实现通话录音?、使用VOICE_CALL在Android5.0之后闪退bug源码解析、Android之关于电话录音原理,目前的方法还是只能录MIC)。但不管怎么说应该还是alsa操作上的事。
总之,当前此方案在接听、放音上没问题,但录音有问题。以后有时间再分析解决吧!
^ ^
谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)