AI太好用了!帮我把小区门禁APP「砍」到只剩开门,安装包不到1MB

前段时间刷到有人用AI做小软件,去电视广告、精简桌面和预装应用的事情,给了我灵感。因为我是真受够了我们小区门禁
。以前多方便:蓝牙、刷卡、APP、人脸都行,卡还能复制进手环、手机用NFC开,我早就不带实体卡了。结果物业不知出于什么目的,单独给东大门”升级”了套新系统,现在小区两套门禁系统同时跑,老卡还得去物业重新录入关联到新系统。录完发现东门的新门禁感应范围特别少,很不灵敏,频繁刷卡还经常导致后面排队。更麻烦的是新门禁系统会校验门禁卡的完整扇区,所以不认手机手环录入的NFC开门,这升级体验真的开倒车
。和物业经过几次友好交涉后,提供了个另一个平台的APP,让用这个看看先。

试了下,的确是灵敏了。但东门很多走电瓶车的,一旦你在道闸停留,无论你是掏出门禁卡反复尝试多次来开门;还是掏出手机,点开那个物业APP,等几秒开屏过后,再进了主界面,然后在一堆图标下面点「开门」按钮,进到了专门管理开门的二级页面,然后下划,还得再点一下东门按钮才能开门。在出行高峰,一顿操作下来,很容易造成后面电瓶车拥堵。而且我是真不想装2个小区APP(目前的物业缴费,报修等项目都还在原APP)。

我这个人有个毛病,越是这种天天膈应你的小事情,我越想把它给办了
。我的要求也不高:尽可能用最少的步骤,最少的操作来实现我的门开需求。一开始我就翻过这个物业APP的小组件,没有快捷开门的功能。也试过用“创建快捷方式”应用来找物业APP里的活动列表,逐条尝试,依旧没能找到直达开门页面的捷径。

但后来上了AI,还真让我给办成了,还是最理想的一键开门方案!这里就不提具体AI名字,非广,一个免费平台,本篇主要提供思路,不少AI Agent都能搞定的。由于实测需要去小区门口观察是否真的成功开门,所以陆陆续续耗时近2天,前后捣鼓了两个完全不同方向的解决方案,第一代还翻了车,今天把整个过程写出来,有同样想法的朋友可以围观看看,说不定还能抄个作业。说明下,由于这个验证环节涉及手机登录和网络远程开门,我没有全权交给AI,只是它出主意,我来操作和把关的形式。
先让AI写了个替我点屏幕的脚本

最初的思路特别朴素,流程不就是固定的点那几下嘛,那找个工具替我点,不完事了。而且这也是AI提供给我的第一个解决思路,根据我发给AI的及2张开门禁的截图,它噼里啪啦就给我写了一个自动点击的脚本,导入Autox.js的APP就能模拟点击,走的是手机的无障碍服务。这里我让AI改了2轮,让脚本模拟点击的成功率和效率提升不少。

但这个模拟点击还是需要先打开Autox.js。再选择运行指定的自动脚本。还是有2个步骤。为了实现一键打开,我选择通过Autox.js的APP的脚本打包应用功能,把它打包成为一个独立运行的APP,这样实现打开APP就自动去打开物业软件吗,模拟点击动作。一开始尝试还是可以的,但待机一会就会发现,我手机的无障碍服务经常性失效,明明已经把相关的后台限制都关了,问题依旧。网上搜索,有些手机系统就是这样,可能就是无root模式下运行的烦恼吧。
换个思路,从源头抓取请求命令

咱不是码农,但对我来说,这个新的物业APP只用来开门,其他的服务功能完全没用。不同于小区另一个蓝牙开门的物业APP,这个新装的APP本质上就是拿着我的登录身份,往他们服务器发开门请求。服务器那边核对完身份,闸机就开了。而且询问AI得知抓举联网开门请求来的也没想象中的复杂。如果我能知道它那后台请求对话是怎么说的,就能完全绕开这个臃肿多余的APP。

