源代码如何注入钩子

2024-07-29 18:56:06 浏览数 (2)

引言

相信大家都不想自己的代码被人拿出去做一些商业化的行为,但是一时半会又没有一个有效的方法,这里我提供一点思路。

常用的钩子程序植入方式

方式

解释

使用难度

描述

植入通知程序(直接植入)

使用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) {

        }
    }
  • 钩子程序一般需要配合部署一个第三方监控程序,用来接收通知,并且报警通知指定人员(这里不展开)

0 人点赞