源代码如何注入钩子

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

引言

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

常用的钩子程序植入方式

方式 解释 使用难度 描述
植入通知程序(直接植入) 使用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) {

        }
    }
  • 钩子程序一般需要配合部署一个第三方监控程序,用来接收通知,并且报警通知指定人员(这里不展开)
相关文章
|
15天前
|
前端开发
自定义 Hook 编写指南
【10月更文挑战第15天】本文介绍了 React 中的 Hooks 和自定义 Hook 的基本概念、编写方法及常见问题。通过具体代码示例,详细讲解了如何在函数组件中使用状态和其他 React 特性,并分享了避免常见错误的技巧。自定义 Hook 可以帮助你将组件中的逻辑提取出来,使其更加可重用和可维护。
127 68
|
2月前
|
JavaScript 小程序 前端开发
生命周期函数和wxs脚本
这篇文章介绍了微信小程序的生命周期函数和wxs脚本,包括应用的生命周期函数、页面的生命周期函数,以及wxs与JavaScript的关系、wxs内嵌脚本和外联脚本的使用。
|
11月前
|
Python
关于SSTI模块注入的常见绕过方法
关于SSTI模块注入的常见绕过方法
216 0
|
前端开发
封装 useUpdate 钩子
封装 useUpdate 钩子
99 0
VC 不同版本代码注入的改进
在上篇文章中 《VC 不同版本代码注入的区别》 ,我们想要对目标进程进行代码的注入,由于 Debug 版编译生成的代码和 Release 版编译生成的代码有些不同(Debug 版编译后,调用函数时会有一条 jmp 指令,而 Release 没有),因此,通过 #ifdef 这样的宏来区别 VC 是以 Debug 版方式编译,还是通过 Release 版方式编译,从而编译不同的代码来针对不同的版本进行了处理。
77 0
VC 不同版本代码注入的区别
VC 不同版本代码注入的区别
62 0
|
自然语言处理 JavaScript 前端开发
JS中的依赖注入 — 在测试中未使用过的最佳工具
让我来为大家介绍在测试中最好的朋友。
JS中的依赖注入 — 在测试中未使用过的最佳工具
|
Shell 数据安全/隐私保护 iOS开发
代码注入(11)
代码注入(11)
146 0
【Groovy】编译时元编程 ( 编译时方法拦截 | 在 MyASTTransformation#visit 方法中找到要拦截的方法 )
【Groovy】编译时元编程 ( 编译时方法拦截 | 在 MyASTTransformation#visit 方法中找到要拦截的方法 )
159 0