解决微信小程序开发逆向(扒皮)、抓包问题,与APP的防抓包思路

极客癖看科技 2024-04-18 18:23:08
关于小程序的接口保护的尝试

这里我只能说是尝试,毕竟我的技术很菜,在逆向工程大佬面前,做不到绝对安全,但阻止一些技术比我还菜的叼毛还是绰绰有余的,防逆向主要是保护接口与重要数据,并非保护你前端代码,代码既然要服务用户,就无法做到完全隔绝用户。

一、什么是逆向(扒皮)

小程序在运行时,会在用户系统中生成一个后缀wxapkg的程序包,通过反编译这个包,我们便可以获取到此小程序的前端代码,通过分析代码,可得到他的后端接口与传输数据,这就是我们说的扒小程序,目前逆向小程序包已经开发出了各种软件系统。

目前官方对这种逆向行为一直没有任何动作,或者是无法解决,导致一些行业小白,通过软件也能获取到任何小程序的前端代码,作为开发者,虽然我扒别人的可以,别人扒我的就很难受,所以在前天开发一个简单单页小程序时,尝试防止接口泄露。

先说说大家能想到的思路,分包不行,无非就是人家多逆向几个包,接口参数加密验证不行,人家看到前端代码可以模拟加密,token也不行,人家也能模拟token啊,有人觉得用第三方框架开发生成代码是混淆的,可以解决这个问题,但不行,我就帮别人改过混淆的代码,虽然你生成后代码看不懂,但反编译后的这些代码会进行规整排版,对于程序员来说,还是可以看懂的。

所以我在新程序中用了一个违背常理的决定,利用小程序的静默登录功能,也就是验证code,我这次开发的程序很小很小,每次打开程序仅有两次数据传输,所以我在每次数据传输时都加一个wx.login生成的code。

这个code非常特殊,它每次生成都不一样,而且用过一次后便作废,本来用于获取用户与该小程序的唯一标识openid,所以这个code也是与你的appid绑定的,别人小程序生成code与你的也不能互通。

通过这点,我们后台在每次接收数据时都对code进行登录验证,能登录那肯定是你小程序正常请求,不能登录呢?不是抓包的爆破你接口,就是反编译你小程序用自己appid测试的二五仔,这时我们就直接返回准备好的错误数据。

这个思路可以有效杜绝小程序被扒,但仅适用于简单小程序,如果你的小程序每次打开都是几十次的请求(咱也不知道为啥要分这么多次),这个方法会极大消耗服务器性能,建议取舍一些接口,仅对重要接口进行code验证。

上面这种思路也能有效防止抓包爆破接口,因为谁也无法模拟code。

APP防抓包的思路

由于最近在开发APP,APP中没有code这个东西,于是我研究了下网上讲的防抓包思路。

最简单的解决方法就是判断用户是否使用代理,用了代理直接返回中指,但这会损失一些正常用户,因为用户中肯定有人喜欢挂着梯子到处跑,所以我觉得这不是最优解。

其次就是网上最多的办法,参数加盐一起MD5加密验证,也有双重MD5加密的,但一定得加盐,这个很重要。

盐(yan):在对一些表面数据进行MD5加密时,由于数据公开容易被人模拟加密,所以我们通常在加密数据中加一段自己定义的字符串,这个字符串称为盐。

前端对传输的参数都进行加盐MD5,并复制给一个code参数传输到后端,后端对其它参数也进行加盐MD5,最后得出的数据与code进行对比,成功返回正确数据,不成功返回中指。这样,只要盐没有泄露,即可保证接口安全。

注意,我们都是保证接口安全,并没有保证数据安全,数据是给用户看的,谈何安全,重要的数据当然放在后端操作,不要把重要数据传输到前端。

那么你可能想到了,对方逆向获取你的盐,通过抓包再模拟接口调用,你还是逃不掉。

没办法,依我看这个人这么惦记你的程序,你还是别防了,在一起吧......

好了,我最近刚刚学习APP的开发,以上只是我这个刚入门学生的个人见解,大佬有更好的思路也可以教教我。感激不尽。

0 阅读:0

极客癖看科技

简介:感谢大家的关注