混淆器(混淆器 编译器 区别)

来源:互联网 时间:2025-10-24 15:23:37 浏览量:2

混淆器可能是相关行业人士都值得关注的知识,在此老币网对混淆器 编译器 区别进行详细的介绍,并拓展一些相关的知识分享给大家,希望能够为您带来帮助!

本文目录:

  • 1、什么是代码混淆?andriod和android-studio工程如何启用代码混淆功能
  • 2、代码混淆器是干什么的?
  • 3、asp.net有什么好的加密混淆工具
  • 4、有人使用过 Zelix KlassMaster进行混淆吗
  • 5、有没有好的 python 混淆器 推荐一个
  • 6、android集成分享sdk后怎么代码混淆

什么是代码混淆?andriod和android-studio工程如何启用代码混淆功能

代码混淆有两种重要功能。其一,混淆代码。其二,优化代码。

进行代码混淆的程序被称为代码混淆器(混淆工具)。进行代码混淆的意义主要在于对代码进行一定程度的加密。

在android 2.3之后,sdk中就已经集成了混淆器proguard(目录在sdk\tools\proguard),所以我们可以很方便的直接在工程中开启代码混淆。

eclipse android工程开启混淆功能,我们需要手动在项目文件.properties(我的是project.properties文件)中添加下面的代码

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

某些方式创建的项目中可能已经有如上两行了,只是默认被注释掉了,只要把proguard.config这一行解注释就好了。这样代码混淆功能就开启了,在打签名包时,项目会自动进行代码混淆。

代码混淆器是干什么的?

用于打乱代码的编译结果,保护自己成果,使别人难以看懂用反编译软件还原出来的代码

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加密点被摘除。有效地保证了源代码的执行效率和安全性。

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

你要的功能其实是Java代码混淆,如果要了解Java编译成exe,可以看“参考资料”。下面一段文字摘自《Java手机/PDA程序设计入门》一书,可以做为混淆器性能的大致观点:笔者没用过DashO,所以无法对其作出个人评价。所以现在仅说明笔者曾用过的产品。以笔者的个人观点,如果就混淆的程度来说,ZKM最好,JAX中等,RetroGuard和ProGuard最差,一分钱一分货,这是千古不变的道理。如果就功能性而言,ZKM和JAX都不错,不过,JAX是IBM所开发的产品,因此也继承了大部分IBM产品的最大特色,就是“功能超强,可是不易使用”,可能光是要看完JAX的设定文件就是一个很大的问题。下面分别介绍几种具有代表性的混淆器,对它们的产品性能进行对比。我们使用不同混淆器对同一段java代码进行混淆,分别列出混淆后代码反编译的结果,并给出使用的一些直接体会。原始java代码:publicclassSimpleBeanimplementsSerializable{privateString[]name={"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;i4;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脚本文件

# DP 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[0].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 !"

android集成分享sdk后怎么代码混淆

为了保护代码被反编译,android引入了混淆代码的概念

1.设置混淆

在工程下找到project.properties文件

在文件中加入proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt这个是系统的

也可以用自己的混淆文件(这样就可以配置一些自己的东西),去sdk.dir}/tools/proguard/ 下复制proguard-android.txt文件到本地工程中

然后设置成proguard.config=proguard-android.txt

project.properties文件:

[java] view plaincopy

#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

proguard.config=proguard-android.txt

# Project target.

target=android-17

-injars androidtest.jar【jar包所在地址】

-outjars out【输出地址】

-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】

-optimizationpasses 5

-dontusemixedcaseclassnames 【混淆时不会产生形形***的类名 】

-dontskipnonpubliclibraryclasses 【指定不去忽略非公共的库类。 】

-dontpreverify 【不预校验】

-verbose

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】

-keep public class * extends android.app.Activity【不进行混淆保持原样】

-keep public class * extends android.app.Application

-keep public class * extends android.app.Service

-keep public class * extends android.content.BroadcastReceiver

-keep public class * extends android.content.ContentProvider

-keep public class * extends android.app.backup.BackupAgentHelper

-keep public class * extends android.preference.Preference

-keep public class com.android.vending.licensing.ILicensingService

-keep public abstract interface com.asqw.android.Listener{

public protected methods; 【所有方法不进行混淆】

}

-keep public class com.asqw.android{

public void Start(java.lang.String); 【对该方法不进行混淆】

}

-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】

native methods;

}

