如何保证轻应用脚本的安全

简介: 本文主要介绍JavaScript脚本预编译成字节码的方法,适用于加密脚本代码,保护知识产权。
转自HaaS技术社区

本文主要介绍JavaScript脚本预编译成字节码的方法,适用于加密脚本代码,保护知识产权。

打包加密架构

image.png

使用环境

  • 支持quickjs引擎固件
  • 不支持duktape引擎固件

使用方式

基于命令行工具来进行加密。

命令行API

pack - 打包应用

命令参数

amp pack -m -e

说明

将应用打包成app.bin。

  • mode:模式,可选项 [quickjs | duktape],默认duktape
  • encode:编译,可选项 [0 | 1],默认0不编译,duktape不支持编译

该命令执行后,生成的app.bin文件存放于执行目录。

命令示例

$ amp pack ./app /dev/tty.usb* -m quickjs -e 1

put - 在线热更新

命令参数

amp put -m -e

说明

远程推送轻应用到设备。

  • mode:模式,可选项 [quickjs | duktape],默认duktape
  • encode:编译,可选项 [0 | 1],默认0不编译

命令示例

$ amp put ./app 86753456 /dev/tty.usb -m quickjs -e 1

serialput - 本地热更新

命令参数

amp serialput -m -e -b

说明

通过串口推送轻应用到设备(本地更新)。

  • mode:模式,可选项 [quickjs | duktape],默认duktape
  • encode:编译,可选项 [0 | 1],默认0不编译
  • baudrate:波特率,默认115200

命令示例

$ amp serialput ./app /dev/tty.usb* -m quickjs -e 1

实际效果

原始代码

// 以控制led灯代码为例
// app.js
import * as gpio from 'gpio';
let led3 = gpio.open({
  id: 'LED3',
  success: function() {
    console.log('gpio: open led success')
  },
  fail: function() {
    console.log('gpio: open led failed')
  }
});
let val = 0;
// 设置gpio亮灭,间隔一秒
setInterval(function() {
  val = 1 - val;
  led3.writeValue(val);
  console.log('led set value :', val);
}, 1000);
// app.json
{
    "version": "1.0.0",
    "io": {
        "LED3": {
            "type": "GPIO",
            "port": 36,
            "dir": "output",
            "pull": "pulldown"
        }
    },
    "debugLevel": "DEBUG"
}

未加密代码

// app.bin
� ��
u6���+"��app.json{
    "version": "1.0.0",
    "io": {
        "LED3": {
            "type": "GPIO",
            "port": 36,
            "dir": "output",
            "pull": "pulldown"
        }
    },
    "debugLevel": "DEBUG"
}�Y�Q���-�Б%Aapp.jsimport * as gpio from 'gpio'; // app.js
var led3 = gpio.open({
  id: 'LED3',
  success: function success() {
    console.log('gpio: open led success');
  },
  fail: function fail() {
    console.log('gpio: open led failed');
  }
});
var val = 0; // 设置gpio亮灭,间隔一秒
setInterval(function () {
  val = 1 - val;
  led3.writeValue(val);
  console.log('led set value :', val);
}, 1000);

加密代码

// app.bin
� ��
u6���+"��app.json{
    "version": "1.0.0",
    "io": {
        "LED3": {
            "type": "GPIO",
            "port": 36,
            "dir": "output",
            "pull": "pulldown"
        }
    },
    "debugLevel": "DEBUG"
}��_$��"Ss�N�K�{�app.jsbapp.jsgpioled3valopenLED3idsuccessfailsetIntervalconsolelog,gpio: open led success*gpio: open led failedwriteValueled set value :����3�
��eB��L��L��L�$��8�����)�
07(&C�8�B��$)�]C�8�B��$)�]C#���ܟ��B��$8�B���$)�:b
相关文章
|
23天前
|
NoSQL Redis
Redis事务:保证数据操作的一致性和可靠性
Redis事务:保证数据操作的一致性和可靠性
|
6月前
|
存储 Linux 调度
确保并发执行的安全性:探索多线程和锁机制以构建可靠的程序
在当今计算机系统中,多线程编程已成为常见的需求,然而,同时也带来了并发执行的挑战。为了避免数据竞争和其他并发问题,正确使用适当的锁机制是至关重要的。通过阅读本文,读者将了解到多线程和锁机制在并发编程中的重要性,以及如何避免常见的并发问题,确保程序的安全性和可靠性。通过实际案例和代码示例来说明如何正确地使用多线程和锁机制来构建可靠的程序。
20 1
|
存储 缓存 算法
ES写入过程和写入原理调优及如何保证数据的写一致性(上)
ES写入过程和写入原理调优及如何保证数据的写一致性
ES写入过程和写入原理调优及如何保证数据的写一致性(上)
|
19天前
|
监控 NoSQL Redis
RedisShake如何处理数据同步过程中的冲突和一致性问题
RedisShake保障数据同步一致性,支持全量和增量同步,处理并发冲突(利用乐观锁机制),并进行数据校验。遇到故障能自动恢复和重试,保证不间断同步。同时,提供监控和日志功能,便于识别和解决问题,确保数据完整性。
13 0
|
3月前
|
存储 分布式计算 数据管理
HDFS中的数据一致性是如何保证的?请解释数据一致性的概念和实现方式。
HDFS中的数据一致性是如何保证的?请解释数据一致性的概念和实现方式。
85 0
|
8月前
|
NoSQL 关系型数据库 Redis
Redis事务:保障数据一致性和原子性的简单机制
事务是一种用于确保数据操作的一致性和原子性的重要机制。在Redis中,虽然事务支持并不像传统关系型数据库中那样复杂,但它提供了一种简单的事务支持,称为MULTI/EXEC事务。本文将深入探讨Redis事务的实现原理、特性和适用场景,帮助开发者了解如何在Redis中充分利用事务来保障数据的完整性和正确性。
217 0
|
存储 缓存 NoSQL
一文讲透 Redis 事务 (事务模式 VS Lua 脚本)
先说结论: Redis 的事务模式具备如下特点: - 保证隔离性; - 无法保证持久性; - 具备了一定的原子性,但不支持回滚; - 一致性的概念有分歧,假设在一致性的核心是约束的语意下,Redis 的事务可以保证一致性。 但 Lua 脚本更具备实用场景,它是另一种形式的事务,他具备一定的原子性,但脚本报错的情况下,事务并不会回滚。Lua 脚本可以保证隔离性,而且可以完美的支持**后面的步骤依赖前面步骤的结果**。
24220 2
一文讲透 Redis 事务 (事务模式 VS Lua 脚本)
|
存储 SQL 容灾
推荐一款好用的数据一致性校验工具
NineData 是玖章算术旗下的多云数据管理平台,它是一款即开即用的数据管理 SAAS 服务。当前 NineData 已经支持数十种常见同异构数据源(MySQL、SQLServer、CK 等)之间的结构对比、数据对比及数据订正能力。NineData 结构及数据对比作为独立服务,可以灵活支持 IDC、云主机自建及云托管数据源的数据一致性校验及快速修复。从使用体验、产品能力、稳定性及性能等维度综合来看,NineData 是一款综合实例比较强、比较难得的校验工具。
1636 1
推荐一款好用的数据一致性校验工具
|
存储 Oracle 安全
如何保证版本功能的空中加油?
如何保证版本功能的空中加油?
如何保证版本功能的空中加油?
|
存储 NoSQL Java
别再随意说 Redis 的 SET 保障原子性,在客户端不一定
别再随意说 Redis 的 SET 保障原子性,在客户端不一定
169 0
别再随意说 Redis 的 SET 保障原子性,在客户端不一定