开发那点事(十七)微信小游戏代码安全问题,如何防止代码被扒

写在前面的话
最近羊了个羊火了,但是在第二天就已经有同款类型的游戏上线,其背后反应的是小游戏代码被盗用的问题。

在正式开始今天的内容之前,大家需要明确的一点是,前端的代码不管是部署到服务器还是微信审核上线,用户访问它的同时,所有的代码已经下载到了用户的电脑里,通过浏览器解析代码,用户才能看到相应的内容,所有要做到前端的代码完全不被盗用就跟咱们写程序遇到bug一样是不可能百分之百避免的。

而今天我要分享的是如何尽可能的避免代码被盗用,从后台接口内容加密,到前端js混淆,尽可能的降低代码可读性。

干货点点

  • 后台服务接口层面加密
  • 小游戏上线代码加密

后台以php为例
我们在接口输出的时候将data内容进行加密

/**
 * 输出内容到前端
 * @param $status
 * @param $message
 * @param $data
 * @return void
 */
function show($status, $message = '操作成功', $data = array())
{
    
    
    $result = array(
        'responseCode' => $status,
        'responseMessage' => $message,
        'data' => strencode2(json_encode($data)),
    );
    exit(json_encode($result));
}

/**
 * 加密方法
 * @param $string 加密内容
 * @return string
 */
function strencode2($string)
{
    
    
    $string = base64_encode($string);
    $key = md5('******');
    $len = strlen($key);
    $code = '';
    for ($i = 0; $i < strlen($string); $i++) {
    
    
        $k = $i % $len;
        $code .= $string [$i] ^ $key [$k];
    }
    return base64_encode($code);
}

前端的话以纯js为例写个伪代码,思路就是先判断接口中返回responseCode,然后解密返回的数据展示

// response 为 后台返回的数据
  if (response.data.responseCode != 0) {
    
    
                    Toast(response.data.responseMessage)
                }
                response.data.data = JSON.parse(strencode(response.data.data));
                console.log(response.data.data, '解析');
//解密函数
function strencode(string) {
    
    
    let key = md5("******");
    string = Base64.decode(string);
    let len = key.length;
    let code = '';
    for (let i = 0; i < string.length; i++) {
    
    
        let k = i % len;
        code += String.fromCharCode(string.charCodeAt(i) ^ key.charCodeAt(k));
    }
    return Base64.decode(code);
}

接口加密可以很大程度的增加安全系数,在微信小游戏的调试器里,没办法F12看图片资源,都可以将所有的图片资源放置在oss服务器上,别人就连图片资源都扒不到了。

接口层说完了,咱们再看看前端js方面,node安装javascript-obfuscator 对项目目录下的js进行加密处理,在之前的文章开发那点事(十三)您的微信小程序代码被扒盗用上架,如何保证代码安全已经详细说明,对于微信小游戏中的js文件同样适用,大家可以可以去看看。

猜你喜欢

转载自blog.csdn.net/zw21544182/article/details/126995491