-keepclasseswithmembers class * { 【保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。】

public init(android.content.Context, android.util.AttributeSet);

}

-keepclasseswithmembers class * {

public init(android.content.Context, android.util.AttributeSet, int);

}

-keepclassmembers class * extends android.app.Activity {【保护指定类的成员,如果此类受到保护他们会保护的更好 】

public void *(android.view.View);

}

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】

public static final android.os.Parcelable$Creator *;

}

=====================================常见异常===================================

参考:

加入第三方jar包之后常出现的几个异常:

proguard returned with error code 1.See console

情况1:

Proguard returned with error code 1. See console

Error: C:/Documents (系统找不到指定文件)

后来发现是因为将整个工程放到了桌面上,而桌面的目录是C:/Documents and Settings/Administrator/桌面,在这里面有空格,而proguard进行发编译的时候是不允许有空格的

如果换了正确路径还不好用的话,直接删除proguard就好了

注意:SDK和程序路径最好不要有空格符

情况2:

Proguard returned with error code 1. See console

异常:

java.lang.ArrayIndexOutOfBoundsException

解决办法:将proguard.cfg中的"-dontpreverify"改成“-dontoptimize”

参考文章:

我把项目中生成的proguard文件夹(此时文件夹是空的)删掉,然后再重新运行项目,就OK 了。

情况3:

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] Proguard returned with error code 1. See console

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] java.io.IOException: Can't read [proguard.ClassPathEntry@106082] (No such file or directory)

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]

at proguard.InputReader.readInput(InputReader.java:230)

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]

at proguard.InputReader.readInput(InputReader.java:200)

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]

at proguard.InputReader.readInput(InputReader.java:178)

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]

at proguard.InputReader.execute(InputReader.java:100)

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]

at proguard.ProGuard.readInput(ProGuard.java:195)

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]

at proguard.ProGuard.execute(ProGuard.java:78)

[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]

at proguard.ProGuard.main(ProGuard.java:499)

抛出这样的异常的原因是第三方jar的引用路径不对,没有找到这个需要忽略混淆的jar包。

========================官方文档翻译========================================

原文

混淆器(ProGuard)

在本文中(In this document)

Enabling ProGuard

Configuring ProGuard

Decoding Obfuscated Stack Traces

Debugging considerations for published applications

参见

ProGuard Manual ?

ProGuard ReTrace Manual ?

混淆器通过删除从未用过的代码和使用晦涩名字重命名类、字段和方法,对代码进行压缩,优化和混淆。结果是一个比较小的.apk文件,该文件比较难进行逆向工程。因此,当你的应用程序对安全敏感(要求高),例如当你授权应用程序的时候,混淆器是一种重要的保护手段。

混淆器被集成在android 构建系统中,所以你不必手动调用它。同时混淆器仅在发布模式下进行构建应用程序的时候才会运行起来,所以在调试模式下构建程序时,你不必处理混淆代码。让混淆器运行起来是可选择的,但是推荐选上。

这个文档描述了怎样启用并配置混淆器,以及使用跟踪(retrace)工具对混淆的堆栈跟踪信息(stack traces)进行解码。

启用混淆器Enabling ProGuard

当你新建了一个Android工程之后,一个proguard.cfg文件会在工程的根目录下自动创建。这个文件定义了混淆器是怎样优化和混淆你的代码的,所以懂得怎样根据你的需要来定制是非常重要的。缺省的配置文件仅覆盖到了通常情况,所以根据你的需求,很可能需要编辑它。接下来的内容是关于通过定制混淆器配置文件来对混淆器配置。

为了让启用混淆器作为Ant或者Eclipse构建过程中一部分,可以在project_root/default.properties文件中,设置proguard.config属性。路径可以是绝对路径或者工程根目录的相对路径。

如果你让proguard.cfg文件在缺省位置(工程的根目录),你可以像这样指定位置:

proguard.config=proguard.cfg

同样,你可以把该文件放到任意的位置,并指定它的绝对路径。

