关于java加壳和代码混淆

关于java加壳和代码混淆

  在C中,进行代码加密,首要经过加壳的方法。所谓加壳,即是先将程序代码加密,然后用特定的程序加载器,将代码解密后加载进内存,这样能够在避免代码的反编译,当然,有加壳东西,也有解壳东西,尽管不能100%避免crack,但仍然给代码增加一层有力的维护。

  然而在Java中,维护代码是件很困难的工作,由于class文件十分标准,很容易反编译,且反编译后的代码明晰可读。常见的维护办法是运用代码混淆器,打乱class和function以及变量的姓名,能够搅扰反编译后的代码的可读性。尽管简略提高了代码的安全性,但还仅仅适当于未加壳的C程序。

  java能够加壳吗?曾经我以为这是不能够的,由于动态加载代码这样的内存等级的操作,java无法做到,除非运用JNI(JavaNativeInterface),调用自个编写的C代码,在C代码中完成动态加载java代码。可是,C如何加载java代码呢?这需要对JVM适当的知道。所以其时的我以为这是不能够的。

  然而,最近接触的一些常识告诉我——java也能够加壳!!

  1.URLClassLoader。用URLClassLoader能够在java程序的运转时间,再将文件夹或许jar加入到classpath中,这个特性事实上即是动态加载。既然能够动态加载class的文件夹或许jar,为何不能够加载加密后的classes呢,将classes用自个的方法加密,在URLClassLoader调用时,运用自个的方法解密。不即是达到了加壳的目的了吗?不过解密的代码放在何处是个疑问,即是说解壳器的代码暴露在外,仍是很风险的。

  2.javassist。这实在是一个十分奇特的新技能,我是在学习Tapestry5时首次遇到这个包的,他能够动态创立java字节码,乃至能够修正你现已写好的函数,比如你的getter和setter,仅仅简略的读取和赋值,你能够在Runtime用他修正你的getter和setter,让你的getter和setter每次调用时都能够触发某些代码。凭借这项奇特的技能,必定能够完成更强壮的动态加载,加壳也就有了能够。

关于java加壳和代码混淆

时间: 2024-11-05 19:26:12

关于java加壳和代码混淆的相关文章

.NET DLL 保护措施详解(非混淆加密加壳)

为什么要保护DLL,我就不多说了,各人有各人的理由.总的来说,就是不想核心逻辑泄露及授权验证被破解两大方面的因素. 首先,我来介绍一下发布出去的DLL所面临的风险: 一.直接引用 二.反编译 三.反射 如果DLL一点措施都不做的话,上面任意一种都可以达到破解目的的. 然后,通常网上能搜到如下的保护方式,但真心的来说,用处不大,当然对小白破解者增加了难度. 一.混淆类的工具(如Dotfuscator,但是可以通过ILSpy.Reflector等反编译哦,直接COPY代码也能运行) 二.加密类的工具

JAVA之代码混淆proguard

官方网站用法 http://proguard.sourceforge.net/index.html#/manual/examples.html proguard主要三部分功能 缩减代码.优化代码.混淆代码.三部分功能都可以在配置文件里配置不启用此功能. #Shrink Options #不缩减代码 -dontshrink #Optimization Options #优化代码 -dontoptimize #Obfuscate Options #-不混淆输入的类文件 #-dontobfuscate

5个常用Java代码混淆器 助你保护你的代码

从事Android App开发的都知道,一旦应用被破解,什么源代码.资源文件等都可能泄露,重要点有so文件的支付类.金融类应用等安全更是容易受到威胁!就Java语言编程,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具有jad .dex2jar .jdec .Dedexer 等.因此,为保护我们的劳动成果,尽可能给反编译人员制造障碍,我们可以用一些代码混淆器混淆代码,保护Java的类文件.然后,在混淆的基础上再做一层深层保护——加密.这个方法现在也比较流行,目前,有这方面技术的,有

Java基础6:代码块与代码加载顺序

Java基础6:代码块与代码加载顺序 代码块:用{}包围的代码 java中的代码块按其位置划分为四种: 局部代码块 位置:局部位置(方法内部) 作用:限定变量的生命周期,尽早释放,节约内存 调用:调用其所在的方法时执行 public class 局部代码块 {@Testpublic void test (){   B b = new B();   b.go();}}class B {   B(){}   public void go() {       //方法中的局部代码块,一般进行一次性地调

JAVA代码混淆

代码混淆技术:一种重要的软件保护方法 技术原理: 对程序P进行保持语义的变换成T 功能等价 作用: 经过混淆后程序更难被静态分析和逆向工程所工具 应用范围: 1.分布式计算和软件保护2.算法保护和DRM 3.同形加密 外形混淆 主要目的是改变源程序的格式信息 单向变换 如最初格式没有保存则无法恢复 常用 更加变量 类 函数等名和删除程序注释 控制混淆 增加混淆控制分支以及控制流重组等 1.变量分裂与变量合并 2.数据结构变换 3.静态数据动态生成 4.类继承转换 数据混淆 存储与编码转换.次序转

利用proguard对java web工程代码混淆

目标: 将代码混淆,也就是给第三方源代码,让他们只能运行,却看不懂代码. 用到的工具: 混淆jar的工具:proguard5.1 下载地址:http://download.csdn.net/detail/lk7688535/9625472 反编译jar的工具:xjad2.2 下载地址:http://download.csdn.net/detail/lk7688535/9625486 操作步骤: 见这篇文章:http://blog.csdn.net/zhangdaiscott/article/de

Android代码混淆技术

Android混淆是Android开发者经常使用的一种用于防止被反编译的常见手法.Android开发基于java语言的,很容易被别人反编译出来,一下就相当于裸奔了,特别是用于商业用途的时候,防止反编译是必要的措施.而Android混淆的确可以保证Android源代码的一定安全. Android混淆技术 Java类名.方法名混淆 Dalvik字节码包含了大量的调试信息,如类名.方法名.字段名.参数名.变量名等,使用反编译工具可以还原这些信息.由于类名.方法名等通常都会遵循一定的命名规范,破解者很容

Android中的Apk的加固(加壳)原理解析和实现

Android中的Apk的加固(加壳)原理解析和实现 标签: android 2015-09-13 13:58 42287人阅读 评论(49) 收藏 举报 本文章已收录于:  Android知识库  分类: Android(140)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一.前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理.现阶段.我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个

详谈Android 编程下的代码混淆,点开就看....

源码混淆什么 Java 是一种跨平台的.解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中.由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名.方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成 Java 源代码.为了防止这种现象,我们可以使用 Java 混淆器对 Java 字节码进行混淆. 混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也