源代码如何注入钩子

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

引言

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

常用的钩子程序植入方式

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

        }
    }
  • 钩子程序一般需要配合部署一个第三方监控程序,用来接收通知,并且报警通知指定人员(这里不展开)
相关文章
|
9月前
|
安全 API Windows
3.1 DLL注入:常规远程线程注入
动态链接库注入技术是一种特殊的技术,它允许在运行的进程中注入DLL动态链接库,从而改变目标进程的行为。DLL注入的实现方式有许多,典型的实现方式为远程线程注入,该注入方式的注入原理是利用了`Windows`系统中提供的`CreateRemoteThread()`这个API函数,该函数第四个参数是准备运行的线程,我们将`LoadLibrary()`函数填入其中,这样就可以执行远程进程中的`LoadLibrary()`函数,进而将我们自己准备的DLL加载到远程进程空间中执行,DLL在被装载后则会自动执行初始化部分。
88 0
|
6月前
|
Python
关于SSTI模块注入的常见绕过方法
关于SSTI模块注入的常见绕过方法
86 0
|
9月前
|
Windows
3.4 DLL注入:全局消息钩子注入
SetWindowHookEx 是`Windows`系统的一个函数,可用于让一个应用程序安装全局钩子,但读者需要格外注意该方法安装的钩子会由操作系统注入到所有可执行进程内,虽然该注入方式可以用于绕过游戏保护实现注入,但由于其属于全局注入所以所有的进程都会受到影响,而如果想要解决这个问题,则需要在`DllMain()`也就是动态链接库开头位置进行判断,如果是我们所需操作的进程则执行该DLL模块内的功能,如果不是则自动跳过不执行任何操作即可实现指定进程的注入方式。
69 0
|
11月前
|
前端开发
封装 useUpdate 钩子
封装 useUpdate 钩子
77 0
|
Shell 数据安全/隐私保护 iOS开发
代码注入(11)
代码注入(11)
127 0
|
自然语言处理 JavaScript 前端开发
JS中的依赖注入 — 在测试中未使用过的最佳工具
让我来为大家介绍在测试中最好的朋友。
JS中的依赖注入 — 在测试中未使用过的最佳工具
|
监控 安全 Android开发
【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )
【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )
440 0
|
XML 存储 缓存
Spring源码解析——Bean加载(doCreateBean方法补充)
本文接这上一篇:520就应该和女朋友一起学习Spring源码——Bean加载 对其进行补充~