proguard.config=/path/to/proguard.cfg

当你在发布模式下,或者通过运行ant release,或者通过使用Eclipse中的Export Wizard构建你的应用程序的时候,构建系统都会自动地去检查proguard.config属性是否被设置了。如果被设置了,混淆器在把所有东西打包成.apk文件之前,自动地对应用程序字节码进行混淆处理。而在调试模式中构建则不会调用混淆器,因为那样调试会更加繁重。

运行混淆器之后输出的文件有:

dump.txt

描述.apk包中所有class文件的内部结构。

mapping.txt

列出了源代码与混淆后的类,方法和属性名字之间的映射。这个文件对于在构建之后得到的bug报告是有用的,因为它把混淆的堆栈跟踪信息反翻译为源代码中的类,方法和成员名字。更多信息,查看解码混淆过的堆栈跟踪信息。

seeds.txt

列出那些未混淆的类和成员。

usage.txt

列出从.apk中剥离的代码。

这些文件放在以下目录中:

注意:每次在发布模式下构建时,这些文件都会被最新的文件覆盖。所以每次发布程序时候,为了反混淆来自构建时产生的bug报告,请保存这些文件的一个拷贝。对于为什么要保存这些文件的重要性的更多信息,请查看程序发布调试注意事项。

混淆器配置(proguard config)

某些情况下,proguard.cfg文件的缺省配置可以满足需求了。但是,对于混淆器来说,大多数情况做出正确的分析是困难的,并且它或许会删除在它看来是无用的,但对于程序来说却确实需要的代码。一些例子如下:

一个仅引用于AndroidManifest.xml文件的类。

一个通过JNI调用的方法。

动态引用的属性和方法。

project_root/bin/proguard 当你使用Ant时

project_root/proguard 当你使用Eclipse时

解码混淆过的堆栈跟踪信息(Decoding Obfuscated Stack Traces)

当混淆代码并输出了一个堆栈调试信息时,这些方法名字是混淆过的,虽然可以进行调试,但是调试变得困难。幸运的是,每当混淆器运行时候,它都会输出到文件project_root/bin/proguard/mapping.txt中,该文件包含了从原始类,方法和属性名字到混淆后名字的映射。

Windows系统中retrace.bat脚本命令或者Linux和Mac OS X系统中retrace.sh脚本命令能把混淆后的堆栈调试信息转换为可以理解的文件。它被放在sdk_root/tools/proguard/目录下。运行retrace工具的命令语法是:

retrace.bat|retrace.sh [-verbose] mapping.txt [stacktrace_file]

例如:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

如果你没有为stracktrace_file指定值,那么retrace工具从标准输入读取。

已发布应用程序的调试注意事项(Debugging considerations for published applications)

保存好每一个已发布给用户的程序的mapping.txt文件。通过保存发布构建版本的mapping.txt文件拷贝,确保当用户碰到bug,并把混淆后的堆栈调试跟踪信息提交给你时,你可以进行调试从而修复问题。程序的mapping.txt文件在每次发布构建时都会被覆盖,所以你一定要注意保存正确的版本。

例如,假设你已经发布了一个应用程序并在继续在新的版本中开发添加新的功能。接着你马上启动混淆器并创建一个新的发布版本。该操作把mapping.txt文件覆盖了。一个用户提交了来自当前发布版本的bug报告,该报告包含了堆栈调试信息。你再也不能对用户的堆栈信息进行调试了,因为这个对应用户本机上版本的mapping.txt文件不存在了。其他覆盖mapping.txt文件的情况还有很多,所以对于每一个可能需要调试的版本,你都要确保有一份拷贝。

混淆器的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于混淆器 编译器 区别、混淆器的信息别忘了在本站进行查找喔。

币安交易所app

币安交易所app是全球顶尖的数字货币交易平台,提供币币交易和合约交易。

APP下载

Copyright © 格特瑞咨询-贵阳抵押贷款公司 版权所有 | 黔ICP备19002813号

免责声明:本站内容仅用于学习参考,信息和图片素材来源于互联网,如内容侵权与违规,请联系我们进行删除,我们将在三个工作日内处理。联系邮箱:303555158#QQ.COM (把#换成@)