垃圾短信拦截

由于长期被各种电商推广、贷款中介、积分兑换钓鱼等等垃圾短信和贷款中介来电骚扰,决定采取行动拦截掉这些诈骗、骚扰、垃圾短信和电话。听闻很多Android系统都有智能电话助理,能自动接听电话,能和诈骗犯唠嗑,真是有点羡慕。iOS系统可没放开这种权限,仅提供了短信过滤接口,不过对于识别垃圾短信足以,因为API提供了短信发件人和短信内容以及时间,有这三个信息足够判断短信是否为垃圾短信以及根据时间可以判断是否为短信轰炸行为。而来电识别功能,iOS仅仅提供一个离线被动式的方式,开发者提供具体的电话黑名单(比如18000000000,18000000001)以及目录(某号码对应的名称,比如12345对应的标签为上海市民热线,02110086对应上海移动),当有电话呼入时,比如18000000000,系统会在数据库里查询,这个数据库是一个大合集,来自用户在手机上安装的所有提供来电识别功能的App所提供的所有电话黑名单和目录。比如腾讯、360、国家反诈中心等都提供了来电识别数据库。

1.未知与过滤信息

设置方法

设置 > 信息 > 未知与过滤信息

⚠️ 只用选择一个App来识别和过滤垃圾短信,不能同时使用多个

原理

大部分短信分类软件都使用了两种策略来对短信分类,一种策略是基于关键词匹配,另一种是使用机器学习方法通过收集一些短信数据,将它们手动标记为垃圾短信和正常短信,也可以进一步细分,比如垃圾短信可以再细分为广告营销、诈骗、色情暴力、违法犯罪等等细分类型,正常短信也可以细分为订单交易、快递物流等细分类型。两种策略各有利弊。关键词匹配策略,使用起来很简单,但是需要精心挑选关键词,比如“验证码”、“快递单号”、“订单号”这一类的关键字一般都是正常的短信,而“优惠券”、“积分”、“兑换”、“积分兑换好礼”、“备用金”、“利率”等等大概率是垃圾短信。当然这样有可能会误伤一些正常短信,也可能漏掉一些垃圾短信。而另一种使用机器学习训练文本分类模型的策略,收集训练数据、标注数据则非常花费时间,最终模型的识别准确率则取决于训练数据的丰富程度以及实时性。网络上比较流行的一个中文短信数据集是80万条已标注的数据,我也使用了它,但是用它训练出来的模型,对现在的垃圾短信识别准确率比较低,我查看了一下它的内容,发现那些短信看起来像是10多年前的甚至更久远的,然后里面的正向语料其实并不是短信内容,看起来像是以前的报纸文章之类的文字断句之后的内容。当然这些语料用作正向样本没问题,相当于是增强数据集了。否则单靠收集真正的短信内容,正向样本和反向样本的比例估计会严重失衡。

为了解决训练数据问题,我研究了一下如何将我手机里的短信全部导出,并标注它们,用它们和那80万条数据一起训练一个新的模型,识别准确率有极大的提升。考虑到每个人收到的垃圾短信可能有差别,我的模型对其他人收到的垃圾短信可能准确率并不高,所以还是需要不断收集更多的样本数据,不断地更新模型。同样的,垃圾短信模版也在不断进化,并不是一成不变的,模型也要不断更新。

还有一个比较重要的问题,那就是需要不同语言的短信数据集。我目前仅仅有80万+6000条我自己收集的中文短信,还有一份学术界开源的英文短信数据集,一共5574条,其中4,827 是正常短信 (86.6%) , 747条 (13.4%) 是垃圾短信,http://www.dt.fee.unicamp.br/~tiago/smsspamcollection/。感谢作者开源。不过这些数据也有一定的年份了,对现在的短信识别准确率估计也不太行,所以还是需要想办法收集目前比较流行的垃圾短信样本。

我开发了一个macOS App,可以解析macOS上的iPhone备份文件,并将里面的数据导出,然后再使用SQLite软件打开短信数据库sms.db,然后导出短信内容,将其标注,再使用Apple提供的机器学习模型训练工具,训练处一个短信分类模型,在app中使用。

iBackupExplorer

软件目前是收费的,这里https://www.iamadman.com/2023/02/28/ibackupexplorer-promo-codes/有优惠码

2.上报短信/来电

iOS系统开放了上报功能,让手机用户可以在“信息”、“电话”两个app中将短信和来电记录上报到app开发者的服务器。当然这个功能可能会泄露隐私数据,主要是上报短信时,短信的发送者号码、短信的完整内容都将上报到app开发者的服务器。所以在使用上报短信功能时,用户可以权衡一下,看看短信内容是否保护隐私数据,如果有,则不要上报。如果不包含隐私数据,则可以上报。

设置方法

短信/来电报告

上报短信-入口

在“信息”app中,所有未知发件人的短信底部都有“报告垃圾短信”的按钮,如下图:

上报短信-界面

在这个界面,你可以选择将此短信标记为“垃圾”或者“非垃圾”,如果是“垃圾”短信,则需要选择一个分类,是“广告推销”、“诈骗”还是其他类型。此外还可以选择将此号码标记并拦截,如果标记并拦截此号码,那么此号码的来电和短信都不会有任何提示。

3.来电阻止与身份识别

如前文所说,此功能可以同时使用多个app提供的电话号码数据库,应该是考虑到不同app收集到的电话号码可以起到互补的作用吧。

我开发的“短信来电过滤”app目前收集的数据仅仅只是各种可信的官方号码,比如5位数的号码,12345,95555,95533,还有一些400xxx开头的服务号,具体可以看下图:

此数据来自metowolf/vCards: 📡️ vCards 中国黄页 – 优化 iOS/Android 来电、信息界面体验 (github.com),我将它原本的yaml格式的数据转换成我需要的格式,然后导入到app中,用于提供电话黄页功能。感谢作者metowolf。

而负面的骚扰电话号码数据库,我暂时还没有找到比较可靠的数据来源。仅仅靠我自己收集肯定是不够用的,所以app暂时不能提供防骚扰功能。只有电话黄页功能,而且数据需要不断更新。因为诈骗犯和骚扰犯们的电话号码是不停地变化的。

但是app允许用户自己添加号码标识和拦截黑名单。如下图:

添加黑名单

留下评论