golang杀死java_用Golang来保护Java程序-Go语言中文社区
#反编译带来的困扰
对于一个开发给自己组织内部用的程序,我们是不怎么需要考虑程序被反编译的事情的,但是对于商业软件来说,这又显得有必要,毕竟国内软件行业的竞争还是非常的激烈,大家可以把竞争对手的程序搞过来反编译一下(至于怎么拿别人的程序我相信大家都已经很老手了),轻易的知道对手基于什么软件来做,或者能够比较容易知道实现原理,然后。。抄抄抄,换个名字,完事,一个全新的产品就出来了。对于 Java 来说这个问题就更加明显了。虽然有类似ZKM这样的商业软件来进行混码,但是混码后只要你有耐心,还是有很大机会能读懂的
在这里不得不吐槽一下,ZKM实在太难用了
#尝试用Go来保护我们的Jar文件
这里我们只讨论胖胖的Jar包(就是那种全部都打在一起直接java -jar就能跑的包,例如Spring Boot打出来的,这个叫法是不是有点萌(○’ω’○) )。
对于防止反编译来说,Golang这类打包出来就是二进制的方式其实就非常适合,打包成二进制之后的程序反编译难度比起一个普通的Jar来说难度会高很多。
对于新写的程序来说,Go其实是个挺好的选择,可以省去反编译带来的问题
那是不是把Jar包放到Go里面打包就可以了呢?恩,是的。不过go build的时候只会对go文件进行编译打包,静态文件是不会被包括进去的。所以就需要通过Golang的一些静态资源库来进行操作。把Jar包作为静态文件来处理。然后把各种静态文件打包成go文件,binary-go就是其中一个合适的选择
go get -u github.com/samuelngs/binary-go
安装完之后,我们执行
binary -dir ./[静态文件位置] -out binary
就会产生出许多的go文件,默认它是以20M为一个进行分拆的。
分拆后,我们可以通过binary提供的方法帮我们把这个包重新还原回来。
#怎么从二进制流启动Jar
打包好程序后,接下来就是启动的问题了。虽然能把Jar从二进制还原回来,不过java没法从二进制流启动啊。或者在外面再放一个壳,然后动态加载反射调用。但是换个角度来看,其实也可以通过一些小技巧来实现的。每次启动的时候把我们的jar包随机放到一个目录,每次启动的时候这个jar包的名字也随机给。
让Jar随机出现在不同的位置主要目的是减少被蹲点的几率
然后用Golang来执行命令行启动,完成启动之后就把这个随机生成的jar包干掉。这样一系列操作之后,一个伪装成Go的胖胖的Jar也就出来了。
#方案的优缺点
##优点
简单,省事:比起ZKM这种麻烦而且收费的混淆器,这个方法简单多了
多了一层壳,更安全一些:比起普通的Jar,这个方法多了一层壳,能够把一些水平比较一般的小伙伴拒之门外,ps一下发现有个jar,但是又不知道这个jar在什么位置。想反编译一下发现是个二进制文件反编译难度有点大。或者干脆一看是个二进制就放弃了。。。
##缺点
还是有机会被蹲点,然后把Jar拿出来继续反编译
对于保密性要求很高的场景这种方案显得不太合适,还是需要内部继续混淆,当然再多一层壳反射调用应该会更好一些
....欢迎补充
总结:
思路上可以规划为一种加壳思路,属于一代加壳,是不是可以想办法往二代抽离等进行演进,有待动手去实验。
golang杀死java_用Golang来保护Java程序-Go语言中文社区相关推荐
- 顺序表倒置java_数据结构-顺序表 java实现-Go语言中文社区
知识点 线性表的顺序结构存储结构简称为顺序表. 线性表逻辑顺序相邻,顺序表存储位置相邻. 便于随机存取. 删除和插入可能要移动大量元素,效率低. 解决溢出的方法是新建另一个大容量数组,效率低. 实现 ...
- java玫瑰花代码_给爱人的玫瑰花表白程序代码--Java版-Go语言中文社区
1 书写表白语句的frame(渐入功能) package com.wanju.blessing; import java.awt.Color; import java.awt.Container; i ...
- linux 设置 java.library.path,Linux下修改java.library.path-Go语言中文社区
第一步:打印出当前的java.library.path有哪些目录: 执行 vi Test.java 切换编辑模式 i 插入如下代码: public class Test { public sta ...
- 如何保护Java程序
Java是一种跨平台的.解释型语言.Java 源代码编译中间"字节码"存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如变量名 ...
- 如何保护Java程序 防止Java反编译
常用的保护技术 由于Java字节码的抽象级别较高,因此它们较容易被反编译.本节介绍了几种常用的方法,用于保护Java字节码不被反编译.通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已 ...
- java反编译工具_如何保护Java程序 才能防止Java反编译
简介:Java是一种跨平台的.解释型语言.Java 源代码编译中间"字节码"存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如 ...
- linux下java程序乱码,解决linux下java程序(例如applet)中文乱码问题
解决linux下java程序(例如applet)中文乱码问题 平台:Mandriva 2006.0 将Windows下的字体文件simsun.ttc拷贝到/usr/share/fonts/zh_CN, ...
- Java程序员的专属社区 |【Java程序员大本营】新人必看玩转攻略
"一个人走的快,一群人走的远" 这是Java程序员专属社区创立的初衷. [Java程序员大本营]是面向工作1-3年,希望提升专业技术能力的Java 开发者建立, 致力于Java知识 ...
- 一步控制台编译java_在控制台运行一个 Java 程序 Test . class ,使用的命令正确的是( )_学小易找答案...
[多选题]城市轨道交通自动售检票系统架构包括 [填空题]区域式架构是在( )和( )基础上设置的一个路网中心 [填空题]在危险.安全.喜庆.阴霾等不同气氛下的场景色彩基调是__________. [单 ...
最新文章
- Python3中参数*args和**kwargs介绍
- 深入理解JVM—性能监控工具
- php mysql $_php中mysql语句的基本写法
- Bzoj2694/Bzoj4659:莫比乌斯反演
- ModelMap和ModelAndView的作用
- sql中带in条件的查询及提高效率
- 亲密关系沟通-【认识需求2】-建立良好沟通环境
- 从M个数中随机等可能的取出N个的问题
- python问题解答网站_python问题解答网站
- docker部署sftp,连接报algorithm negotiation fail错误
- 山大2019计算机学院夏令营,关于举办山东大学2019年环境学科优秀大学生暑期夏令营公告...
- VUE启动报错:Error: The project seems to require yarn but it‘s not installed
- linux sticky权限,Linux基础入门篇之文件高级权限suid,sgid,sticky
- 计算机毕业设计项目推荐 - 毕设开题选题
- 比Navicat好用百倍的通用数据库管理工具,功能强大,最主要还免费!
- 消防工程师 第二篇 建筑防火 6.1 安全疏散
- 【裴蜀定理】CF1055C Lucky Days
- OCA/OCP Oracle 数据库12c考试指南读书笔记:第15章: Oracle Storage
- 金算盘导出oracle,金算盘导出excle_金蝶财务软件的报表如何导出excle文件?
- signature=b93e4b2d4026f44a8795ac6d5857e863,Feebly secure cryptographic primitives
热门文章
- 深入理解Mysql - 内部架构与模块
- android获取app用户数据,专项研究:Android收集用户数据是iPhone的20倍!
- android动画框架,GitHub - azhengyongqin/CustomAnimationFramework: Android自定义曲线路径动画框架...
- GitHu的诞生记 转 https://blog.csdn.net/fanpeihua123/article/details/58151161
- php,js端获取sessionid的方法
- 初识Spring Security
- PageHelper分页插件
- eureka注册中心之服务提供者
- NVIDIA PhysX宣布正式开源 最强物理仿真引擎
- 时域频域与傅立叶变换