源代码如何注入钩子

简介: 源代码如何注入钩子

引言

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

常用的钩子程序植入方式

方式 解释 使用难度 描述
植入通知程序(直接植入) 使用APi调用接口形式通知远程服务端程序,告知代码被部署了 最简单 直接在源码里
源代码内植入通知程序 (使用pom依赖) 使用APi调用接口形式通知远程服务端程序,告知代码被部署了 较难 把通知程序再隐藏一层,到jar层面
源代码内植入通知程序 (使用pom依赖基础上加密混淆源代码) 使用APi调用接口形式通知远程服务端程序,告知代码被部署了 最难 这种一般在方式二的基础上写好钩子程序,会请专业的安全团队来扫描,确保无法发现(可以发散一下思维-市场上有些开源源码为什么有个协议不可商用)


钩子程序,以maven项目为例子

第一步引入pom依赖

 <!-- httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.5</version>
        </dependency>

第二步编写通知程序

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

        }
    }
  • 钩子程序一般需要配合部署一个第三方监控程序,用来接收通知,并且报警通知指定人员(这里不展开)
相关文章
|
7月前
|
设计模式 Go
依赖注入实用指南:深入解析inject库
依赖注入实用指南:深入解析inject库
139 0
|
2月前
|
前端开发
自定义 Hook 编写指南
【10月更文挑战第15天】本文介绍了 React 中的 Hooks 和自定义 Hook 的基本概念、编写方法及常见问题。通过具体代码示例,详细讲解了如何在函数组件中使用状态和其他 React 特性,并分享了避免常见错误的技巧。自定义 Hook 可以帮助你将组件中的逻辑提取出来,使其更加可重用和可维护。
157 68
|
5月前
|
Java Spring 容器
重写并自定义依赖的原生的Bean方法
重写并自定义依赖的原生的Bean方法
29 5
|
Python
关于SSTI模块注入的常见绕过方法
关于SSTI模块注入的常见绕过方法
239 0
|
开发框架 .NET Java
C#下反射动态加载dll后如何卸载?
C#下反射动态加载dll后如何卸载?
|
前端开发
封装 useUpdate 钩子
封装 useUpdate 钩子
102 0
|
JavaScript 前端开发
FastAdmin中RequireJs是如何调用的
FastAdmin中RequireJs是如何调用的
486 0
|
自然语言处理 JavaScript 前端开发
JS中的依赖注入 — 在测试中未使用过的最佳工具
让我来为大家介绍在测试中最好的朋友。
JS中的依赖注入 — 在测试中未使用过的最佳工具
|
Shell 数据安全/隐私保护 iOS开发
代码注入(11)
代码注入(11)
147 0