小程序逆向:从入门到封禁

2022-03-11 12:58:16

介绍下博主研究微信小程序逆向从入门到被封禁的历程

逆向缘起

一切源于 2019 年底业余时间接的一个小程序商城项目,商城移动端某个功能比较难实现所以想借鉴某款小程序的功能,于是找到了这个工具,一开始用起来挺方便的,网上的使用教程文章也是挺全的,顿时觉得小程序逆向不过如此(调包侠万岁)。

逆向初探

偶尔看到有意思的功能,借助工具来参考下实现(部分参考)思路也是挺好的,但是好景不长,用了没多久,大约在 2020 年 4 月份之后,脚本突然挂了,执行过程中会报错导致逆向失败,原因是微信小程序服务端的编译器更新了。

通过查看打包内容记载的编译器版本记录可以看到如下信息:

window.__wcc_version__ = 'v0.5vv_20200413_syb_scopedata';

所以由此我们可以知道服务端编译器的打包规则在 4 月份发生了一次更新并且灰度到了部分迭代更新的小程序。

那怎么办呢,只能硬看脚本了,但是看不懂啊,作为一名前端工程师,开发过小程序但是逆向也是完全没有头绪,可以说这是一个全新的领域,公开资料有限,没有人可以指导,问问题交流经验。

冥思苦想

虽然暂时没有思路,但是有些优化是可以做的,所以 5 月份先提交了 win 平台下的辅助脚本(只能解主包),帮助不熟悉的同学在 win 平台下更好使用。这个 Unexpected end of input问题则卡了很久,几个月都没有头绪,最后没办法,有同学提供了原作的联系方式,就尝试着写邮件问了一下,虽然没有很详细的答复(人家凭什么告诉你细节呢),但是原作大神也给了点方向,说他也忘记了具体细节,不继续维护该项目了,所以只能自己摸索了,死磕了两个月之后,事情终于来了点转机。

柳暗花明

具体细节不清楚了,只是记得在分析打包内容的结构时无意发现了一个不起眼的细节,这个 _C 的细节其实在之前公众号的文章中也有提及,这个 Unexpected end of input的问题解决之后只是打开了一道门,发现事情远比想象中要复杂很多,脚本执行没有报错并不意味着逆向成功,任意一个环节都可能出现问题,如果你是一个 0 经验者,那么挑战就是巨大的。

渐入佳境

上面的未预期输入问题解决之后,虽然脚本正常执行了,但是某些小程序的代码会有缺失,就是还原地并不彻底,对于编译机制的反向处理存在疏漏的地方,比较常见的就是 wxss 样式的缺失,主要是一些公共样式的处理漏了导致文件不全,另外 wxml 也有可能缺失,缺失原因要比 wxss 复杂许多。这里最大的收获就是认识到了脚本执行成功并不意味着反编译成功,你可能还需要做一些额外操作才可以让小程序代码通过微信开发者工具的编译。

接下来一个比较重要的突破就是喜茶了。

涅槃重生

喜茶出现了另外一个比较高频的问题:


return function(env,dd,global){$gwxc=0;var root={"tag":"wx-page"};root.children=[]

这个问题虽然表面上错误信息都是一样,但是实际导致脚本报错的原因有可能各有各的情况了,毕竟几十万个小程序,拿来测试的只是一部分。脚本只是尽可能地覆盖了大部分的情况。

加上小程序的开发框架比较多(转译型+增强型框架),基础库也在不断迭代,机型兼容问题也五花八门,再加上 PC 端的运行兼容,很难有一个完美的解决方案。

如鱼得水

喜茶的问题解决之后,再去看多多买菜和橙心优选,是不是有种不过如此的感觉(这几个问题的解决方法都类似)?小程序逆向没什么难的嘛~,你会感觉到开始飘了,直到遇到了美团优选,美团优选里出现了新的打包规则,而且有段时间迭代很频繁,甚至可以发现它的文件夹结构,文件组织方式都发生了大规模改变,最痛苦的是逆向完之后导入工具才会发现有几百个编译错误等着你。

这里你会明白---反编译与编译是两码事,编译问题有可能比反编译更繁琐,反编译通过并不意味着在开发者工具里可以顺利编译。

羽化升仙

如果过了美团优选这一关你可能会觉得自己应该可以佛挡杀佛了吧,毕竟是大厂的小程序,那个业务复杂度应该配得上它的难度,但是事实证明--想多了。某些不知名公司开发的小程序逆向的难度可能与大厂的不是一个量级,具体小程序的名称就不透露了。

如果你有兴趣可以来挑战一下。

纵观整个过程,小程序的主要是由页面结构(wxml)、样式(wxss)、配置(json)、逻辑(js)组成,任意内容的逆向还原都有可能出现问题,只不过概率不一,而且调试比较费力(打包后的代码行数可能会有几万行,并且是混淆状态)。

所以一个很小的修改(可能就改几行代码)可能要花几天(周)时间去摸索。

付诸东流

本想着专注于小程序逆向是可以吸引到一部分喜欢学习的粉丝的,虽然也怀疑过在公众号平台发这类文章符不符合规范(这个是在眼皮子底下的拆家行为),但咱只是个小号,犯不着和我较真吧~

一开始也没想到靠逆向去赚什么钱,选择了爱心发电,是的,把 wx 放在博客上面,谁有问题问,或者有逆向需求都会一一解答,而且来问问问题的同学也是来自各种职业的,有的不会技术沟通困难,有勤奋好学的高中生,有独立创业的自由职业者,有综合实力远超博主的大厂大牛,认识了好多各行各业的人...

各有各的难处吧,大家都不易。

渐渐地不分白天黑夜,随时可能会有人找你,不管你是不是在工作、是不是在休息、是不是在忙,可能就是一堆图片过来,可能就是词汇还没理顺就发了一堆文字过来,可能文字都懒得发就飘来十几条语音,可能冷不丁就一个微信电话过来,凌晨两三点问你"在吗"...

挺哭笑不得的,没办法,只能选择收费来节约下自己的时间了,后来慢慢理解到原作者的心情,他可能也不堪其扰吧。

也实在没想到作为一名 web 前端工程师,产生影响力最大的作品竟然是一个逆向工具。

一方面是做些总结,一方面是尝试知识付费,所以就围绕小程序逆向写了十几篇不怎么系统的文章,也不知道得罪了哪位同学,鹅厂知道了这个公众号的存在,并且把所有含相关内容的视频号、小程序全部封掉了,没有申诉的机会。辛苦一年多,写的 100 多篇原创全部丢失。

可惜了一些比较好的内容没有存档,不过没关系,已经开始写比较系统的文章去帮助大家学习这门技术了。抽业余时间写的会比较慢,公众号里面就不放了,可能会选择开源或者放别的平台。

典型的小程序

喜茶

加画框

欧普康视

boss 直聘

本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

扫描下方二维码阅读当前文章

浏览器、微信扫码
微信小程序

评 论:

好文推荐
同名公众号:薛定喵君
每天进步一点点~