146(上)
到杭州的第三天,雨晴才真正适应了这边的节奏。
每天早上醒来,窗外不是郑州的灰蒙蒙,而是杭州的绿。梧桐树的叶子伸到窗前,阳光透过树叶,在窗帘上印出一块一块的光斑,风一吹,光斑就晃,像水波。橘子皮比她醒得早,蹲在窗台上看外面的鸟。这里的鸟比郑州多,叫声也不一样,婉转一些,像在唱歌。雨晴躺着听了一会儿,鸟叫声、蝉鸣声、楼下早餐店锅铲碰铁锅的声音,混在一起,不吵,反而让人觉得安稳。
小叶子已经去上班了。她走的时候雨晴还在睡,只听到门轻轻关上的声音,然后是下楼的脚步声,一声一声,远了。床头柜上留着一张纸条:“姐,粥在锅里。晚上想吃什么发消息。”字写得歪歪扭扭的,但能看清。雨晴把纸条折好,放进抽屉里。抽屉里已经有好几张了,都是小叶子留的。她没扔。
起来洗漱。水龙头的水比郑州的软,洗在脸上滑滑的。她对着镜子看了看,头发又长了,快到肩膀了。扎了个低马尾,皮筋绕了三圈才紧。换了件白色T恤,浅灰色的短裤——杭州比郑州热,穿不住长裤了。去厨房盛粥。小米粥,稠稠的,还温着。锅旁边放着一碟榨菜、一个咸鸭蛋、一小碗炒好的雪菜笋丝。小叶子早上起来炒的。
雨晴端着碗站在窗前吃。橘子皮从窗台上跳下来,蹭她的腿,毛茸茸的脑袋在她小腿上拱来拱去。
“你吃了吗?”雨晴低头看猫。橘子皮喵了一声,声音不大,但很执着。食盆里有粮,水盆里有水,但猫就是要叫。雨晴蹲下来看了看食盆,还有大半碗。但她还是从柜子里拿了一个罐头,打开,倒进碗里。橘子皮低头吃,吃得吧嗒吧嗒响,胡须上沾了肉泥。
坐到书桌前,打开笔记本。周正平昨天发了一个新项目的资料,她还没来得及细看。车联网安全测试,车载娱乐系统的APP。报酬七千,比之前的高。她打开文档,从头开始看。需求文档写了二十几页,她一行一行地读。车载系统、T-Box、CAN总线、OTA升级、蓝牙配对、WiFi传输。大部分词她都没见过。
在群里发了一条消息:“有人做过车联网的测试吗?”
深海鱼秒回:“没。那个挺偏门的。”
“难吗?”
“难。但做好了值钱。你接的这个多少钱?”
“七千。”
深海鱼发了一个猫震惊的图。“那值了。你慢慢啃,啃下来就是你的。”
小叶子(杭州)冒出来了:“姐,你在做新项目?”
“嗯。车联网的。”
“加油!”
洛神说:“车载那块我也接触过一点,主要是APP和车机的通信。你有需要我可以发你一些资料。”
雨晴说:“好。”
洛神发了一个网盘链接。雨晴点开,里面是几个PDF,还有一篇论文。她粗略翻了翻,决定晚上再细看。
关掉群,打开浏览器,开始搜资料。搜了一上午,收藏了七八篇技术文章、两个开源项目、一个CTF的车载题目。橘子皮在她腿上睡了一觉,醒了,跳下去吃粮,又回来跳上腿。雨晴摸了摸她的背,毛很软,温度比人的高一点。
中午自己煮了面。小叶子的厨房不大,但东西挺全。灶台上摆着油盐酱醋,抽屉里有面条、粉丝、木耳、香菇。她下了半把挂面,打了个蛋,加了几片青菜,滴了几滴香油。端着碗坐在书桌前吃,一边吃一边看文章。面吃完了,汤也喝了,文章看了一半。
下午,继续看。看到第三篇的时候,终于明白了车载APP和普通APP的区别。普通APP跑在手机上,车载APP跑在车机上,但很多功能是通过手机和车机的互联实现的。比如远程启动、开空调、锁车门、查位置。漏洞可能出现在这个互联过程里——蓝牙配对时的身份验证、WiFi传输时的数据加密、云端API的权限控制。
雨晴在笔记本上列了几个测试思路:
蓝牙配对——是否可被中间人攻击
WiFi传输——数据是否加密,证书是否校验
云端API——越权、注入、签名校验
固件升级——是否签名,是否可降级
写完之后她看了看,觉得第一条和第三条可以同时进行。先测云端API,因为之前做过类似的,有经验。
手机震了。林听夏发的消息:“在干嘛?”
雨晴拍了一张笔记本的照片发过去。“做新项目。车联网的。”
林听夏:“看得懂吗?”
“在学。看不懂。”
“那你加油。”
“嗯。”
两个人沉默了一会儿。雨晴看着对话框,林听夏的名字下面显示“对方正在输入”,停了,又没了。她想问“你一个人在家习惯吗”,但又觉得问了也没什么意义。不习惯也得习惯。
林听夏发了一条:“猫怎么样?”
“挺好的。在小叶子腿上。”
“她让别人抱了?”
“嗯。但还不让你抱。”
林听夏发了一个句号。雨晴看着那个句号,知道林听夏在想什么——猫在杭州让别人抱了,但回郑州还是不让她抱。她没解释,也不知道怎么解释。
小叶子下班回来的时候,雨晴还在写测试方案。小叶子换了鞋,凑过来看屏幕。“姐,你还在忙?”
“嗯。写方案。”
“吃饭了吗?”
“没。”
“走,出去吃。今天不做饭了。”
两个人下楼。小叶子带她去了一家新开的店,在巷子口,卖煲仔饭。店里不大,坐了几个人,墙上贴着菜单,手写的,字挺好看。小叶子点了两份腊味煲仔饭,加了个窝蛋。等饭的时候,小叶子说“今天店里来了个奇葩客人”。
“怎么了?”
“买了一杯咖啡,喝了一半说太苦了,要退。我说不能退,她骂了我十分钟。”
“然后呢?”
“店长来了,给她退了。”小叶子叹了口气。“这种人每天都有。”
“你习惯就好。”
“习惯了。但每次还是生气。”
饭来了。煲仔饭用砂锅装着,端上来的时候还在滋滋响,香气冒出来,混着腊味的油香和锅巴的焦香。小叶子拿勺子把蛋和饭拌匀,推到雨晴面前。雨晴吃了一口,饭焦脆脆的,腊味很香,鸡蛋裹在米饭上,滑嫩。
“好吃吗?”小叶子问。
“嗯。”
“比你那边呢?”
“不一样。”
小叶子笑了一下。“我前两天给家里打电话,我妈说家里的猫生了一窝小猫,问我要不要。我说我在杭州怎么养。她说那你自己看着办。”
“你家也有猫?”
“嗯。一只白猫,养了好多年了。比你家橘子皮瘦多了。”
“橘子皮太胖了。在减肥。”
“减下来了吗?”
“没有。之前瘦了二两,又胖回去了。”
小叶子笑出了声。“你家猫跟你一样。”
“哪里一样?”
“看着瘦,其实有肉。”
雨晴没接话。
吃完饭,两个人慢慢往回走。巷子里的路灯亮了,橘黄色的光照在石板路上,影子拉得很长。梧桐树的叶子在头顶沙沙响,风从巷口灌进来,凉凉的。小叶子走在前面,步子轻快,马尾一晃一晃的。雨晴跟在后面,看着她。
“姐,你明天还做项目?”小叶子回头问。
“嗯。想尽快测完。”
“那你白天一个人在家,无聊吗?”
“不无聊。有猫。”
“猫又不会说话。”
“她会叫。”
小叶子笑了一下。
到家,橘子皮在门口蹲着。看到雨晴进门,站起来伸了个懒腰,前爪往前伸,屁股撅得老高,然后走过来蹭她的腿。小叶子蹲下来摸猫的头,橘子皮没躲,但也没蹭她。
“她今天在我腿上睡了一下午。”小叶子说。
“她不闹?”
“不闹。就是打呼噜,声音可大。”
雨晴换了鞋,去厨房倒了杯水,坐到书桌前。小叶子也搬了把椅子坐在旁边,看她写方案。
“姐,你那个车联网项目,做完能赚多少?”
“七千。”
“这么多?”小叶子眼睛亮了一下。“你一个月能做几个?”
“不一定。有时候一个,有时候两个。”
“那你一个月比我在便利店干半年还多。”
雨晴没接话。
“姐,你以后是不是会很有钱?”
“不知道。够用就行。”
小叶子没再问了。她坐了一会儿,站起来去洗澡了。浴室里传来水声,哗哗的。橘子皮从地上跳上书桌,趴在雨晴的笔记本旁边,尾巴垂下来,一下一下地扫。雨晴把尾巴拿开,又扫过来,拿开,又扫过来。
晚上,群里在聊上海聚会的事。
小叶子(杭州)在群里喊:“八月上海聚会,到底能不能成啊?我钱都存好了。”
洛神说:“我周末都行。提前跟我说就行。”
慕瑶:“南京过去很近,两小时。你们定好时间我就能来。”
深海:“我在东北,太远了。你们聚吧,多拍照。发群里让我看看。”
何意味:“我也想去,但没钱。下个月还要交房租。”
小叶子(杭州)说:“你借钱。”
何意味发了一个猫流泪的图,配文“穷”。
洛神说:“你可以住我那边,省住宿费。”
何意味:“真的吗?”
洛神:“嗯。打地铺。”
何意味发了一个猫点头的图。
小叶子(杭州)在群里@雨晴:“姐,你问林姐了吗?”
雨晴想了想,打了一行字:“问了。她说八月初可以。”
小叶子(杭州)发了一个放烟花的表情包。“定了定了!”
洛神说:“那确定时间吧。8月5号?周六。”
慕瑶:“可以。”
小叶子(杭州):“可以!”
雨晴:“我问问林姐具体排班。明天定。”
晚上躺下。关了灯。窗外的路灯亮着,光透过窗帘,在天花板上画了一道细细的线。和郑州一样,又不一样。郑州的灯更亮一些,杭州的灯更暖一些。雨晴翻了个身,摸着橘子皮的背。猫的呼噜声在房间里响着,闷闷的,很有节奏。
“姐。”小叶子在地铺上叫她。
“嗯。”
“你那个林姐,她一个人在郑州,不会想你吗?”
雨晴沉默了一会儿。“会。”
“那她为什么不来杭州?”
“她上班。走不开。”
“那你们什么时候才能住一起?”
雨晴想了想。“不知道。”
小叶子没再问了。过了一会儿,雨晴听到她的呼吸变均匀了。雨晴拿起手机看了一眼,快十一点了。林听夏发了一条消息:“今天怎么样?”
雨晴回:“挺好的。测试方案写了一半。”
“猫呢?”
“在小叶子的腿上睡了一下午。”
林听夏发了一个句号。过了一会儿,又发了一条:“她让不让我抱已经不重要了。”雨晴看着那行字,心里有点酸。她打了几个字:“回郑州她就让你抱了。”林听夏说:“不信。”
雨晴没回。
窗外的蝉叫了。杭州的蝉叫得慢,一下一下的,像在数拍子。不像郑州的蝉,叫得急,叫人心里烦。雨晴把手机放到枕头旁边,闭上眼睛。明天开始测云端API,先把测试环境搭好。然后写测试用例。然后录屏截图。一步一步来。
她翻了个身。橘子皮被她吵醒了,哼唧了一声,从她脚边走到腰旁边,盘下来继续睡。雨晴把手搭在猫背上。
想着林听夏说的“她让不让我抱已经不重要了”。其实重要的。雨晴知道林听夏在意。她只是不说。
窗外的路灯还亮着。她不知道什么时候睡着的。