毫无疑问,微信已成为人们互相沟通、传播消息的主流手段之一,因此保护微信聊天记录的重要性越加明显。
让隐私保护用在实处
Android 手机用户对各大主流安全软件的“私密联系人”功能十分熟悉,这个功能可以把一些联系人的通话记录、短信内容保存在一个特殊的地方,输入密码才能看到。但通 过观察不难发现,这个功能十分鸡肋。原因在于,用户每天使用传统短信应用发消息的数量少之又少,而使用微信发送的消息则多而又多。在为数不多的使用传统短 信的情况下,有多少是具有高度私密性需求的呢?因此,私密联系人的想法是好的,但用错了地方。
前段时间上映的电影《北京爱情故事》想必很多 人都看过,王学兵饰演的出轨男吴峥以为把小三的名字改成“孙总”就万事大吉了,错!暧昧短信、大尺度视频都赤裸裸地躺在微信聊天记录里。这年头,治标不治 本是不行的。鲶鱼团队(由对安全感兴趣的各个公司的工程师,自发组成的移动互联网安全研究非商业兴趣小组)在某次集体观摩了该电影后,大受启发,突发奇 想,如果把“私密联系人”功能用于微信,让用户可以随时隐藏微信好友聊天记录,让保护隐私功能真真正正地被用在用户有强烈需求的地方不是更好吗?对于青少 年,不再担心微信中的聊天记录被父母发现;对于恋人,不再郁闷一言一行都被对方检查;对于一个社会关系“复杂”的商务人士,他的商业机密不会被竞争对手窥 探,他的“私人生活”不会被家中老小知晓;对于一个普通人,他终于可以在别人借手机时,不用担心别人“无意”看到他跟爱人的甜蜜聊天了。因此,保护微信聊 天记录,建立专属自己的“微信密友”,大有必要!
只是一个应用
“微信密友”功能由两部分组成:鲶鱼汇应用和微信应用。这里需要强调一点:密友功能绝不会修改微信应用,因此,我们提供的apk仅仅是“鲶鱼汇”而已,用户可以通过各种应用市场或官网下载微信应用(如图1所示)。
鲶鱼汇应用完成两个功能:1. 开启/关闭微信密友功能;2. 自动静默关注微信公众号“鲶鱼”。
启动微信密友功能后,微信中即可拥有以下所有功能:
1. 密友的隐藏与显示;2. 设置密友名单;3. 根据口令进入“显示密友模式”;4. 摇一摇退出“显示密友模式”;5. 用户自定义口令。
功能演示
进入微信好友聊天界面→长按某个好友会话列表→选择“隐藏该聊天”→摇一摇,被选择成隐藏的聊天记录就从界面上消失了。如图2所示。
技术也性感
也 许一部分读者的第一反应是:这是修改了微信应用吗?这里我可以给出一个明确的答复:没有!这款微信密友功能并不会修改微信原始应用,也不是一个插件。用户 仅仅需要下载一个鲶鱼汇应用,在其中开启微信密友功能即可。微信密友功能是在对微信内部编码逻辑有了一定的了解的基础上实施起来的。如何了解微信的内部构 造?答案是对微信应用进行逆向分析。这里需要读者对逆向分析、Java的Hook技术和注入技术有一定的了解。逆向分析本质上就是对一个apk进行反编译 并分析其代码逻辑。Inject即为注入,是指攻击者将自己编写的一段代码强行运行在另一个进程中的行为;Hook即为钩子技术,通过在关键函数中插入判 断代码,借此控制此关键函数的运行流程。
密友的隐藏与显示
从根出发:熟悉Android的读者自然会联想到,会话列表中某些会话的消失和出现对于UI层来说就是ListView中某些Item的无和有(或是不可见和可见)。这就是整个思路线索的根。
顺 藤摸瓜:有了根,就要抽丝剥茧出一条有价值的线索。ListView→ Adapter→Cursor→ContentResolver→ContentProvider→SQLiteDatabase,在UI上体现出来的某 些ListView的Item有和无,可通过在上述这条线索上的任何一点进行技术处理来达到。下面一一介绍。
方案一:修改ListView,将要隐藏的Item设置成GONE,如图3绿色部分。
方案二:修改Adapter,对Cursor行记录进行筛选,过滤某些行;修改Cursor,对查询到的Cursor进行包装或修改,过滤Cursor中的某些数据,如图3蓝色部分。
方案三:修改调用Content-Resolver.query()/Content-Provider.query()/SQLiteDatabase.query()的参数,如图3黄色部分。
设置密友名单
设置密友操作如下:长按某个好友会话,在弹出的菜单中单击“隐藏该聊天”,则该好友被设定为密友。在退出“显示密友模式”后,该密友聊天会被隐藏。
这 里涉及三个修改:1. 修改会话列表中某个item的长按点击事件;2. 修改菜单(长按item后弹出的菜单,需要为其新添加一个“隐藏该聊天”选项);3. 为菜单中新添加的“隐藏该聊天”选项添加响应事件。使用Hook技术中替换OnItem-LongClickListener对象的方法即可。
进入“显示密友模式”
密 友聊天记录是用户私密的信息,通常情况下是不会显示在微信聊天首页的。所以若想跟密友进行聊天,需要凭借用户设定的口令进入“显示密友模式”,做法是:在 微信会话页面的搜索框中输入口令(默认口令为“菠萝菠萝蜜”,用户可根据设置口令规则自定义口令,下文有介绍)后自动进入“显示密友模式”。这一步的原理 在于:拿到微信会话页面搜索框中输入文字EditText对象,为该对象添加一个TextWatcher,当EditText中的内容有任何改变 时,TextWatcher中的方法会被调用,在该方法中可以对EditText内容进行匹配,若为口令,则启动显示密友模式。
退出“显示密友模式”
退 出“显示密友模式”需要快、隐、稳,也就是用户跟密友聊天完了以后,可以快速地、神不知鬼不觉地让聊天记录消失。我们特别使用了“摇一摇”来完成退出“显 示密友模式”。目的何在?原因就在于微信的“摇一摇”深入人心,人尽皆知!“摇一摇”的功能是基于加速度感应器,通过上报X、Y、Z三轴的加速度来实现功 能。刚开始简单地实现为判断某个轴的加速度是否达到阈值,结果发现效果很不理想。最大的原因是不同型号手机的感应器灵敏度都不一样,这个阈值就很难设定 了。还有更坑的是某米手机,同一个型号的灵敏度差别都非常大。转念去试了一下微信的“摇一摇”,结果每个手机体验都非常棒,而且只有在倾斜45度角上下摇 之外,其他手势一般都不容易触发。后来又试了其他几个比较热的App的“摇一摇”,不比不知道,原来微信的“摇一摇”真的是用户体验最好的。
于是就地取材,逆向了微信的算法,每次计算是对X、Y、Z轴有个加权因子修正。Y轴权重最大,阈值也不是固定的,而是根据手机灵敏度在一个范围内动态调整,由于我们不需要这么灵敏,所以对阈值稍许做了调整。
保 证了算法,接下来的事情就水到渠成了。在微信MainUI activity的onStart()和onStop()中添加SensorEventListener,监视手机“摇一摇”状态,上手体验果然非常好。 当微信处于前台且手机摇一摇触发时,根据新的黑名单触发刷新UI,隐藏密友会话列表。
更多电脑IT ,欢迎进入良师益友网
Hack微信为什么要加强安全
评论
1 views