文章目录

  • 前言
    • > 展示
  • 原理
  • 源码获取

前言

通常而言, Java程序很容易被烂大街的反编译器 (如JD-GUI, Luyten等) 反编译出源代码并且进行未授权的修改. 所以很多开发者会用 ProGuard 等解决方案来对他们的Java程序进行最基础的保护.
但是经过 ProGuard 保护的程序仍然可以反编译出可以编译的源码并且推测出类的作用. 这时候字节码混淆器就显得尤为重要了.
字节码混淆器可以通过不同的方法对字节码进行乱序 插入花指令 数据加密等保护, 很大程度上保护了Java程序免受到破解

> 展示

本人 (微信: UniRhyme) 自己编写的字节码混淆器保护后的程序反编译结果

这你看得懂?

原理

我这里使用了 ObjectWeb 所开发的 ASM 库对 Java 的字节码进行修改, 从底层对程序进行了保护
例如字符串加密 其流程为

生成解密器 -> 加密字符串 -> 替换加载指令

源码截图:
这样一来, 字符串会变成
而且就算你原原本本复制下来在JVM里跑一遍, 也会因为编码问题无法成功解密字符串.

源码获取

获取源码请添加我的微信: UniRhyme

使用 ASM 编写 Java 字节码混淆器以实现对代码的保护相关推荐

  1. CGLIB依赖ASM(关于java字节码框架ASM的学习)

    本文转自: http://www.cnblogs.com/liuling/archive/2013/05/25/asm.html 一.什么是ASM ASM是一个java字节码操纵框架,它能被用来动态生 ...

  2. asm(Java字节码操控框架)和 CGlib(Code Generation Library)

    asm概述 asm 是一个 Java 字节码操控框架. 它能够以二进制形式修改已有类或者动态生成类.ASM 可以直接产生二进制 class 文件,也可以在类被加载入Java 虚拟机之前动态改变类行为. ...

  3. java字节码和汇编指令_汇编代码和字节码有什么区别?

    在寻找源代码,字节码,汇编代码,机器代码,编译器,链接器,解释器,汇编器以及所有其他含义之间的各种差异时,我仅对字节码和汇编代码之间的差异感到困惑. 特别是,这篇维基百科文章中描述CIL的介绍使我感到 ...

  4. 逆向工程实验——lab8(C/C++反逆向、Java字节码反逆向)

    文章目录 1.Wintel Machine Code Anti-Reversing Exercise 标题的提示文字 6个功能的提示文字 功能2:添加记录 方法一:修改跳转 方法二:修改返回值 第一种 ...

  5. java字节码运行原理_JVM 内部原理(六)— Java 字节码基础之一

    JVM 内部原理(六)- Java 字节码基础之一 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ...

  6. JVM 内部原理(七)— Java 字节码基础之二

    JVM 内部原理(七)- Java 字节码基础之二 介绍 版本:Java SE 7 为什么需要了解 Java 字节码? 无论你是一名 Java 开发者.架构师.CxO 还是智能手机的普通用户,Java ...

  7. JAVA字节码增强技术之ASM

    ASM是一款基于java字节码层面的代码分析和修改工具:无需提供源代码即可对应用嵌入所需debug代码,用于应用API性能分析,代码优化和代码混淆等工作.ASM的目标是生成,转换和分析已编译的java ...

  8. Java字节码技术(二)字节码增强之ASM、JavaAssist、Agent、Instrumentation

    文章目录 前言 从AOP说起 静态代理 动态代理 JavaProxy CGLIB 字节码增强实现AOP ASM JavaAssist 运行时类加载 Instrumentation接口 JavaAgen ...

  9. asm java字节码操控工具学习

    #ASM技术研究 ##ASM是什么 ASM 是一个 Java 字节码操控框架.它能被用来动态生成类或者增强既有类的功能.ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟 ...

最新文章

  1. java B2B2C 源码 多级分销Springcloud多租户电子商城系统- 整合企业架构的技术点(二)...
  2. Linux下使用MySQL——忘记root密码及修改MySQL默认编码
  3. python怎么把cpu占满_如何增加python CPU使用率
  4. Kafka Consumer多线程实例
  5. gprs连接中断记录_请收好!脉搏波血压计连接天天血压APP使用指南
  6. linux --常用命令
  7. 算法3-------最长子序列和
  8. tensorflow和python版本不一样_相比Tensorflow2和PyTorch,TensorFlow1.x版本有什么弊端?...
  9. 什么是处理机的态?为什么要区分处理机的态?
  10. JQ插件jkscroll应用到页面中的效果
  11. eclipse提示打不开java虚拟机
  12. JAVA集合系列(2):Collection和Iterator接口
  13. php 英文转中文,php如何将英文引号转换为中文引号
  14. 电工电子学习笔记----1.电阻、电容、阻抗、容抗复习巩固
  15. 【计算机网络】第六话·数据的传输方式(上)
  16. CodeForces - 1324 D. Pair of Topics 思维+多解法
  17. 最强旗舰手机功能曝光:大变活人、智能静音、拍照测肤……
  18. Word控件Spire.Doc 转换教程(十二):如何将 Word 转换为 EPub、XPS、Emf
  19. 自制嵌入式操作系统 DAY1
  20. linux实验二文件与文件夹操作

热门文章

  1. 原生Android手机管家,谁说安卓一定卡,诺基亚X7原生安卓自备手机管家一键优化告别卡顿...
  2. 惠普 暗影精灵5(i7-9750H+gtx1660ti),ubuntu16.04 无法安装显卡驱动
  3. vue项目打包后生成一个配置文件可以修改打包后的服务器api地址
  4. 关于要走的游戏之路,一点点小心思
  5. python怎么打印图片_Python:使用字符打印照片
  6. Day1: 正点原子mini-linux 开发板 开机测试
  7. java三星题之_Java三星题之剪刀石头布(三局两胜)
  8. 生命的超级能量(宇宙真相)
  9. 《机器学习》周志华课后习题答案——第一章(1-3题完结)
  10. python提升读取速度_如何提高PySerial读取速度