本博客为本人学生时代的技术博客,工作后10年已经不再更新,需要关注可以访问geekpm.com,点击访问!

转:技术宅逆天了!如何从按键音中听出周鸿祎的手机号码

先说明一下,本人不是专业学这个的,对基本的理论知识一窍不通,只是突发奇想,做了下research,按直觉试试看,结果真的猜中了,搞这个纯属蛋疼=。=

昨天优酷首页关于360和百度的搜索战的报道中放出了这么一个视频:

从视频的第33秒到43秒,我们可以清晰地听到优酷记者给周鸿祎拨号的整个过程,的确用人耳听会觉得每个音都差不多(下面会解释原因),但是将它们转化成图形以后,就可以很清楚地看到它们的差别了。

我们先用ffmpeg将这段声音截出来,转成PCM Signed 24位的单声道wav文件,然后用Adobe Soundbooth打开它:

Image

绿色那部分是波形图(waveform),绿线和横轴交点的密度代表频率(音调),一个周期内最高点和最低点的距离代表振幅(响度),但是这种图丢失了很多信息,我们用不上;

下半图是加上时间后的频谱图(sound spectrum),事实上,我们听到的每个声音,它的每一小段都是由很多个不同强度和不同频率的声音(note)组成的。下半图很好地展现了这些信息,横坐标代表了时间,而纵坐标则代表频率,颜色代表强度(深色弱浅色强),故下半图中的一个点,表示的是在某个时间点上,某个频率的声音的强度;从上图中我们可以很清晰地看到11根由黄色和红色组成的“柱子”,估计你也猜到了,就是按那11个数字的时候产生的按键音;

接下,要介绍DTMF(Dual-Tone Multifrequency):

Image(1)

我们平常所用的电话,是通过DTMF信号来向交换机传递命令的,我们每按下电话键盘上的一个键,就会同时发出两个不同频率的声音,转化成电流在对面解析(可以回忆柯南剧场版中通过唱歌拨电话)。也就是说,记者按下的每个键的声音,实际上是由两个纯粹的音(tone)构成的,通过上表可以看到每个数字由哪两个频率的声音构成,接下来就好办了:

我们将400Hz到1700Hz以内的频谱图放大,然后找出浅色(强度高)的频率段:

Image(2)

周总的手机号是:1370**9**98

注:1、因为音频的质量,开头的数字1无法从频谱图中得出,但是地球人都知道中国大陆手机号开头是1;

      2、最后的“8”,因为必须由一个高音构成,虽然不明显,但是相比1477Hz和1209Hz,1366Hz最强;

      3、下面的一片黄色,是环境音和座机按键的机械声音造成的,当发出否个频率的声音时,黄色会散布在频率线的两侧,故中间的数字“9”的低音,选择的是852Hz而不是941Hz;

      4、因为这只是个实验,所以就不把号码全公布出来了,于是将某些数字的频谱区域打了马赛克,数字标记为“*”

怎么验证结果正不正确呢?我做了下面几个测试:

1、号码归属地:

Image(3)

2、我在手机上按了一遍号码,并把它录下来了,结果完全一样:

3、晚上十点,我打了个电话给他:= =

我:“喂,您好,请问是周先生吗?”

他:“我在开会,你有事吗?”

(我当时很紧张,完全不知道怎么说)

我:“抱歉我打错了”

(然后就把电话挂了,当时好纠结没有问“请问您是360的周先生吗”这样=。=)

4、关键证据,Google了一下电话号码,因为防止里面的信息被用来作为关键字再Google出号码,所以打了很多马赛克

Image(4)

另外,自己录了一段工商银行“95588”的拨号音,因为是触摸屏按的,没有机械声音,很纯正:

Image(5)

最后的话:

1、不要用来做坏事- -,投诉的话请打360的客服

2、我们平常用手机拨号,或者在门禁处或者一些机器上输入密码的时候,千万要注意身旁有没有人录音,通过上面的例子你们也会发现,除非有人在现场唱美声,否则输入的整个过程是可以通过声音被还原出来的;

3、电视媒体要注意了=。=,拨给公众人物的时候,不要把拨号过程也放出来,通过刚刚实践可知这是很危险的;

4、奇虎和百度两家公司怎样,大家心里面都明白 。

posted @ 2012-09-01 09:11  emouse  阅读(1858)  评论(0编辑  收藏  举报