#反编译带来的困扰

对于一个开发给自己组织内部用的程序,我们是不怎么需要考虑程序被反编译的事情的,但是对于商业软件来说,这又显得有必要,毕竟国内软件行业的竞争还是非常的激烈,大家可以把竞争对手的程序搞过来反编译一下(至于怎么拿别人的程序我相信大家都已经很老手了),轻易的知道对手基于什么软件来做,或者能够比较容易知道实现原理,然后。。抄抄抄,换个名字,完事,一个全新的产品就出来了。对于 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语言中文社区相关推荐

  1. 顺序表倒置java_数据结构-顺序表 java实现-Go语言中文社区

    知识点 线性表的顺序结构存储结构简称为顺序表. 线性表逻辑顺序相邻,顺序表存储位置相邻. 便于随机存取. 删除和插入可能要移动大量元素,效率低. 解决溢出的方法是新建另一个大容量数组,效率低. 实现 ...

  2. java玫瑰花代码_给爱人的玫瑰花表白程序代码--Java版-Go语言中文社区

    1 书写表白语句的frame(渐入功能) package com.wanju.blessing; import java.awt.Color; import java.awt.Container; i ...

  3. linux 设置 java.library.path,Linux下修改java.library.path-Go语言中文社区

    第一步:打印出当前的java.library.path有哪些目录: 执行  vi  Test.java 切换编辑模式  i 插入如下代码: public class Test { public sta ...

  4. ​如何保护Java程序

    Java是一种跨平台的.解释型语言.Java 源代码编译中间"字节码"存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如变量名 ...

  5. 如何保护Java程序 防止Java反编译

    常用的保护技术 由于Java字节码的抽象级别较高,因此它们较容易被反编译.本节介绍了几种常用的方法,用于保护Java字节码不被反编译.通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已 ...

  6. java反编译工具_如何保护Java程序 才能防止Java反编译

    简介:Java是一种跨平台的.解释型语言.Java 源代码编译中间"字节码"存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如 ...

  7. linux下java程序乱码,解决linux下java程序(例如applet)中文乱码问题

    解决linux下java程序(例如applet)中文乱码问题 平台:Mandriva 2006.0 将Windows下的字体文件simsun.ttc拷贝到/usr/share/fonts/zh_CN, ...

  8. Java程序员的专属社区 |【Java程序员大本营】新人必看玩转攻略

    "一个人走的快,一群人走的远" 这是Java程序员专属社区创立的初衷. [Java程序员大本营]是面向工作1-3年,希望提升专业技术能力的Java 开发者建立, 致力于Java知识 ...

  9. 一步控制台编译java_在控制台运行一个 Java 程序 Test . class ,使用的命令正确的是( )_学小易找答案...

    [多选题]城市轨道交通自动售检票系统架构包括 [填空题]区域式架构是在( )和( )基础上设置的一个路网中心 [填空题]在危险.安全.喜庆.阴霾等不同气氛下的场景色彩基调是__________. [单 ...

最新文章

  1. Python3中参数*args和**kwargs介绍
  2. 深入理解JVM—性能监控工具
  3. php mysql $_php中mysql语句的基本写法
  4. Bzoj2694/Bzoj4659:莫比乌斯反演
  5. ModelMap和ModelAndView的作用
  6. sql中带in条件的查询及提高效率
  7. 亲密关系沟通-【认识需求2】-建立良好沟通环境
  8. 从M个数中随机等可能的取出N个的问题
  9. python问题解答网站_python问题解答网站
  10. docker部署sftp,连接报algorithm negotiation fail错误
  11. 山大2019计算机学院夏令营,关于举办山东大学2019年环境学科优秀大学生暑期夏令营公告...
  12. VUE启动报错:Error: The project seems to require yarn but it‘s not installed
  13. linux sticky权限,Linux基础入门篇之文件高级权限suid,sgid,sticky
  14. 计算机毕业设计项目推荐 - 毕设开题选题
  15. 比Navicat好用百倍的通用数据库管理工具,功能强大,最主要还免费!
  16. 消防工程师 第二篇 建筑防火 6.1 安全疏散
  17. 【裴蜀定理】CF1055C Lucky Days
  18. OCA/OCP Oracle 数据库12c考试指南读书笔记:第15章: Oracle Storage
  19. 金算盘导出oracle,金算盘导出excle_金蝶财务软件的报表如何导出excle文件?
  20. signature=b93e4b2d4026f44a8795ac6d5857e863,Feebly secure cryptographic primitives

热门文章

  1. 深入理解Mysql - 内部架构与模块
  2. android获取app用户数据,专项研究:Android收集用户数据是iPhone的20倍!
  3. android动画框架,GitHub - azhengyongqin/CustomAnimationFramework: Android自定义曲线路径动画框架...
  4. GitHu的诞生记 转 https://blog.csdn.net/fanpeihua123/article/details/58151161
  5. php,js端获取sessionid的方法
  6. 初识Spring Security
  7. PageHelper分页插件
  8. eureka注册中心之服务提供者
  9. NVIDIA PhysX宣布正式开源 最强物理仿真引擎
  10. 时域频域与傅立叶变换