Java运行时被杀软查杀的问题
#
问题描述java程序使用java bce或vme方式保护后,程序运行时会在临时目录释放我们的loader dll
,在运⾏时调用该库去解密java⽅法中的字节码进而去执行程序功能。
当电脑上安装有杀毒软件时,由于杀毒软件检测不到loader dll
的特征等信息,故将dll判断为病毒软件后被查杀,进而影响程序运行。
一般这种情况是在windows系统上容易出现。
#
方案描述方案一:
- 若是windows系统上,将dll库进行签名,尽可能的防止被查杀;
- 若是国产化系统,对so库进行签名。
方案二:
- 提交库文件提交到杀毒软件或者添加白名单;
注:以上方案只是一种策略,并不能确保不被杀毒软件查杀,根据实际情况而定。
#
获取dll方式#
Java bce方式1.将sjt_agent.jar包直接解压;
2.在sjt_agent\libs目录下找到sjt_windows_x64.dll和sjt_windows_x86.dll文件;
#
Java vme方式1.对jar包保护后将protected/test.jar
直接解压,假如解压目录为test;
2.在test目录下找到loader_windows_x64.dll和loader_windows_x86.dll文件;
#
dll签名流程由于数字证书的目的是表明软件的签发日期和来源,防止软件被篡改,所以对dll进行数字签名,一般可防止dll被当病毒查杀。
若有受信任的机构颁发的正式证书,可使用正式证书对dll进行签名,若没有可自行创建测试证书进行签名。
以下流程介绍使用测试证书对loader dll进行签名的流程。
#
生成证书1.使用管理员权限打开VS开发人员命令行
;
2.使用Makecert.exe
工具创建测试证书和私钥文件;
命令:Makecert -sv abc.pvk -r -n “CN=XXX公司” abc.cer注释:abc.pvk:创建一个密钥文件,来保存私钥,创建时需要输入一个密码;CN=XXX:指签名者的名称;abc.cer:指定保存生成的证书的文件名;
3.使用Cert2spc.exe
工具创建发行者证书;
命令:Cert2spc abc.cer abc.spc注释:abc.spc:指生成的软件发布证书文件的文件名。
4.使用pvk2pfx.exe
工具生成pfx证书文件;
命令:pvk2pfx -pvk abc.pvk -pi mypassword -spc abc.spc -pfx abc.pfx -f注释:mypassword:指创建pvk时输入的密码;abc.pfx:指生成的 PFX 格式证书文件的文件名。
使用signtool.exe
工具对程序进行签名
命令:signtool sign /f abc.pfx /p <pwd> /t "http://timestamp.digicert.com" /fd SHA256 <文件名>注释:<pwd>:指创建pvk时输入的密码;<文件名>:指待签名的文件;
其他签名方式参考:https://learn.microsoft.com/en-us/windows/win32/seccrypto/using-signtool-to-sign-a-file
#
bce方式dll签名1.使用测试证书或正式证书对获取到的sjt_windows_x64.dll和sjt_windows_x86.dll文件进行签名;
命令参考:1. signtool sign /f abc.pfx /p 123456 /t "http://timestamp.digicert.com" /fd SHA256 sjt_windows_x64.dll2. signtool sign /f abc.pfx /p 123456 /t "http://timestamp.digicert.com" /fd SHA256 sjt_windows_x86.dll
签名成功后,查看dll的属性中的数字签名;
4.签名成功后,进入到解压目录下,将该目录下的所有文件在打包成jar包。
命令:jar -cfM0 sjt_agent.jar ./*
5.将原来的test_jar_protected/sjt_agent.jar
替换成重新打包后的sjt_agent.jar
;
6.再次运行程序即可;
运行命令:java -javaagent:sjt_agent.jar -jar test.jar
#
vme方式dll签名1.使用测试证书或正式证书对loader_windows_x64.dll和loader_windows_x86.dll文件进行签名;
命令参考:1. signtool sign /f abc.pfx /p 123456 /t "http://timestamp.digicert.com" /fd SHA256 loader_windows_x64.dll2. signtool sign /f abc.pfx /p 123456 /t "http://timestamp.digicert.com" /fd SHA256 loader_windows_x86.dll
4.签名成功后,进入到解压test目录下,将该目录下的所有文件在打包成jar包。
命令:jar -cfM0 test-new.jar ./*
5.直接运行重新打包后的jar包即可;
java -jar test-new.jar
#
提交白名单1.jar包使用vme或bce方式保护后,获取dll文件;
2.然后将获取到的dll提交到杀毒软件或者添加白名单方式,点击查看操作流程;
#
问题1.对dll签名后一定能防止杀毒软件么?
答:对dll文件进行签名只是一种策略,并不能完全防止被杀毒软件查杀;
若签名后还是被杀毒软件查杀,则需要手动将dll加入白名单或者提交申诉。
2.java bce方式每次保护后生成的sjt_agent.jar都是变化的,所以每次加壳都需要重新签名,如何避免不重新签名?
答:将sjt_agent.jar解压后获取sjt_windows_x64.dll和sjt_windows_x86.dll文件,对该文件进行签名后,可直接指定签名后的文件来运行
运行命令:1)若是64位操作系统java -agentpath:sjt_windows_x64.dll -jar test.jar2)若是32位操作系统java -agentpath:sjt_windows_x86.dll -jar test.jar