【大聪明RPA】一篇文章教你搞定如何保护影刀流程/源码,限制应用使用范围和使用时间
评论
收藏

【大聪明RPA】一篇文章教你搞定如何保护影刀流程/源码,限制应用使用范围和使用时间

经验分享
大聪明RPA
2025-10-27 16:51·浏览量:1525
大聪明RPA
发布于 2025-10-27 16:45更新于 2025-10-27 16:511525浏览

当自己开发的应用给别人使用时,你是否遇到了以下问题:

  1. 不想让用户看到你编写的流程或者python源码;
  2. 只想用户能运行,不能编辑应用;
  3. 只想特定用户/特定机器能运行,不想用户未经许可就传播你的应用;
  4. 想限制用户的使用时间,到期后无法运行;

如果你有以上问题,那么恭喜你,这篇文章给你提供了一站式解决方案。

1. 大聪明的百宝箱

本文介绍的工具都在我分享的应用市场里面

邀请链接:https://www.winrobot360.com/share/accede?inviteKey=81d25234-7f39-4e34-be58-05118992a736

2. 影机--限制应用的使用范围

2.1 从我分享的应用市场中获取影机

2.2 注册登录(影机和影甲账号共用)

2.3 影机使用方法

2.3.1 影机辅助工具

该工具可以获取当前账号所开发的应用uuid和Mac地址,供下面的影机配置使用。

2.3.2 首次使用

  1. 首次使用时,密钥不要填写,会自动生成;强烈建议:一个应用对应一个密钥;
  2. 根据你的需要来确定是否勾选限制可运行的应用,勾选后在下面的输入框中输入你的应用uuid,如果你的应用是迁移给别人的,就需要别人提供迁移后的应用uuid,添加进输入框;
  3. 根据你的需要来确定是否勾选限制可运行的机器,默认的是当前电脑的MAC地址,想要在别的电脑上运行,就将其MAC地址也添加进输入框;
  4. 限制可运行的应用和限制可运行的机器,二者至少选择一项,配置完成后点击确定,会在桌面创建文件夹 config_{当前时间},其中 key.txt 里面存放密钥,请妥善保管,不要泄露,config.txt 为加密的配置文件,raw_config.txt 为明文的配置文件;


5.将  config.txt 添加到你开发的应用中的资源文件中;


2.3.3 更新配置

  1. 在密钥中输入 key.txt 中保存的密钥;
  2. 原来的配置存放在 raw_config.txt 中,可以复制到输入框中;
  3. 更新完你的配置后点击确定即可;
  4. 在你开发的应用的资源文件中删除旧的 config.txt ,添加新的 config.txt ;
  5. 将新的 config.txt 交给用户,用户打开项目目录,如下图所示,替换 resources 文件夹下的 config.txt ;


2.3.4 在应用中添加校验流程/代码

  1. 安装 cryptography 库

2.插入第一条指令:插入代码段(Python),在第27行左右,将key的值改为你自己的密钥,注意保留两侧的英文双引号,代码如下:



import os
import re
import json
import uuid
from xbot import print, app
from cryptography.fernet import Fernet

def decrypt_data(key):
    if isinstance(key, str):
        key = key.encode('utf-8')
    cipher = Fernet(key)
    current_dir = os.path.dirname(os.path.abspath(__file__))
    config_path = os.path.join(current_dir, 'resources', 'config.txt')
    if os.path.isfile(config_path):
        try:
            with open(config_path, 'rb') as f:
                data = f.read()
            decrypt_text = cipher.decrypt(data).decode('utf-8')
            decrypt_json = json.loads(decrypt_text)
            return True, decrypt_json
        except:
            return False, '配置文件解密失败'
    else:
        return False, '配置文件缺失'


key = "改成你的密钥"
decrypt_result = decrypt_data(key)
if decrypt_result[0]:
    app_config = decrypt_result[1]
    # print(app_config)
    if app_config['app']:
        current_file_path = os.path.abspath(__file__)
        current_app_id = re.search(r'.*?\\apps\\(.*?)\\xbot_robot', current_file_path).group(1)
        if current_app_id not in app_config['app']:
            app.dialog.show_message_box('提示', '该应用无权运行,请联系应用开发者', button='ok', timeout=-1)
            exit(0)
    if app_config['mac']:
        mac = ':'.join(("%012X" % uuid.getnode())[i:i+2] for i in range(0, 12, 2))
        if mac not in app_config['mac']:
            app.dialog.show_message_box('提示', '该电脑无权运行,请联系应用开发者', button='ok', timeout=-1)
            exit(0)
else:
    app.dialog.show_message_box('提示', decrypt_result[1], button='ok', timeout=-1)
    exit(0)

3. 影甲--保护流程/源码,设置应用有效期

3.1 从我分享的应用市场中获取影甲

3.2 注册登录(影机和影甲账号共用)

3.3 影甲使用方法


  1. 选择你要保护的应用,点击确定按钮;
  2. 默认勾选隐藏可视化流程,隐藏后应用只能运行,无法打开编辑;
  3. 设置有效天数或日期:为空则不限制时间;注意日期格式为 YYYY-MM-DD,年份为4位,月和日均为2位,2026年1月2日要写作 2026-01-02 ;
  4. 如果你使用影刀编码版,则可以选择要加密的py文件:__init__.py和package.py为影刀自带,无需加密;magic_activities下面的是魔法指令,按需勾选;
  5. 防护成功后,返回我开发的应用界面,在被防护的应用上右键,选择拷贝为副本;
  6. 拷贝为副本后应用uuid发生变化,按照 2.3.3 更新配置;

