作者:kanney姜_958 | 来源:互联网 | 2023-08-27 13:37
如何防止java文件被反编译无法防止。.class文件的标准是公开的,无法防止别人反编译你的代码。你顶多可以用代码扰乱工具扰乱你的代码,这样反编译的代码就难以阅读。比如可以试试用p
如何防止java文件被反编译
无法防止。.class文件的标准是公开的,无法防止别人反编译你的代码。
你顶多可以用代码扰乱工具扰乱你的代码,这样反编译的代码就难以阅读。
比如可以试试用proguard来扰乱(“加密”)和反扰乱(“解密”)你的代码。但是java有那么多很不错的代码阅读分析工具,即使你用了扰乱器,也不能保证代码的安全。
如何防止JAVA程序源代码被反编译
我们都知道JAVA是一种解析型语言,这就决定JAVA文件编译后不是机器码,而是一个字节码文件,也就是CLASS文件。而这样的文件是存在规律的,经过反编译工具是可以还原回来的。
例如Decafe、FrontEnd,YingJAD和Jode等等软件。
下面是《Nokia中Short数组转换算法》类中Main函数的ByteCode:0 ldc #162 invokestatic #185 astore_16 return其源代码是:short [] pixels = parseImage("/ef1s.png");我们通过反编译工具是可以还原出以上源代码的。而通过简单的分析,我们也能自己写出源代码的。第一行:ldc #16ldc为虚拟机的指令,作用是:压入常量池的项,形式如下ldc index这个index就是上面的16,也就是在常量池中的有效索引,当我们去看常量池的时候,我们就会找到index为16的值为String_info,里面存了/ef1s.png.所以这行的意思就是把/ef1s.pn作为一个String存在常量池中,其有效索引为16。第二行:2 invokestatic #18invokestatic为虚拟机指令,作用是:调用类(static)方法,形式如下invokestatic indexbyte1 indexbyte2其中indexbyte1和indexbyte2必须是在常量池中的有效索引,而是指向的类型必须有Methodref标记,对类名,方法名和方法的描述符的引用。
所以当我们看常量池中索引为18的地方,我们就会得到以下信息:Class Name : cp_info#1Name Type : cp_info#191 和19都是常量池中的有效索引,值就是右边<中的值,再往下跟踪我就不多说了,有兴趣的朋友可以去JAVA虚拟机规范。这里我简单介绍一下parseImage(Ljava/lang/String;)[S 的意思。这就是parseImage这个函数的运行,我们反过来看看parseImage的原型就明白了short [] parseImage(String)那么Ljava/lang/String;就是说需要传入一个String对象,而为什么前面要有一个L呢,这是JAVA虚拟机用来表示这是一个Object。
如果是基本类型,这里就不需要有L了。然后返回为short的一维数组,也就是对应的[S。是不是很有意思,S对应着Short类型,而“[”对应一维数组,那有些朋友要问了,两维呢,那就“[[”,呵呵,是不是很有意思。
好了,调用了函数,返回的值要保存下来吧。那么就是第三行要做的事情了。
有哪些防止反编译 Java 类库 jar 文件的办法
java本就是开源的,你加密感觉怪怪的。想防止反编译,最简单的方法就是你可以向Jar注入无效代码。
比如建一个类,建一个没有意义的方法private class Invalid{ },然后输出为jar。
用解压缩软件打开这个jar,以文本方式找到那个类的class,然后将那个方法名的一个字母删掉,然后更新入压缩文件中。用jd-gui反编译提示错误。这种方式不能用于android中。还有种方法就是混淆代码,加密class和高级加密class,方式比较复杂,可以自行百度。
如何ava程序+防止Java反编译
防止java文件被反编译的方法:1、java编译的文件或者发布包不要放到网上,仅供内部使用则不会被人反编译;2、java发布包加上密码,只给指定的人使用;注:在java编译文件本身是没有办法阻止别人反编译的,只要能拿到编译文件,就能使用反编译工具进行反编译。
java程序如何不被反编译
如果是一个简单的jar包或class文件想不被反编译目前来讲那是不可能的想让自己的代码不被别人反编译出具体的代码内容,简单的方法就是用一些特定的工具对程序进行封装,比如说封装成exe文件,代码方面的话做混淆处理等添加反编译难度,这样就大大提高了反编译的难度了