前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【隐私大战】App在偷听你的生活吗?

【隐私大战】App在偷听你的生活吗?

作者头像
yuanyi928
发布2020-04-22 15:08:02
6260
发布2020-04-22 15:08:02
举报
文章被收录于专栏:EAWorldEAWorld

产品经理

4/18 9:00

做个需求,监听一下用户今天说过哪些关键词(商品),等它打开App的时候精准推送给它,三天上线可以吧?

‍‍‍‍

4/18 9:01

。。。。。。

开发

4/21 9:00

为什么我每次刚说完要买什么东西,再打开购物软件时,首页总是会无比惊悚的来一个精准推荐呢?它们肯定偷听了!

4/21 9:01

嘘,少胡说八道。

读书人的事,那能叫偷嘛。

产品经理

哼,早晚抓它们进去陪张三!

每当跟朋友聊天说到什么商品后,再次打开某条某宝就会看到一些精准的推荐,好像App“听”到了我们的谈话一样,相信很多小伙伴都感同身受。

到底App有没有悄悄地监听呢?

洗白开始

心理学中有一种叫做"孕妇效应”,就是当人怀孕了就更容易发现孕妇,你开了奔驰就更容易看到奔驰,你拎个LV就发现满大街都是LV。

其实App首页每天都有包包,你今天恰巧跟同事说到要买,回去再打开某宝发现居然真的给你推荐了包包?

好像也像那么回事。

继续诡辩

首先,想要录音App总得有录音权限吧,你来教我在哪里申请权限?

第二,录音得到的数据是离线处理还是传到后台处理呢,就算以低码率录音,每天也要产生至少1个G的录音数据。

第三,用户群体中不说普通话的用户比例有多少,目前语音识别率在我们日常对话的场景里还不够,更别说方言了。

第四,对于每天都在进化的国产系统,长时间使用录音接口,最新的MIUI是会弹窗提示的,弹窗点进去还可以一键关闭当前App的录音权限,不要小看了这些厂商的安全能力。

第五,大多数公司都有自建的基于用户习惯等维度的推荐系统,有着完备的用户画像,你非要这么玩,事情败露了你担得起吗!

真没问题?

在当今移动互联网环境下,想要证实或者证伪都很有难度,所以只能希望大家相信大厂,相信科技向善,相信王欣,相信......除非找到了代码实锤。

实现原理

不管大厂有没有做,我们仍然对此好奇从技术上能否实现这一操作,让我们来看一下可行的方案。

方法A

App借助比如发送语音、语音搜索、语音输入等功能获取到录音权限,之后就在后台间歇性启动录音,并识别其中的关键词,推荐系统获取到关键词之后就可以进行精准推荐了。

由于App申请权限只有第一次会弹框给用户确认, 所以获取权限之后可以随意启动录音。

当然,也可以App启动时申请录音权限,不同意就退出应用,呵呵,真想打死你。

方法B

大数据背景下的数据共享。

App不去主动监听用户的谈话内容,可以向已经窃听到相关数据的厂商付费购买,App之间共享数据在技术上是很成熟的,那么手机里只要有一款App获取到敏感数据,你的隐私将不复存在。

说的好听是"数据共享",实际上不就是出售用户数据嘛,做的那么过分,真当黑哥不接单的?

欢迎大家把怀疑的App发在评论区~

我先来,XX输入法

方法C

加速度传感器窃听。

“加速度传感器是目前智能手机中最常见的一种嵌入式传感器,它主要用于探测手机本身的移动,常见的应用场景包括移动检测,步数统计和游戏控制等。”

由于声音信号是一种由震动产生的可以通过气态,液态,固态的各类介质进行传播的声波,而手机扬声器发出的声音会作用在手机上引起震动,这种震动可以被手机上的加速度传感器灵敏的捕捉到,因此可以通过加速度传感器的数据提取出关键字信息。

这并非耸人听闻,由浙江大学、麦吉尔大学、多伦多大学团队共同发表了有关加速度传感器窃听的成果(https://dwz.cn/dgkygjzH),经过测试,关键词的识别准确率达到了90%。

更加可怕的是在现行法律下,采集智能设备传感器数据这一行为并不违法,这也就意味着这种窃听方式目前还处于法律的灰色地带。而且在智能手机上获取传感器数据对于用户来说是无感知的,无需用户确认便可以获取相关权限。

实践

接下来,我们将就方法A搭建项目并实现,项目源码会放在结尾处。

使用到的技术

本次实践使用PermissionAnywhere进行录音权限的申请(请参考《如何优雅地申请Android运行时权限》),百度语音识别sdk完成录音转文字,使用Blob云数据库实现数据上传云端。

权限

使用PermissionAnywhere申请录音权限

(https://github.com/mingyuers/PermissionAnywhere)

代码语言:javascript
复制
PermissionAnywhere.requestPermission(this, new String[]{Manifest.permission.RECORD_AUDIO}, new PermissionCallback() {
    @Override
    public void onComplete(List<String> grantedPermissions, List<String> deniedPermissions, List<String> alwaysDeniedPermissions) {
        if (grantedPermissions != null) {
            //开始录音
            start();
        }
    }
});

(左右滑动查看全部代码)

录音及识别

使用百度语音识别的sdk,将录音转化为文字

代码语言:javascript
复制
private void start() {
    asr = EventManagerFactory.create(context, "asr");
    Map<String, Object> params = new LinkedHashMap<String, Object>();
    String event  = SpeechConstant.ASR_START; 
    params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
     params.put(SpeechConstant.PID, 1537); // 中文输入法模型,有逗号
    String json = new JSONObject(params).toString(); // 这里可以替换成你需要测试的json
    asr.send(event, json, null, 0, 0);
}

(左右滑动查看全部代码)

上传

上传阶段我们使用了Bmob的sdk,直接将录音得到的数据上传到云数据库。

代码语言:javascript
复制
public void upload(String str) {
    RecordBean recordBean = new RecordBean("q8", str);
    recordBean.save(new SaveListener<String>() {
        @Override
        public void done(String s, BmobException e) {
            Log.d(TAG, "done: " + s);
        }
    });
}

(左右滑动查看全部代码)

效果

我们可以看到,申请到手机录音权限后,将手机放在一旁,只要我们在说话,App就会录音并识别出来,也可以按需求提取其中的关键字,识别率还是不错的。

代码下载地址

以上完整代码已开源到:

github[https://github.com/mingyuers/FuckRecord]

先说好,仅供大家研究学习。<手动狗头>

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 EAWorld 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档