132
周正平的新项目发过来的时候,雨晴正在给橘子皮梳毛。
猫躺在她腿上,肚皮朝上,四只爪子蜷着,眯着眼睛,呼噜声很大。雨晴用梳子从脖子梳到肚子,梳下来一团橘色的毛,粘在梳子上,一团一团的。手机震了,她看了一眼,周正平发的消息:“新项目,移动端安全测试,Android APP。客户是做金融的,要求高。报酬六千。能做吗?”
雨晴把梳子放下,橘子皮哼唧了一声,翻了个身。她回了一个“做”。周正平很快发了资料过来。她点开看了看,一个APK文件,几十兆。还有一些文档,客户的需求说明。她翻了几页,客户要求测的内容很多:数据传输加密、本地存储安全、组件暴露、权限滥用、反调试、代码混淆。好几个词她听过,但没实际测过。
她打开浏览器,搜了一下“Android APP渗透测试”。出来一大堆。她挑了篇看起来靠谱的,从头开始看。环境搭建、抓包配置、反编译工具、常见漏洞类型。看了半小时,大概知道要装哪些东西。下载了JDK、Android Studio、Burp Suite的CA证书,一步步配置。中间卡在模拟器上,装了半天才跑起来。橘子皮从沙发上跳下来,走到她脚边蹭了蹭,她没理。
周五晚上,林听夏来的时候,雨晴还在对着电脑屏幕发呆。Burp已经配好了,但APP有证书绑定,抓不到包。她在网上搜了一圈,试了几个方法都不行。
“吃饭了?”林听夏站在厨房门口。
“还没。”
“先吃饭。”
雨晴把笔记本合上,去厨房。醋溜土豆丝,番茄蛋汤。两个人坐下来吃,雨晴吃得快,吃完又坐到书桌前。林听夏收了碗,洗了碗,走过来站在她身后。
“什么项目?”
“移动端的。APP有证书绑定,抓不到包。”
“那怎么办?”
“不知道。正在查。”
林听夏没再问了,拿了包。“我走了。”
“嗯。”
门关上了。雨晴继续查资料。翻到一个帖子里说可以用Xposed框架绕过证书绑定,但需要root手机。她没root的手机,又在网上搜了搜,发现可以用VirtualXposed,不用root。下载安装,折腾了一个多小时,终于配好了。抓到了登录请求。她呼了一口气,靠在椅背上。橘子皮跳上书桌趴在她面前。
“好了。”她说。橘子皮打了个哈欠。
周六上午,雨晴开始正式测试。先测了数据传输。登录请求里看到了用户名和密码,明文传输。她截了图,记下来。再测本地存储。用RE管理器查看APP的数据目录,发现一个SQLite数据库文件,里面存了用户的手机号、地址、历史订单。没有加密。继续测组件暴露,用drozer扫了一遍,发现一个Activity可以被外部调用,直接跳过了登录页。她把测试步骤一步步记录下来。
中午何意味发消息问“姐,晚上要不要出来吃饭”,雨晴说“今天没空,项目还没做完”。何意味发了一个猫委屈的图。下午测到反调试的时候卡住了。APP检测到调试就闪退。她试了几种绕过方法:改系统属性、用反反调试插件、动态调试时暂停检测线程。都不行。花了两个小时,最后找到一个Xposed模块专门用来绕过反调试,装上之后终于不闪退了。
晚上,群里小叶子在问“周末干嘛呢”,雨晴说“做项目,移动端的”。小叶子说“我也想学移动端”,雨晴说“你先学基础”。小叶子发了一个猫低头的图。洛神说“移动端比Web难”,雨晴说“嗯,东西多”。深海发了一张猫看书的图。慕瑶说“你们说的我都听不懂”。
雨晴又看了会儿文档,发现客户还要求测一下代码混淆。她用jadx反编译APK,代码没有被混淆,类名和方法名都是可读的。记下来。建议客户使用ProGuard。
周日晚上,雨晴把报告写好了。发了十几个漏洞,严重程度高的有三个:明文传输、本地数据库未加密、Activity绕过登录。修复建议写得很详细。发给周正平,周正平回了一个“收到”。
周一中午,周正平打电话来了。
“客户看了你的报告,说有几个问题没看懂。”
雨晴在走廊上接电话。“哪个?”
“那个组件暴露的。他说‘Activity是什么’。”
雨晴沉默了两秒。“就是个页面组件。暴露了就能绕过登录。”
“你写通俗一点。客户不是技术出身。”
挂了电话。雨晴回到教室,把报告打开,找到那条漏洞描述,删了,重新写。把“Activity”改成“页面”,把“组件暴露”改成“不该被访问的页面可以被外部程序直接打开”。写完之后发给周正平。
下午,周正平又打电话来。“客户说还是没看懂,让你再改改。”
雨晴看着手机屏幕上的通话记录,深呼吸了一下。群里深海鱼说过一句话——“甲方说‘看不懂’等于‘你没说人话’。”她打开报告,把整个漏洞描述删了,重写成三段:第一段,做了什么操作。第二段,发生了什么安全问题。第三段,怎么修。不要术语。发过去。
周二,周正平发来一条消息:“客户确认了。钱下周五到。”
雨晴看着那行字,回了一个“好”。群里小叶子在问“项目做完了?”,雨晴说“做完了。甲方说看不懂,改了三遍”。深海鱼发了一个猫捂脸的表情,“经典甲方”。洛神说“你让他自己写”。小叶子说“姐你脾气真好”。雨晴没回。
周三中午,雨晴收到一条微信。不是群里的,是郑州的那个小叶子。之前在便利店打工的那个,学HTML学了几周放弃了的那个。她发了一条语音,雨晴点开听。“姐,你最近有空吗?想跟你聊聊。”
雨晴打了几个字:“怎么了?”
“想换个工作。郑州工资太低了。”
“你想去哪?”
“不知道。可能去外地。”
“周六下午。小区门口面馆。”
“好。”
周六下午,雨晴到面馆的时候,叶子已经在了。她穿着那件奶茶店的工作服,白色T恤,绿色围裙,头发比上次见长了一点,扎了个低马尾。她面前放着一杯水,没喝,手指在杯子上蹭来蹭去。
“姐。”她叫了一声。
雨晴坐下,点了一碗素面。“怎么了?”
“我想去杭州。我有个同学在那边,说工资比郑州高。”
“做什么?”
“也是便利店。但她说那边时薪高。”
雨晴看着她。“你妈知道吗?”
“知道。她说随便我。”
面来了。雨晴低头吃面,叶子看着窗外。
“你去了住哪?”雨晴问。
“同学那边。她租的房子。”
“几个人?”
“两三个吧。”
雨晴没接话。叶子转过头看着她。“姐,你觉得呢?”
“你自己决定。”
叶子沉默了。雨晴吃了两口面,放下筷子。“你去了能存下钱吗?”
“应该能。那边房租也高,但工资高一点。”
“那你先算算。”
叶子点了点头。雨晴继续吃面。吃完了,叶子说“我请你”,雨晴说“不用”,叶子已经扫码付了。
两个人站在面馆门口。四月最后一天,阳光很好,风吹过来不冷不热。
“姐,我要是去了杭州,还能给你发消息吗?”
“能。”
叶子笑了一下。“那我走了。”
“嗯。”
叶子往公交站走,走了两步回头看了雨晴一眼,挥了挥手。雨晴也挥了一下。叶子转身走了,背影在阳光下,瘦瘦的。
雨晴骑车回家。橘子皮在门口蹲着,她换了鞋,先去厨房倒了杯水。坐回书桌前,把笔记本打开。群里小叶子在发消息——是群里那个小叶子,不是郑州这个。“我今天被顾客骂了,说我态度不好,我都没说话”。洛神说“你回她:你态度好”。小叶子说“不敢”。深海发了一张猫叹气的图。
雨晴看了一圈,没回。
手机震了。林听夏发的消息:“晚上过去。”
雨晴回了一个“好”。
她把手腕上的小锁和小星星转了转。两个都在。银色的光在灯光下闪了一下。
橘子皮跳上书桌趴在她面前。
她摸了摸猫的头。