|
我蹲在工地的鱼泡钢筋堆旁,盯着手机屏幕上的网破“查看联系方式”按钮。点了三次,解隐每次都弹出“请下载APP”的藏号提示。旁边老张递过来一根烟,鱼泡说:“别费劲了,网破这平台上号码都是解隐虚拟的,不充会员根本看不到。藏号” 鱼泡网这个招工平台,鱼泡在建筑工圈子里用的网破人不少。但它的解隐隐藏号码机制确实让人窝火——你看到一条“招水电工,日结350”的藏号信息,想打电话问两句,鱼泡系统告诉你得先注册、网破再实名、解隐最后还得开通某种会员服务。我试过用网页版直接抓包,发现接口返回的手机号中间四位全是星号。 破解思路其实不复杂。网站前端渲染时肯定拿到了完整号码,否则无法实现点击拨号功能。问题在于它怎么藏的。我打开开发者工具,在Network面板里翻找XHR请求,发现一个叫get_contact_info的接口,响应里有个加密字段。尝试用AES解密,密钥藏在另一个JS文件里,但代码做了混淆。 折腾了半小时,我换了个思路——不碰加密,直接看DOM。点击“显示号码”按钮后,页面会短暂出现完整号码再被替换成打码版本。这个替换过程有几百毫秒延迟。我用脚本监听DOM变化,在节点被修改前把textContent抓下来,还真成功了。完整号码在内存里存在过,只是被快速覆盖。 后来我发现更笨但有效的方法:用安卓模拟器装老版本APP。鱼泡网2.7.3版本的接口没做加密,直接明文返回手机号。装上旧版,登录账号,搜索工种,点开详情——号码清清楚楚躺在JSON里。这不算什么高深技术,就是版本迭代时遗留的后门。 但问题来了。就算拿到号码,打过去经常是空号或者关机。后来才懂,平台对发布者也做了保护——发布者可以选择“仅限平台内联系”,这种情况下号码是临时生成的虚拟号,有效期24小时。破解了前端加密也没用,服务器端压根不给你真号。 真正管用的办法反而简单:看发布时间。那些早上6点发的招工信息,多半是工头本人早起编辑的,这种通常没开虚拟号保护。我试着直接拨打页面上显示的企业认证电话——那个号码不隐藏,能打通,但接电话的是平台客服,转接要等两分钟。 老张看我折腾半天,乐了:“你不如直接去工地门口蹲着。这平台上的活,十个有八个是附近工地发的。”他掏出手机给我看——他在微信群里加的本地建筑交流群,每天有人直接甩号码出来,根本没经过鱼泡网。 这让我意识到,所谓破解,很多时候是在跟平台的产品设计较劲,而不是跟技术较劲。鱼泡网靠隐藏号码赚会员费,但真正干活的工人早就找到了绕开它的路径——线下关系网、行业微信群、甚至工地门口的小卖部公告栏。平台以为自己掌握了信息壁垒,实际上一线工人用脚投票,把真实的联系方式都搬到了平台外面。 最后我留了个心眼。把那个旧版APK存到了网盘,又记下了抓DOM的脚本。但说实话,下次找活我大概率直接去老张说的那个微信群问一嘴。破解隐藏号码的成就感,远不如工友群里一句“明天来我这儿,缺两个人”来得实在。 |