×

混淆器 编译器

什么是Java混淆编译器?java反编译器是什么,干什么用的;混淆器是什么,有什么用

admin admin 发表于2022-09-02 23:51:08 浏览81 评论0

抢沙发发表评论

本文目录

什么是Java混淆编译器


由于Java程序运行时是动态连接的,因此编译成的目标文件中包含有符号表, 使得Java程序很轻易被反编译,混淆器可以打乱class文件中的符号信息,使反向工程变得非常困难。

java反编译器是什么,干什么用的;混淆器是什么,有什么用


反编译器就是将.class文件变回原来的java源程序文件
不会冲突
混淆器可以打乱class文件中的符号信息,使反向工程变得非常困难。

有人使用过 Zelix KlassMaster进行混淆吗


你要的功能其实是Java代码混淆,如果要了解Java编译成exe,可以看“参考资料”。下面一段文字摘自《Java手机/PDA程序设计入门》一书,可以做为混淆器性能的大致观点:笔者没用过DashO,所以无法对其作出个人评价。所以现在仅说明笔者曾用过的产品。以笔者的个人观点,如果就混淆的程度来说,ZKM最好,JAX中等,RetroGuard和ProGuard最差,一分钱一分货,这是千古不变的道理。如果就功能性而言,ZKM和JAX都不错,不过,JAX是IBM所开发的产品,因此也继承了大部分IBM产品的最大特色,就是“功能超强,可是不易使用”,可能光是要看完JAX的设定文件就是一个很大的问题。下面分别介绍几种具有代表性的混淆器,对它们的产品性能进行对比。我们使用不同混淆器对同一段java代码进行混淆,分别列出混淆后代码反编译的结果,并给出使用的一些直接体会。原始java代码:publicclassSimpleBeanimplementsSerializable{privateStringname={“name0“,“name1“,“name2“,“name3“};privateListmyList=null;publicvoidSimpleBean(){myList=newArrayList(4);}publicvoidinit_public(){myList.add(“name“);for(inti=1;i;JVMINSTRdup;JVMINSTRswap;4;ArrayList();_$1;}publicvoidinit_public(){_$1.add(“name“);for(inti=1;i《4;i++)_$1(i);}privatevoid_$1(inti){_$1.add(_$2[i]);}privatevoidwriteObject(ObjectOutputStreamobjectoutputstream)throwsIOException{}privateString_$2;privateList_$1;}优点:1、除符号混淆外增加了数据混淆(字符数组初始化);2、有一些语句反编译只能得到字节码指令;3、在SunJDK中提供的Java编译器(javac)的基础上完成,编译和混淆一体完成,不需要先生成class文件再混淆;4、提供了Eclipse的插件,能够直接在Eclipse中使用Jocky。缺点:1、混淆选项粒度较粗,使用中可能要在具体代码中添加@preserve指令来实现,工作量大;2、没有控制流混淆。三、Allatori3.1_demoAllatori属于第二代混淆器,具有全方位保护你的知识产权的能力。Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串编码,以及水印技术。对于教育和非商业项目来说这个混淆器是免费的。2.1版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期。Jad反编译混淆后class得到的代码:publicclassSimpleBeanimplementsSerializable{publicvoidinit_public(){d.add(c.k(“{u{0“));inti=1;goto_L1_L3:H(i);++i;_L1:4;JVMINSTRicmplt21;goto_L2_L3_L2:}publicvoidSimpleBean(){d=newArrayList(4);}privatevoidH(inta){d.add(c[a]);}publicSimpleBean(){d=null;}privatevoidH(ObjectOutputStreamobjectoutputstream)throwsIOException{}privateStringc={c.k(“\177q\177te“),c.k(“\177q\177td“),c.k(“\177q\177tg“),c.k(“\177q\177tf“)};privateListd;}注:c.k是为进行字符串加密额外生成的类c的静态方法。优点:1、设计考虑了库文件混淆的使用场景;2、使用文档详尽,混淆选项配置文件的编写示例多;3、除符号混淆外,还使用了两种高级的混淆手段:控制混淆(改写了for循环)和字符串加密(String数组初始化);4、混淆选项粒度较细,支持本地方法的保护等;5、支持水印技术,允许对需要混淆的代码添加有效日期;6、支持j2me;缺点:1、商业软件(价格附后),对教育和非商业用途免费(网站链接是
-混淆器

有没有好的 python 混淆器 推荐一个


代码混淆,其实很简单。原理就是查找、替换而已。市面上有很多混淆工具,最好是在混淆工具的基础上,自己再写一下,二次混淆。算法也不难。如果需要全局混淆,以及自动混淆,那么就复杂一些了,需要再加上词法分析和语法分析。-编译器

如何使用:

1,首先得安装Python。

2,把这个下面这个 confuse.py 文件,复制目标文件夹。

3,更改 raw_name_list 列表里的字符串。改成你想混淆的变量名或者类名方法名。

4,运行python confuse.py 即可混淆该文件夹下的.cs文件。

这段代码其实还是很简单的,只是为大家说明一下混淆思想。如果想更方便的使用,需要再加入一些词法分析、语法分析的算法。

代码如下:

#! /usr/bin/env python

#coding=utf-8

import hashlib

import random

import os 

###############################

# Describe : 混淆Unity脚本文件

# D&P Author By:   常成功

# Create Date:     2014-11-25 

# Modify Date:     2014-11-25

###############################

#想混淆的变量/方法名

raw_name_list = [“function_1“, “function_2“, “var_1“, “var_2“,]

#混淆后的变量/方法名

new_name_list =

#随机可选的字母表

alphabet = [“a“, “b“, “c“, “d“, “e“, “f“, “g“,  

“h“, “i“, “j“, “k“, “l“, “m“, “n“, “o“, “p“, “q“,  

“r“, “s“, “t“, “u“, “v“, “w“, “x“, “y“, “z“, 

#生成新的变量名

def create_new_name() : 

m = hashlib.md5() 

#生成随机变量名 

for raw_name in raw_name_list: 

m.update(raw_name)

#生成一个16位的字串 

temp_name = m.hexdigest()[0:16]

#合法名称校验

#强制以字母作为变量/方法名的开头 

if temp_name.isdigit(): 

initial = random.choice(alphabet)

temp_name = initial + temp_name 

temp_name = temp_name[0:16] 

#不能重名

while(1): 

if temp_name in new_name_list :

initial = random.choice(alphabet)

temp_name = initial + temp_name

temp_name = temp_name[0:16] 

else:

new_name_list.append(temp_name)

break

#混淆文件

def confuse_file(path_filename):  

file_content = ““ 

#读文件内容 

f = file(path_filename)

# if no mode is specified, ’r’ead mode is assumed by default

while True:

line = f.readline() 

if len(line) == 0: # Zero length indicates EOF

break 

#混淆

name_index = 0

for raw_name in raw_name_list: 

the_new_name = new_name_list[name_index] 

line = line.replace(raw_name, the_new_name) 

name_index += 1 

file_content += line

f.close() 

#重写文件

f = file(path_filename, ’w’) 

f.write(file_content)

f.close() 

#遍历当前目录下的所有.cs文件    

def confuse_all(): 

#获取当前目录

dir = os.getcwd() 

for root, dirs, filename in os.walk(dir):  

for file in filename:  

path_filename = os.path.join(root, file) 

if path_filename.endswith(’.cs’): 

confuse_file(path_filename)  

print “Confuse File: “, path_filename 

if __name__==“__main__“: 

create_new_name() 

confuse_all() 

#打印一下混淆的情况. 

#如果用文本保存起来, 那么以后可以反混淆, 还原文件

print “Start Confuse ....“ 

for j in range(0, len(raw_name_list)) :

print raw_name_list[j] , “ --》 “ , new_name_list[j] 

print “Confuse Complete !“ 


proguard 混淆器怎么用,请教


(1)、从网上download proguard工具,proguard工具主要包含是几个jar文件和一些example,
(2)、将里面的几个jar文件添加到类路径下面。当然,也可以不添加,但是下面在做混淆的时候,必须指定classpath,使在做混淆的过程中,能否访问该类
(3)、编写一个配置文件,主要是混淆器的一些参数。比如,下面是一个例子
-injars platform.jar
-outjars platform_out.jar
-libraryjars 《java.home》/lib/rt.jar
-libraryjars ibatis-common-2.jar
-libraryjars ibatis-dao-2.jar
-libraryjars ibatis-sqlmap-2.jar
-libraryjars junit-3.8.1.jar
-libraryjars d:/j2ee.jar
-libraryjars struts.jar
-libraryjars commons-lang.jar
-libraryjars D:/0working/coreproject/byislib/jasperreports-0.6.1.jar
-libraryjars commons-beanutils.jar
-printmapping proguard.map
-overloadaggressively
-defaultpackage ’’
-allowaccessmodification
-dontoptimize
-keep public class *
{
public protected *;
}
-keep public class org.**
-keep public class it.**
-混淆器

java混淆器是做什么的


楼上只说了其一,没说其二: 混淆器的还有一个作用那就是对代码进行压缩,比如一个j2me程序打完包是400KB,使用混淆器混淆后就被压缩成100KB的文件,这对于手机这种内存空间比较宝贵的设备来说显得尤为必须。
-编译器

asp.net有什么好的加密混淆工具


.net软件加密锁,可试试德国的威步,威步(WIBU)信息系统的软件加密狗,还能申请免费试用版。
  加密锁:威步(WIBU)的CodeMeter,AxProtector(for.net)两款软件加密锁性能非常不错
  混淆的问题,与传统的代码混淆工具(Obfuscator)不同,AxProtector可以完全阻止对.NET 程序集(由 C#, VB.NET, Delphi.NET, ASP.Net… 等语言编写)的反编译。通俗的讲,AxProtector在破解者和您的 .NET 代码之间构建了强大的防破解保护屏障,生成一个基于 Windows 的而不是基于 MSIL 的兼容格式文件。原始的 .NET 代码完整的被加密后封装在本地代码内,无论何时都不会释放到硬盘,对于破解者是不可见的。
  与单纯的.net加密软件不同,AxProtector与CodeMeter硬件加密狗配套餐使用,采用了更为严密的密钥管理,及最先进的AES、RSA、ECC等加密算法存储或传输密钥,保证通讯安全。
  .Net代码编译后生成的 .class 中包含有源代码中的所有信息(不包括注释),尤其是在其中保存有调试信息的时候。所以一个按照正常方式编译的.class 文件可以非常轻易地被反编译。一般软件开发商会采用一种叫做混淆器的工具。混淆器的作用是对编译好的代码进行混淆,使得其无法被反编译或者反编译后的代码混乱难懂。由于混淆器只是混淆了方法名称或流程,而不能防止源代码被反编译,因此混淆器的作用只是增加了反编译的难度,最终的结果也是治标不治本。对于一些掌握工具的人来说几乎还是透明的。AxProtector是一款真正意义的加密源代码、防止反编译的.net软件加密软件。
  AxProtector加密了.net原代码,任何时候原代码都不可能被还原到硬盘当中。采用AxProtector加密后的.net代码只有在程序调用或执行某一段函数的时候,才能通过AxProtectorClass在内存中解密后返回到程序中执行,运行之后迅速立即加密。这种随机加密、按需解密原代码的功能,能很好的防止.Net程序的反编译,同时能够很好地防止API加密点被摘除。有效地保证了源代码的执行效率和安全性。
-混淆器