# license-test **Repository Path**: senvon/license-test ## Basic Information - **Project Name**: license-test - **Description**: 用于license的示例代码,看谁能破解license 破解标准 1. 不需要license,能正常启动,运行 2. 必须要能执行TestServiceImpl.test方法,内部逻辑理论上不可见 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-09-07 - **Last Updated**: 2023-10-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # license-test ## 介绍 在我写本项目之前,我也认为java应用的是无法做到真正的license加密的. 本项目主要目的就是希望证明,在具备本地开发环境调试的情况下,依然有一个恶心的东西,又无法去掉,又无法黑掉的场景. 用于license的示例代码,看谁能破解license 破解标准 1. 不需要license,能正常启动,运行 2. 必须要能执行TestServiceImpl.test方法,内部逻辑理论上不可见 ## 打包脚本 ``` mvn clean package -s ./settings-hw.xml ``` 有依赖jar包需要额外下载 如果出现nexus.9istock.com服务器异常,请私信我,应该是nexus挂了. 如果出现SSL错误,nexus使用https搭建. 请在命令行增加参数 ``` mvn clean package -s ./settings-hw.xml -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true ``` 另外,windows下的powerShell,会出现识别maven参数异常,导致的编译错误,请换其他的cmd工具使用 ## 应用启动 解压缩target/xxx.zip 执行命令 ./run.sh start 如果打包正常,出现启动异常,请删除repository中的com/9istock文件夹,应该是远程nexus被污染,导致本地jar包依赖版本不正确,重新下载即可. ## 测试请求 http://localhost:17070/license/test get/post都可以 ``` 不是覆盖包就可以了 controller内部有执行逻辑,模拟需要保护的业务代码 需要执行业务代码 ``` 接口返回 ``` { "status": "SUCCESS", "message": "成功", "code": "S", "result":{ "param1": "abc123", "param2": "123" } } ``` 注意中间的abc123,如果返回123,那就是失败,说明没有完全破解. 日志打印 ``` 2023-09-15 14:26:06,653 [http-nio-17070-exec-2 - ] INFO c.i.l.s.i.TestServiceImpl - 本方法是为了模拟 产品核心逻辑,一般不会暴露源码 2023-09-15 14:26:06,653 [http-nio-17070-exec-2 - ] INFO c.i.l.s.i.TestServiceImpl - 破解的要求如下 2023-09-15 14:26:06,654 [http-nio-17070-exec-2 - ] INFO c.i.l.s.i.TestServiceImpl - 一定要执行本方法,打印出对应的日志 2023-09-15 14:26:06,654 [http-nio-17070-exec-2 - ] INFO c.i.l.s.i.TestServiceImpl - 启动不带license 2023-09-15 14:26:06,654 [http-nio-17070-exec-2 - ] INFO c.i.l.s.i.TestServiceImpl - 祝你玩的愉快 ``` 再次重申,如果去掉license-test-core的依赖,直接在代码里面通过response返回,那是自欺欺人的行为 license的存在就是为了保护核心逻辑,如果核心逻辑不存在,license就不应该存在. 可以动license-test-core,但是核心逻辑不能动,一定要执行,否则license就没有意义. ## 意义 如果在具备本地调试环境的情况下,无法进行破解,那么可以证明在java上,也是具备安全特性的. 如果license的安全特性在java上都无法破解,那么移植到其他语言上,就更没有希望了. ## 更新 * 1.1.0已经被破解,耗费3杯咖啡,1.1.1已来,偶尔的一个闪失而已,要知道,我不做人的时候,谁也别当人 * 1.1.1 变相被破解,再次不当人了,1.1.2发布 * 1.1.3 发布,老子认真了..... * 1.1.4 发布,又疏忽了..... * 1.1.5 发布,应该进入最终版本了