起初我也不确定是否能够成功,但这就是AI听到我说利用无障碍服务自动点击经常失效之后,主动告诉我尝试第二个办法,就是接口直调
。由于我之前就把这个门禁平台APK包发给了AI分析过,所以它也知道这套门禁走的就是Net远程网络开门,也认为第二个方案有可行性。注意:如果你用的在线AI平台,上传附件有大小限制,而你要分析的APK包有很大,可以分卷压缩,然后再传上去,云平台会自己解压处理的。对了,使用非本地大模型的AI都记得,重要数据,隐私内容发过去时候,记得做脱敏替代。

这边通过AI分析,已经成功提取到了远程网络开门的服务器地址,HTTPS协议,具体业务接口目录也被发现。我查看了AI的思考过程,虽然代码有做混淆,又有加固。但AI分析APK解包出来的dex文件,经过一些关键词过滤,不经运行就轻松读取到了域名、网址、路径片段。但也说了,只是推测,因为包含很多碎片内容,具体还是需要靠抓包确定。理论上这地址,再加上登录后的token发请求,就能响应开门动作。

AI让我抓一次本人成功开门的请求,确定开东门的具体请求,就能做成真正的一键开门。但AI也打了预防针,说如果抓出来发现它带动态签名、或者token几天就过期,这条路也可能打折扣。我还是决定尝试一下,按要求下载了Reqable工具。结果先卡在了添加CA证书,因为我这台手机没打算root,非root用户,选择“安装证书/从存储设备安装”之后,打开Reqable的调试检测,去打开物业开门APP,直接提示开门失败。可以判定物业开门APP不认非root模式下添加的这种用户证书、所以抓包一插手它的请求就握手失败。

这里AI主动提供了别的解决思路,给我重新解包改配置,加了一条“信任用户证书”的规则,再用AI自己的签名重新打包。想法很好,但感觉有些不靠谱的样子。果然,在原手机测试,都不给安装,说签名不同。卸载了原版都不给安装。换手机倒是能装上这个修改版的门禁APP,但打开就闪退。这期间AI反复修改重新打包APK让我测试,依旧不行。最后让AI分析判断是APK包的SecurityGuard会验签名。问我是拆自检还是绕开它,换环境。

这回我决定换战场。参考AI建议,直接在电脑上装了个模拟安卓的工具,具体工具可以自己找合适的,我这款里面可以选择Android版本,但我建议选择低版本的Android12(此处跳过错选内核,来回白折腾很久的千字描述)。把原版的开门APP和Reqable都装了进去。这个模拟工具的好处是系统能完全归我管,可以一键开关root环境,允许读写系统盘。我能在root环境,把抓包调试要用的证书放到了系统信任的位置上。继续尝试原版的小区APP,在模拟环境也能运行。

接下来的事情就好办了,打开Reqable的调试检测,切到后台运行,然后在进入小区APP的开门子页面,点击开东门显示成功的那一刻,立刻暂停Reqable的调试。似乎最新的一条调试信息就是开门的内容,因为我在一堆信息里看到关键词Door了。

把最近几条抓取的请求列表截图发给AI,确认最后一条就是开门的请求,明文抓到了。看来常规小区的门禁系统也没那么高规格加密。甚至连开门前拉门列表的请求也一并抓到了,就是前面一条。然后就简单了,点开这两条请求,然后通过右上角的选项,点击生成代码,方便导出对比开门参数里有没有一次性成分。类似需求的朋友,到这一步如果看不懂代码,也可以发给AI确认里面的信息。但要记得告诉AI,先从理论判断,不要反复尝试发送真实请求,我现在不在小区门口,当时都深夜了,小区门口没有人,但门禁自动开开关关,岂不是要吓到守夜班的保安。

