手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

微信小程序反编译的应对方法

时间:2021/4/8 16:29:54|来源:|点击: 次

    记得2018年,公司在做小程序的三方平台时,接触到小程序的反编译。根据网上博客,一步一步操作,bingo,搞定,so easy!

    虽然很开心获取到了小程序反编译的源码,但是担心也逐渐浮上了心头。我们自己的小程序被别人反编译了怎么办?而且后来也反编译了自己的小程序,反编译获取的代码竟然与源码基本相同。本人大学修的信息安全专业,对于安全方面比一般开发者更敏感。然后,就开始了搜集查找有什么防护手段。

    当时找了几天,得出的结论就是:微信小程序安全性做的很差,除了基本的代码混淆,来增加反编译后代码阅读难度,别无它法,只能期待微信自己对这个bug打补丁修复了。我们自己的小程序,即使别人反编译,也就是把UI给扒了,有价值的逻辑都没有写在小程序里,暂时可以不用太在意这个事情。后来又忙于其他业务,就没再关注这个事情了。

    最近,又负责微信小程序相关的业务了。有一个业务逻辑是这样的:小程序端需要上报用户是否观看了广告,以及根据用户观看广告的次数,对用户给予一定的奖励。如果保证不了上报信息的真实性,就尴尬了。先去查查,小程序还能不能被抓包反编译。艹,快三年了,竟然还没堵住这个漏洞。只是使用了法律武器,破解工具网上不那么好找了。

    小程序安全现状:仍可被抓包反编译(分包加载照样可以被反编译)。对于想抓包后,重新编译盗版上线的,无能为力,仍然停留在仅仅代码混淆层面(代码混淆,可以使用微信开发者工具的混淆勾选项,也可以使用其他的小程序开发框架来做,比如uniapp)。小程序开发者工具的本地配置里,现在加了一个代码保护的选项,网上说然并卵,我自己还没有尝试到底有没有用。下面说说目前的解决办法吧。

    一、单机版小程序。无法防止别人反编译后,重新编译上线。只能通过微信投诉和法律途径解决,但很难达到想要的效果。

    二、有网络交互的小程序。防不了别人偷你小程序端的代码,但可以放逐那些无耻的人再去偷你的数据。有几种方式:第一种,使用微信的登录获取到的token(用户无感知),到自己的服务器换取令牌(服务器拿着小程序给的数据需要到微信服务器验证,验证不通过则说明不是自己的小程序),给令牌一定的有效期,有效期内可以使用令牌与服务器进行数据交互;第二种,根据header的refer信息来判断请求是否来自自己的小程序(https://servicewechat.com/{appid}/{version}/page-frame.html,判断appid);第三种,使用云函数,把云函数当做一个网络请求的中间跳板来用,自己的小程序只能与自己创建的云函数进行交互,云服务再与自己的服务器进行数据交互,但是此方案的缺点也很明显,50万次/天的上限访问,有点坑,不够用呀。

    我们的小程序肯定是需要网络交互的小程序。那么问题来了,怎么满足我们的业务需求呢,选哪种比较好呢?一目了然,只有第三种能满足我们的要求,但访问次数的限制又导致我们不能用它。为什么呢?下面我来分析分析。我们不怕他们盗用我们的UI,数据也根据上面的思路可以防止不让他们用。但我们怕他们上报一些非正常数据,如果不使用云函数方案这个很难防住,因为小程序相当于裸奔,你怎么与服务器进行交互的,他们扒下来后裤衩都不剩了,他们只需要按照你请求的方式,请求你的API,给自己的账户增加虚拟币(假设为虚拟币),然后拿虚拟币兑换奖励我们就亏大了。云函数就不一样了,他们虽然扒下来,但是无法正常触发我们的云函数,从而保证我们数据交互的准确性。

    结论,小程序端仍然不能舒服地保证其安全性。云函数虽然是个办法,但次数受限。特别是保证通讯安全这块,APP开发那套保证安全的方法,在小程序反编译面前,完全失去了意义。当然,如果APP被反编译,被扒了个干净也是不能保证绝对安全的。但,显而易见的是,APP被反编译的难度是远高于小程序的。所以,各位看官,小程序想代码层实现安全目前就别想了,还是在业务层着手吧,尽量不要在小程序里做重利益的业务吧,比如像我们业务那样的(小程序端上报就增加用户虚拟资产,而且虚拟资产可以兑换实际奖励的),当然商城等类似的还是可以的(这种是sever为准的交互业务)。

    参考:

        https://developers.weixin.qq.com/community/develop/article/doc/0006eae23d09a00693a81ec0f5b813

        https://developers.weixin.qq.com/community/develop/doc/0004a6fe6bcdd8b4e117368d05bc00?highLine=%25E5%258F%258D%25E7%25BC%2596%25E8%25AF%2591&page=2#comment-list

        https://developers.weixin.qq.com/community/develop/doc/0004a6fe6bcdd8b4e117368d05bc00?highLine=%25E5%258F%258D%25E7%25BC%2596%25E8%25AF%2591

        https://developers.weixin.qq.com/community/minigame/doc/000cee70fe0c08f8f46778a2656c01

        https://developers.weixin.qq.com/community/develop/doc/000aee5cc24b90190cf67ecb751000?highLine=%25E5%258F%258D%25E7%25BC%2596%25E8%25AF%2591

    

Copyright © 2002-2019 某某自媒体运营 版权所有