4. 用户管理系统--灵活管理用户的方案

上面的方法虽然可以限制应用的使用范围和使用时间,但是每次更新使用范围都需要重新生成 config.txt 后进行分发,更新使用时间则需要重新使用影甲进行防护。

现在介绍一个更加灵活的用户管理方案:使用wps多维表格搭配AirScript脚本作为后端的用户管理系统。

该用户管理系统功能包含:

  1. 注册登录,影机和影甲应用已经内置了用户管理系统,可做参考;
  2. 禁用/激活用户,禁用用户后用户无法登录,可设置用户注册时的默认值;
  3. 设置有效期,可设置用户注册时的赠送的天数;
  4. 设置积分,可设置用户注册时的默认值;
  5. 参数加签,防止数据篡改;
  6. 注意:除是否激活外,返回参数中的 剩余积分/是否过期/当前机器是否为注册机器 需要用户根据自己的需求决定如何进行流程;

该用户管理系统简单易用:

  1. wps个人免费用户即可;
  2. 导入我的多维表格模板,修改AirScript脚本中的几个配置项即可;
  3. 打开应用所在文件夹,将 user 文件夹放入其中即可;
  4. 使用方法参考影刀社区文章 《user package使用示例》
"""
基于wps多维表格的用户管理系统

此package提供的用户注册登录、设置有效期、积分管理、绑定机器等功能, 需要与wps多维表格的AirScript配套使用。

作者: 大聪明RPA
QQ: 2414108420

接口:
- login(token, key, is_debug=False): 用户注册登录
  * 参数: token (字符串): wps脚本令牌,不要泄露!!!
  * 参数: key (字符串): 类似token的签名用的随机字符串,不要泄露!!!
  * 参数: is_debug (布尔值): 默认False, 为True时会打印wps返回的结果
  * 返回: (字典)
  * 返回失败示例: {"success": False, "msg": "用户未激活"}
  * 返回成功示例: {'success': True, 'mobile': '18800002222', 'expire_date': '2025-10-23 14:59', 'is_expire': True, 'usage_left': 10, 'is_same_mac': True, 'sign': 'j4n6aMKnZQe5YzvPtZoucJxXU8/XS3SN4YtJWVewK90=', 'password': '123654'}
  * 返回参数: success (布尔值): True=成功, False=失败
  * 返回参数: mobile (字符串): 手机号
  * 返回参数: password (字符串): 密码
  * 返回参数: usage_left (整数): 剩余积分
  * 返回参数: expire_date (字符串): 有效期
  * 返回参数: is_expire (布尔值): True=已过期, False=未过期
  * 返回参数: is_same_mac (布尔值): True=注册账号时的机器与当前机器一致, False=注册账号时的机器不是当前机器
  * 返回参数: sign (字符串): 校验用的签名,防止请求被篡改

- check(token, key, mobile, password, unchecked=1, is_debug=False): 积分扣除
  * 参数: token (字符串): wps脚本令牌,不要泄露!!!
  * 参数: key (字符串): 类似token的签名用的随机字符串,不要泄露!!!
  * 参数: mobile (字符串): 手机号
  * 参数: password (字符串): 密码
  * 参数: unchecked (整数): 需要扣除的积分
  * 参数: is_debug (布尔值): 默认False, 为True时会打印wps返回的结果
  * 返回: (字典)
  * 返回失败示例: {"success": False, "msg": "密码不正确"}
  * 返回成功示例: {'success': True, 'mobile': '18800002222', 'expire_date': '2025-10-23 14:59', 'is_expire': True, 'usage_left': 10, 'is_same_mac': True, 'sign': 'j4n6aMKnZQe5YzvPtZoucJxXU8/XS3SN4YtJWVewK90=', 'password': '123654'}
  * 返回参数: success (布尔值): True=成功, False=失败
  * 返回参数: mobile (字符串): 手机号
  * 返回参数: password (字符串): 密码
  * 返回参数: usage_left (整数): 剩余积分
  * 返回参数: expire_date (字符串): 有效期
  * 返回参数: is_expire (布尔值): True=已过期, False=未过期
  * 返回参数: is_same_mac (布尔值): True=注册账号时的机器与当前机器一致, False=注册账号时的机器不是当前机器
  * 返回参数: sign (字符串): 校验用的签名,防止请求被篡改
  * 备注:如果扣除积分失败,待扣除积分会记录在本地,下次登录时再扣除

编码版使用示例:
    >>> from . import user
    >>> print(user.__doc__)
    >>> login_result = user.login('your_wps_token', 'your_sign_key')
    >>> check_result = user.check('your_wps_token', 'your_sign_key', login_result['mobile'], login_result['password'], unchecked=2, )

可视化指令版使用示例参见影刀社区文章: https://www.yingdao.com/community/detaildiscuss?id=875299182009294848

版本历史:
- v1.0.0 (2025-10-11): 初始版本,包含用户注册登录和积分扣除功能
- v1.1.0 (2025-10-23): 返回参数中增加is_expire(是否过期)和is_same_mac(当前机器是否是注册机器)

"""


收藏20
全部评论1
最新
发布评论
评论