我这边让AI尝试按照原先抓取的内容原样发送了一次命令,服务器返回了成功开门的信息。然后AI就把之前抓到的开门信息内容自作主张的做成AutoX脚本(它还念念不忘我之前尝试失败的方案1…),我带手机前往东门,通过脚本运行实测多次,的确次次都成功。但AI也给我打了预防针,因为它尝试把时间戳换新试探签名规则,被服务器会以签名错误拒绝。说明sign和时间戳绑定、不能随便改。虽然不确定这个“原样重放”的请求多久会失效,但至说明少当下这个方式是成功了。

虽然这个AutoX脚本是可以直接通过Autox.js这个APP来导出APK安装包来独立运行,但它转的APK体积冗余,不符合我的极致体验需求。于是我让AI按照之前抓到的内容,构建一个简单高效的独立APK包,要求打开APP就自动发送开门请求。AI也给力,马上就出了一个100kb左右的安卓包。安装后的确好使,现场实测多次,直到第二天,里面抓取的原始接口调用请求依旧有效。

既然抓取的接口直调短时间没有失效,真有了使用价值之后,设计师尽善尽美的强迫症人格上线!先起了个美名,再让AI给这个只为开门而生的APP重新设计一个符合现代审美的UI。避免AI自作主张和灵机一动的行为,我是先让它出2张UI效果图,给我比稿。经过2轮友好的沟通调整之后,最终得到了这个高端、大气、上档次的全新APP,APP图标和名字都给重新设计,整体视觉秒杀原始的物业APP,。当然最重要的是它的一键开门真的好用。注:UI底部的服务器反馈代码我还是让AI选择保留,方便遇到一些特殊状态反馈,可以及时排查分析。

我知道此刻你和我一样会关心它的直调代码有效期,毕竟前面验证过sign是和时间戳绑定。但目前验证下来,可以基本确认它防的是篡改,不是重发。服务器验签,是拿请求自带的时间把指纹重算一遍、对得上就放行,至少短期内不验请求里的时间数据离现在有多久。因为截稿目前,已经成功维持了近2个礼拜。看来后台接口直调的会话保持有效期很长。而且我给家里人的手机也装上我的漂亮APP,同样能成功一键开门。看来服务器不验当前网络环境和设备变化。
即便再过一段时间,出现旧凭证失效的问题,那大概率也是token到期、或者我重新登录了之前手机里被顶掉了的原版物业APP(它是单会话策略)。到时候看App里服务器回的反馈就能区分,再重抓一次,让AI输出个新版一键开门的APP,最多几分钟的事情。

我真的太满意这个和AI一起合作的成品APP
,里面没有开屏,没有广告,没有商城,没有乱七八糟的服务入口。一点APP就直接开门,整个安装包两百多KB,连1MB都不到。原来的物业APP呢,一百多MB。一个顶它五百多个,就很离谱。而且这次经历也是告诉大家,有些看起来困难的东西,有了AI之后,非常轻松,我全程没写过一行代码。也不用专业术语,只要用自然语言提要求、截图、说「不行,重新来」,最后跑到门口去实测。麻烦事基本都由AI搞定,全程下来都还在AI的免费额度内。当然了,一点耐心还是要有的,中间也会有小翻车,换个急性子可能第二回就放弃了。
写到最后

讲真,这件事省下的时间拢共也没多少,一年十个小时,摊到每天几次进出,最多也就几十秒。但最主要的是不会再因为自己造成后方拥堵。更让我感慨的是以前生活里碰上这种不顺心的事情,要么忍着,要么去搜有没有现成的App、现成的工具,搜不到也就算了。现在不一样了,你可以把烦恼原原本本讲给AI听,然后一人一机,从最笨的办法开始,一层一层往下挖:先写个自动帮你点击的凑合,发现凑合不了,那就再往下走一层,直接做一个只属于你自己的小工具,还是完全不用学任何代码的那种。
我感觉折腾图文的时间都远超搞门禁项目的时间,今天就先写到这里吧。话说,还有哪些你生活里不想再凑合将就的事情,期待用AI来解决?可以评论区聊聊,要是点赞热度高,我看看下一篇能不能写你那个提议。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
