网站外包多少钱,房和城乡建设部网站,抄一则新闻四年级,深圳网站建设找哪家Linux部署jar包#xff0c;隐藏命令行参数 一、背景需求二、查阅资料三、实现隐藏库3.1、测试test.c3.2、设置隐藏库3.3、验证 四、应用jar启动命令五、直接应用结果 最新项目安全检测#xff0c;发现配置文件中数据库密码#xff0c;redis密码仍处理明文状态 于是整理了一篇… Linux部署jar包隐藏命令行参数 一、背景需求二、查阅资料三、实现隐藏库3.1、测试test.c3.2、设置隐藏库3.3、验证 四、应用jar启动命令五、直接应用结果 最新项目安全检测发现配置文件中数据库密码redis密码仍处理明文状态 于是整理了一篇SpringBoot集成jasypt加密yml配置文件https://blog.csdn.net/qq_38254635/article/details/132026841 过程比较曲折一直报错Failed to bind properties under ‘spring.datasource.password‘ to java.lang.String 于是整理了一篇https://blog.csdn.net/qq_38254635/article/details/132027639
所有都配置好了发现一个致命问题使用 ps -ef | grep java 可以清晰的看到秘钥裂开了啊
一、背景需求
1、不能改动任何的代码。 2、隐藏 nohup 启动命令里面的配置参数。
二、查阅资料
大部分都是按照C的思路处理将配置参数提前写入内存中然后在启动的时候通过指针指向对应的配置以达到隐藏配置的目的。 依据这个链接学习了一下https://zhuanlan.zhihu.com/p/610215116?utm_id0
三、实现隐藏库
新建一个目录
cd /
mkdir test
cd test3.1、测试test.c
新增测试文件
touch test.c测试程序 test.c
#include stdio.hint main(int argc,char **argv){printf(argc%d\n,argc);printf(argv[0]%s\n,argv[0]);printf(argv[1]%s\n,argv[1]);printf(argv[2]%s\n,argv[2]);getchar();return 0;
}编译测试程序
gcc test.c运行测试程序
./a.out 123 456查看进程
ps -ef进程的查看结果直接运行命令行参数用ps命令直接打印了出来。 现在要做的就是把后面的参数隐藏起来。
3.2、设置隐藏库
隐藏库程序 hide.c
touch hide.c编写代码 hide.c
#define _GNU_SOURCE
#include dlfcn.h
#include stdio.h
#include stdlib.h
#include string.hint (*main_bak) (int, char **, char **);
/** 所有的argv指向的内存先备份然后全部改为*,再将argv指针指向备份内存*/
static int mymain(int argc, char **argv, char **env) {int ret 0,i 0,len 0;char **argvbak NULL;if(argc 1){argvbak(char **)calloc(argc,sizeof(char *));for(i 1;i argc;i){len strlen(argv[i]);argvbak[i] (char *)calloc(len,sizeof(char));strcpy(argvbak[i],argv[i]);strncpy(argv[i],*,strlen(argv[i]));argv[i] argvbak[i];}}ret main_bak(argc, argv, env);if(argc 1){for(i 1;i argc;i){free(argvbak[i]);}free(argvbak);}return ret;
}
int (*__next_libc_start_main)(int (*main)(int, char **, char **),int argc,char **argv,void (*init) (void),void (*fini) (void),void (*_fini) (void),void (*stack_end));
int __libc_start_main(int (*main)(int, char **, char **),int argc, char **argv,void (*init)(void),void (*fini)(void),void (*_fini)(void),void (*stack_end))
{__next_libc_start_main dlsym(RTLD_NEXT, __libc_start_main);main_bak main;return __next_libc_start_main(mymain, argc, argv, init, fini, _fini, stack_end);
}编译代码 hide.c
gcc -O2 -fPIC -shared -o hide.so hide.c -ldl3.3、验证
使用参数隐藏的方式运行程序
LD_PRELOAD./hide.so ./a.out 111 222查看进程 以上便实现了 隐藏
四、应用jar启动命令
原项目的启动命令
nohup java -jar -Djasypt.encryptor.password1234qwer /app/web.jar --server.port8080 --spring.config.location/app/web.yml /app/web.out 21 在此基础上采用隐藏库即可及命令前加上 LD_PRELOAD如下
LD_PRELOAD./hide.so nohup java -jar -Djasypt.encryptor.password1234qwer /app/web.jar --server.port8080 --spring.config.location/app/web.yml /app/web.out 21 如果再其他地方启动使用绝对路径即可
LD_PRELOAD/test/hide.so nohup java -jar -Djasypt.encryptor.password1234qwer /app/web.jar --server.port8080 --spring.config.location/app/web.yml /app/web.out 21 执行完成之后查看项目进程
ps -ef |grep java五、直接应用结果
1、直接下载.so文件 CSDN地址https://download.csdn.net/download/qq_38254635/88140515 百度网盘地址https://pan.baidu.com/s/1HcPlHjRpBsmUTU8GnAhKfg?pwddge1 提取码dge1
2、放到服务器里在启动命令前添加下面命令即可。
LD_PRELOAD/my/hide.so 地址需根据放服务器的位置调整。
参考链接 Java 程序隐藏命令行参数https://www.5axxw.com/wenku/pg/5100338h.html 如何隐藏进程的启动参数https://www.zhihu.com/question/27518530 linux小妙招-隐藏命令行参数不修改源码https://zhuanlan.zhihu.com/p/610215116?utm_id0