引言
相信大家都不想自己的代码被人拿出去做一些商业化的行为,但是一时半会又没有一个有效的方法,这里我提供一点思路。
常用的钩子程序植入方式
方式 | 解释 | 使用难度 | 描述 |
---|---|---|---|
植入通知程序(直接植入) | 使用APi调用接口形式通知远程服务端程序,告知代码被部署了 | 最简单 | 直接在源码里 |
源代码内植入通知程序 (使用pom依赖) | 使用APi调用接口形式通知远程服务端程序,告知代码被部署了 | 较难 | 把通知程序再隐藏一层,到jar层面 |
源代码内植入通知程序 (使用pom依赖基础上加密混淆源代码) | 使用APi调用接口形式通知远程服务端程序,告知代码被部署了 | 最难 | 这种一般在方式二的基础上写好钩子程序,会请专业的安全团队来扫描,确保无法发现(可以发散一下思维-市场上有些开源源码为什么有个协议不可商用) |
钩子程序,以maven项目为例子
第一步引入pom依赖
代码语言:javascript复制 <!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.5</version>
</dependency>
第二步编写通知程序
代码语言:javascript复制 public static void authentication() {
try {
// 通知地址
String url="";
String osName = System.getProperty("os.name");
//需要通知上传的数据,自定义即可
Map<String, String> map = new HashMap<>();
map.put("osName", osName);
try (CloseableHttpClient client = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "application/json");
httpPost.setEntity(new StringEntity(map.toString()));
HttpResponse response = client.execute(httpPost);
HttpEntity entity = response.getEntity();
BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent()));
String line;
StringBuilder responseContent = new StringBuilder();
while ((line = reader.readLine()) != null) {
responseContent.append(line);
}
}
} catch (Exception ex) {
}
}
- 钩子程序一般需要配合部署一个第三方监控程序,用来接收通知,并且报警通知指定人员(这里不展开)