当前位置:首页 » 编程软件 » 反编译软件运行速度

反编译软件运行速度

发布时间: 2022-05-29 20:48:32

A. 安卓APP的广告如何去除严重影响软件打开速度。如图:

理论上可以反编译破除,但是反编译之后除非破解Android核心,不然不能安装,虽然可以自己签个名,但是回导致签名冲突无法升级,反编译需要掌握编程语言,c启蒙,java撑大梁

B. linux 下,编译时启用-g选项,会不会影响运行速度。发布版本时,要不要启用-g选项

加上-g后肯定会影响运行效率的,而且包含代码的很多信息,一来为了提高效率,二是防止被别人很容易的反编译,发布时使用strip去除debug信息。

C. JAVA反编译软件

由于JAVA语言安全性高、代码优化、跨平台等特性,从1995年5月由SUN公司发布后,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位。 不过,JAVA最突出的跨平台优势使得它不能被编译成本地代码,而要以中间代码的形式运行在虚拟机环境中,这使得JAVA的反编译要比别的高级语言容易实现,并且反编译的代码经过优化后几乎可以与源代码相媲美。 为了更好地保护知识产权,避免本公司的智力成果轻易被人窃取,开发者有必要对反编译工具深入了解,以便有针对性地采取保护措施。 目前,比较流行的JAVA反编译工具有近30种,其中有三款堪称精品: 一、 应用广泛的JAD 在众多的JAVA反编译工具中,有几种非常着名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和国产的JAVA源代码反编译专家。 JAD本身是一个命令行工具,没有图形界面,上述的这些工具大多是在JAD内核的基础之上加了一个图形界面而已。这么多种产品的共同选择,足可证明JAD在JAVA反编译领域中的尊贵地位。 JAD是使用Microsoft Visual C++开发的,运行速度非常快,可以处理很复杂的JAVA编译文件。众多的参数使JAD可以灵活应付多种加密手段,令反编译的代码更加优化和易读。由于JAD参数太多,没必要一一解释,其中有几个最常用的如下(以JAD 1.5.8f版本为例): -d - 用于指定输出文件的目录 -s - 输出文件扩展名(默认为: .jad),通常都会把输出文件扩展名直接指定为.java,以方便修改的重新编译。 -8 - 将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。 最常用的反编译指令如下所示: Jad –d c:\javasource –s .java -8 javatest.class 这条指令将当前目录下的javatest.class反编译为javatest.java并保存在c:\javasource目录里,其中的提示输出为中文,而不是Unicode代码。 二、 源码开放的JODE JODE是全球最大的开源项目网站Sourceforge.net的成员,在所有的JAVA反编译器中,JODE的反编译效果是最好的,尤其是对付一些常见的加密手段,例如混淆技术等,更是出类拔粹。 JODE本身也是纯JAVA开发的,最近越来越多的JAVA反编译软件也选择JODE来做它们的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit’s JavaInsight plugin等。 JODE是一个可运行的JAR文件,在windows环境下双击即可运行。 需要特别说明的是,JODE不是通过常规的Open->File的方式来加载JAVA编译后的类文件(*.class)或是类包(*.jar)的, 而是通过在Options菜单中的Set Classpath来实现的,单独的类文件可以将它的上一级目录作为Classpath输入,然后再选择Reload Classpath即可。 新加入的类包或是类的名字会在左侧窗口出现,双击类包名可以展开目录树结构,双击需要反编译的类名则在右上角的窗口中直接显示反编译后的源代码。 三、 独树一帜的DAVA DAVA不是一个独立的JAVA反编译器,而是JAVA代码优化工具Soot的一部分。Soot和JODE一样是纯JAVA开发的,也是一个独立的JAR包,但却不能通过双击直接运行,而是象JAD一样在命令行状态运行。 Soot对环境变量的配置要求非常严格,通常情况下要对CLASSPATH做如下设置: Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.; 其中的c:\sootdi

D. apk反编译出现异常,谁能告诉我是怎么回事

我用的是apk改之理,反编译异常应该是apk安装包不完整,也就是说系统把apk进行了odex优化,把apk安装包里后缀dex的文件提取出来,从而加快软件运行速度,网上下个odex合并工具试一下,虽然我试过合并odex和apk文件,结果还是反编译失败。

E. JAVA反编译软件

由于JAVA语言安全性高、代码优化、跨平台等特性,从1995年5月由SUN公司发布后,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位。
不过,JAVA最突出的跨平台优势使得它不能被编译成本地代码,而要以中间代码的形式运行在虚拟机环境中,这使得JAVA的反编译要比别的高级语言容易实现,并且反编译的代码经过优化后几乎可以与源代码相媲美。
为了更好地保护知识产权,避免本公司的智力成果轻易被人窃取,开发者有必要对反编译工具深入了解,以便有针对性地采取保护措施。
目前,比较流行的JAVA反编译工具有近30种,其中有三款堪称精品:
一、 应用广泛的JAD
在众多的JAVA反编译工具中,有几种非常着名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和国产的JAVA源代码反编译专家。
JAD本身是一个命令行工具,没有图形界面,上述的这些工具大多是在JAD内核的基础之上加了一个图形界面而已。这么多种产品的共同选择,足可证明JAD在JAVA反编译领域中的尊贵地位。
JAD是使用Microsoft Visual C++开发的,运行速度非常快,可以处理很复杂的JAVA编译文件。众多的参数使JAD可以灵活应付多种加密手段,令反编译的代码更加优化和易读。由于JAD参数太多,没必要一一解释,其中有几个最常用的如下(以JAD 1.5.8f版本为例):
-d
- 用于指定输出文件的目录
-s - 输出文件扩展名(默认为: .jad),通常都会把输出文件扩展名直接指定为.java,以方便修改的重新编译。
-8 - 将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。
最常用的反编译指令如下所示:
Jad –d c:\javasource –s .java -8 javatest.class
这条指令将当前目录下的javatest.class反编译为javatest.java并保存在c:\javasource目录里,其中的提示输出为中文,而不是Unicode代码。

二、 源码开放的JODE
JODE是全球最大的开源项目网站Sourceforge.net的成员,在所有的JAVA反编译器中,JODE的反编译效果是最好的,尤其是对付一些常见的加密手段,例如混淆技术等,更是出类拔粹。
JODE本身也是纯JAVA开发的,最近越来越多的JAVA反编译软件也选择JODE来做它们的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit’s JavaInsight plugin等。
JODE是一个可运行的JAR文件,在windows环境下双击即可运行。
需要特别说明的是,JODE不是通过常规的Open->File的方式来加载JAVA编译后的类文件(*.class)或是类包(*.jar)的, 而是通过在Options菜单中的Set Classpath来实现的,单独的类文件可以将它的上一级目录作为Classpath输入,然后再选择Reload Classpath即可。
新加入的类包或是类的名字会在左侧窗口出现,双击类包名可以展开目录树结构,双击需要反编译的类名则在右上角的窗口中直接显示反编译后的源代码。

三、 独树一帜的DAVA
DAVA不是一个独立的JAVA反编译器,而是JAVA代码优化工具Soot的一部分。Soot和JODE一样是纯JAVA开发的,也是一个独立的JAR包,但却不能通过双击直接运行,而是象JAD一样在命令行状态运行。
Soot对环境变量的配置要求非常严格,通常情况下要对CLASSPATH做如下设置:
Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;
其中的c:\sootdir\是下载的soot类包放置的路径,CLASSPATH末尾的.;代表了当前目录,如果不加上这个的话Soot经常会报一个找不到类的错误。
DAVA是作为Soot的一个参数使用的,通常的用法如下:
Java soot.Main –f dava –d c:\javasource javatest
注意最后的类名不用带.class后缀,因为它默认是处理class文件,这个操作与前述的JAD的参数效果相同。
DAVA采取了流程优化的方式进行反编译,与传统反编译思路不尽相同,但却对改变流程类的加密方法有独特的反编译效果。
上述的三种工具各有千秋,但效果都非常不错。经测试,它们基本上都可以把JDK自带的一些例程完全反编译,然后不加任何修改可再编译成功,并能正常运行!

F. 请各位高手帮帮忙,关于电脑病毒的问题

explorer.exe是Windows程序管理器或者Windows资源管理器,它用于管理Windows图形壳,包括开始菜单、任务栏、桌面和文件管理。删除该程序会导致Windows图形界面无法适用。注意:explorer.exe也有可能是w32.Codered和w32.mydoom.b@mm病毒。该病毒通过email邮件传播,当你打开病毒发送的附件时,即被感染。该病毒会在受害者机器上建立SMTP服务。该病毒允许攻击者访问你的计算机、窃取密码和个人数据。该进程的安全等级是建议删除。

2.适时砍掉Explorer.exe

大家都知道WINDOWS在运行时会自动加载Explorer.exe进程,这个进程主要负责显示系统桌面的图标,任务栏等,相当于WINDOWS的脸面,有时放下系统的面子,却能解决不少问题!请看:

1.让注册表快速生效
有时候修改完注册表信息后需要点击F5按钮,当F5没用时候则需要重新启动,才能使修改生效,其实不需要这么麻烦.按下"CTRL+ALT+DEL",打开任务管理器结束进程选项中的Explorer.exe,然后在点击"任务管理器"中的"新建任务",在打开的文本框中输入Explorer.exe,然后回车确认,就重新加载了Explorer.exe,让注册表快速生效.
2.删除顽固文件,替换系统文件
当要删除文件的时候,.提示"该文件正被别的进程使用,不能删除",如果关闭使用该文件的程序或在"任务管理器中"结束该文件中后好不能删除,可以结束Explorer.exe然后在命令提示符窗口进入该文件的所在目录,用"DEL"命令删除后,重新加载Explorer.exe即可.
替换系统文件时,按照以上方法在命令提示符窗口用"COPY"命令或者"RELAACE"命令就可以替换系统文件.
3.缓解系统反应迟缓
如果打开太多的应用程序,WINDOWS就会停止响应而类似死机时,可以不需要重启系统,可以按下"CTRL+ALT+DEL"组合键,打开"任务管理器"结束占用大部分CPU资源的Explorer.exe,然后再重新加载.就可以恢复正常.
4.加速软件运行速度
在低配置系统中使用很耗系统资源的软件比如"PHOTOSHOP,AUTOCAD"等是,在打开软件后,结束Explorer.exe进程,腾出比较多的内存空间,加快软件运行速度,要返回桌面只要重新加载Explorer.exe进程。信息来源:不详

IEXPLORE.EXE是病毒吗?
在进程里先结束IEXPLORE.EXE然后到网上找相关的杀毒工具

iexplore.exe是Microsoft Internet Explorer的主程序。这个微软Windows应用程序让你在网上冲浪,和访问本地Interanet网络。这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。iexplore.exe同时也是Avant网络浏览器的一部分,这是一个免费的基于Internet Explorer的浏览器。注意iexplore.exe也有可能是Trojan.KillAV.B病毒,该病毒会终止你的反病毒软件,和一些Windows系统工具,该进程的安全等级是建议删除
这个东西可以说是病毒,也可以说不是病毒。
因为微软的浏览器就是IEXPLORE.EXE,但是它一般情况随系统被安装在C:\Program Files\Internet Explorer下面。那么,如果发现这个文件是在这个目录下面的,一般情况不是病毒,当然,不包括已经被感染了的情况;还有一种情况,就是IEXPLORE.EXE在C:\WINDOWS\system32\下面,那么这个十有八九都是病毒。

动态链接库函数启动器——Rundll32

经常听到有些朋友说:呀!系统的注册表启动项目有rundll32.exe,系统进程也有rundll32.exe,是不是病毒呀?其实,这是对rundll32.exe接口不了解,它的原理非常简单,了解并掌握其原理对于我们平时的应用非常有用,如果能理解了原理,我们就能活学活用,自己挖掘DLL参数应用技巧。

Rundll32.exe和Rundll.exe的区别

所谓Rundll.exe,可以把它分成两部分,Run(运行)和DLL(动态链接库),所以,此程序的功能是运行那些不能作为程序单独运行的DLL文件。而Rundll32.exe则用来运行32位DLL文件。Windows 2000/XP都是NT内核系统,其代码都是纯32位的,所以在这两个系统中,就没有rundll.exe这个程序。

相反,Windows 98代码夹杂着16位和32位,所以同时具有Rundll32.exe和Rundll.exe两个程序。这就是为什么Windows 98的System文件夹为主系统文件夹,而到了Windows 2000/XP时就变成System32为主系统文件夹(这时的System文件夹是为兼容16位代码设立的)。

Rundll.exe是病毒?

无论是Rundll32.exe或Rundll.exe,独立运行都是毫无作用的,要在程序后面指定加载DLL文件。在Windows的任务管理器中,我们只能看到rundll32.exe进程,而其实质是调用的DLL。我们可以利用进程管理器等软件来查看它具体运行了哪些DLL文件。

有些木马是利用Rundll32.exe加载DLL形式运行的,但大多数情况下Rundll32.exe都是加载系统的DLL文件,不用太担心。另外要提起的是,有些病毒木马利用名字与系统常见进程相似或相同特点,瞒骗用户。所以,要确定所运行的Rundll32.exe是在%systemroot%system32目录下的,注意文件名称也没有变化。

相信大家在论坛上很常看见那些高手给出的一些参数来简化操作,如rundll32.exe shell32.dll,Control_RunDLL,取代了冗长的“开始→设置→控制面板”,作为菜鸟的我们心里一定痒痒的。他们是怎么知道答案的?我们如何自己找到答案?分析上面命令可以知道,其实就是运行Rundll32.exe程序,指定它加载shell32.dll文件,而逗号后面的则是这个DLL的参数。了解了其原理,下面就可以自己挖掘出很多平时罕为人知的参数了。

第一步:运行eXeScope软件,打开一个某个DLL文件,例如shell32.dll。

第二步:选择“导出→SHELL32.DLL”,在右边窗口就可以看到此DLL文件的参数了。

第三步:这些参数的作用一般可以从字面上得知,所以不用专业知识。要注意的是,参数是区分大小写的,在运行时一定要正确输入,否则会出错。现在随便找一个参数,例如RestartDialog,从字面上理解应该是重启对话框。组合成一个命令,就是Rundll32.exe shell32.dll,RestartDialog ,运行后可以看见平时熟悉的Windows重启对话框。

现在,我们已经学会了利用反编译软件来获取DLL文件中的参数,所以以后看到别人的一个命令,可以从调用的DLL文件中获取更多的命令。自己摸索,你就能了解更多调用DLL文件的参数了。

小资料

常用的rundll32参数

命令: rundll32.exe shell32.dll,Control_RunDLL

功能: 显示控制面板

命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1

功能: 显示“控制面板→辅助选项→键盘”

命令: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1

功能: 执行“控制面板→添加新硬件”

命令: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter

功能: 执行“控制面板→添加新打印机”

命令:rundll32.exe DISKCOPY.DLL,DiskCopyRunDll

功能:启动软盘复制窗口

G. 关于学JAVA

一. 工具的重要性

江湖中人为抢夺"屠龙刀"等神兵利器而掀起阵阵腥风血雨。世界列强为称霸世界或求自保而争相研发核武器、航空母舰。为什么?是因为认识到工具对人类的重要性。

《现代汉语词典》上对人的定义是:人是能制造工具并使用工具进行劳动的高等动物。一部生产力发展史,就是人的生产工具不断发明改变的历史;一部社会发展史,是社会工具即组织及其制度发明、运用和变更的历史;而一部科学史,就是人用自然和人工的语言、逻辑规范,以及使用多种实验工具的认识史或发现史。可见工具之于人类是多么的重要。JAVA开发人员当然也不例外,在开发过程中需要用到形形色色的工具,这些工具可以帮助我们高效率的开发出满足客户需要的产品。

2004年01月07日, 由10家软件公司组成的JavaToolsCommunity(JTC)组织宣布成立。该组织致力于为开发商提供更为简单和高效的Java工具。JTC还希望为Java整合开发环境(IDE)提供一个通用的插件(add-on,plug-in)系统。通过建立一个插件与Java工具连接的标准化途径,开发商就能够混合使用来自不同供应商的各种不同工具。JTC目前正在开发一个名为JSR198的插件标准化系统。令人关注的Java工具重量级企业IBM和Borland目前还拒绝加入该组织,原因是什么?笔者认为根本原因在于这两家公司都拥有出色的JAVA开发工具。Borland的JBuilder,IBM支持的Eclipse,这两种IDE占据了绝大多数的市场份额。因此他们不想加入由SUN公司把持话语权的JTC也就可想而知了。在工具的标准方面,又一场龙虎斗拉开了序幕。

二.工具分类

那么JAVA开发人员需要什么类型的工具?如何选择工具?我们下面就开始分类进行探讨。

1. 纯文本开发工具

在开始学习JAVA的时候,我们一般使用纯文本的开发工具来编写JAVA程序。常见的纯文本编辑工具有Notepad记事本、Editplus、VI、Emacs、JCreator、UltraEdit等等。其中VI、Emacs是在Linux环境下使用,其余工具在Windows下使用。Notepad不支持关键词高亮显示,并且需切换到命令终端编译运行,因此一般使用在机器上没有别的编辑器的临时场合。JCreator支持关键词高亮显示,但只能够用于编写JAVA Applet及Application,在学习J2SE的时候使用的人还挺多的。

UltraEdit是一个很好的文字、Hex、ASCII 码编辑器,它的默认配置可以对C/C++, VB, HTML, Java和 Perl进行语法着色。可同时编辑多个文件。一般常会用其来修改EXE或DLL文件,如破解软件、修改游戏等等。与EditPlus很相似。

EditPlus 是 32 位文本编辑程序器,它可以完全替换记事本,它也提供网页开发人员及程序设计师许多强悍的功能。支持HTML、CSS、PHP、ASP、Perl、C/C++、Java、JavaScript 及 VBScript的语法关键词高亮显示。并且它可以在自定义语法文件后扩充支持其他的程序设计语言。嵌合网页浏览器作 HTML 页的预览,及 FTP 命令做本地文件上传到 FTP 服务器。在JAVA开发人员中很有市场,尤其是初学者。我们把编辑、编译、运行Applet/Application都集成在Editplus中,可以认为它就是一个小型的IDE。也是笔者钟爱的开发工具,强烈推荐。

2.反编译、混淆器工具

由于黑客的频繁活动,使得Java类文件面临着反编译的挑战。有一些工具能够对Java源代码进行反工程,其结果甚至以比普通Java文件更可读的方式, 尽管普通的Java文件(由于代码风格不同)有注释。许可证和软件过期对于用户们来说将变得无用 。因此,防止软件被反编译或使得反编译的结果变得无意义对于Java来说非常重要。混淆器能够保护软件使之不被反编译。它通过混淆类文件使得反编译无效,并把敏感的名字指代变成另一个名字空间,这样可以使反编译的结果毫无疑义。

反编译器能够把字节码class文件反编译成源代码, 混淆器能够保护软件使之不被反编译, 反编译器与混淆器是矛与盾的关系。

JAD、Decafe Pro、DJ Java Decompiler都是Java Class文件的反编译软件。JAD是字符终端的工具,Decafe Pro与DJ Java Decompiler都是GUI界面,在功能上几乎所有的反编译器都差不多,选择哪种就看你的爱好了。不过值得一提的是DJ Java Decompiler,它不需要额外安装JVM(Java Virtual Machine)或是JDK的工具即可使用。不单如此,DJJava Decompiler也兼具有Java程序编辑工具的角色,提供一些辅助功能便于程序撰写与修改,因此值得推荐。另外还有国内程序员编写的"小颖JAVA源代码反编译超级引挚",支持目录级的反编译,为支持国货起见,在此推荐。

DashO是第三代的Java混淆器(obfuscator)、压缩机(compactor)、优化工具和水印工具,功能很强大,它可以为您的JAVA程序提供反编译保护、提高运行速度和减少程序体积,可惜不是免费的。免费的混淆器有ProGuard RetroGuard以及SUN公司的JODE等等。还有就是多数人使用的JBuilder、Eclipse中集成的混淆器。

3.调试工具

在JAVA语言的早期,一个典型的开发者使用非常陈旧的方法调试程序:使用System.out.println() 方法,现在还依然常用。代码的跟踪信息被打印到控制台、文件或者套接字。当要发布我们的软件时不得不逐个找到这些调试输出,把它们注释掉,当需要维护软件时又要去开启这些调试输出,烦不胜烦。因此逐渐发展出其他的一些调试工具。

下面总结几种JAVA调试工具:

●IDE(集成开发环境) 包含它们自己的调试器 (例如JBuilder、Eclipse)

●单独的GUI工具 (例如JIKES, JAVADT, 以及JProbe)

●基于文本和命令行的工具 (例如Sun JDB)

●野蛮的使用编辑器 (例如Notepad 或者 VI) 检查堆栈描绘(stack traces)

IDE 和独立的GUI 调试器对于初学者是最容易的并且被证明是最节省时间的。调试器将引导你到程序崩溃的地方。在调试器里面执行程序,使用鼠标设置断点并穿越代码。使用这些调试器的不利方面是并非所有的IDE调试器都支持最新的Java API和技术 (例如servlets 和 EJB 组件)。

H. 如何保护Java程序 防止Java反编译

Java是一种跨平台的、解释型语言。Java 源代码编译中间“字节码”存储于class文件中。Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如变量名、方法名等。因此,Java中间代码的反编译就变得非常容易。目前市场上有许多免费的、商用的反编译软件,都能够生成高质量的反编译后的源代码。所以,对开发人员来说,如何保护Java程序就变成了一个非常重要的挑战。本文首先讨论了保护Java程序的基本方法,然后对代码混淆问题进行深入研究,最后结合一个实际的应用程序,分析如何在实践中保护Java程序。 反编译成为保护Java程序的最大挑战 通常C、C++等编程语言开发的程序都被编译成目标代码,这些目标代码都是本机器的二进制可执行代码。通常所有的源文件被编译、链接成一个可执行文件。在这些可执行文件中,编译器删除了程序中的变量名称、方法名称等信息,这些信息往往是由内存地址表示,例如如果需要使用一个变量,往往是通过这个变量的地址来访问的。因此,反编译这些本地的目标代码就是非常困难的。 Java语言的出现,使得反编译变得非常容易而有效。原因如下:1.由于跨平台的需求,Java的指令集比较简单而通用,较容易得出程序的语义信息;2.Java编译器将每一个类编译成一个单独的文件,这也简化了反编译的工作;3.Java 的Class文件中,仍然保留所有的方法名称、变量名称,并且通过这些名称来访问变量和方法,这些符号往往带有许多语义信息。由于Java程序自身的特点,对于不经过处理的Java程序反编译的效果非常好。 目前,市场上有许多Java的反编译工具,有免费的,也有商业使用的,还有的是开放源代码的。这些工具的反编译速度和效果都非常不错。好的反编译软件,能够反编译出非常接近源代码的程序。因此,通过反编译器,黑客能够对这些程序进行更改,或者复用其中的程序。因此,如何保护Java程序不被反编译,是非常重要的一个问题。 常用的保护技术 由于Java字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种常用的方法,用于保护Java字节码不被反编译。通常,这些方法不能够绝对防止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环境和弱点。 隔离Java程序 最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式。例如,开发人员可以将关键的Java Class放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Class文件。这样黑客就没有办法反编译Class文件。目前,通过接口提供服务的标准和协议也越来越多,例如 HTTP、Web Service、RPC等。但是有很多应用都不适合这种保护方式,例如对于单机运行的程序就无法隔离Java程序。这种保护方式见图1所示。 图1隔离Java程序示意图 对Class文件进行加密 为了防止Class文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这些类的解密可以由硬件完成,也可以使用软件完成。 在实现时,开发人员往往通过自定义ClassLoader类来完成加密类的装载(注意由于安全性的原因,Applet不能够支持自定义的ClassLoader)。自定义的ClassLoader首先找到加密的类,而后进行解密,最后将解密后的类装载到JVM当中。在这种保护方式中,自定义的ClassLoader是非常关键的类。由于它本身不是被加密的,因此它可能成为黑客最先攻击的目标。如果相关的解密密钥和算法被攻克,那么被加密的类也很容易被解密。这种保护方式示意图见图2。 图2 对Class文件进行加密示意图 转换成本地代码 将程序转换成本地代码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅转换关键部分模块,Java程序在使用这些模块时,需要使用JNI技术进行调用。 当然,在使用这种技术保护Java程序的同时,也牺牲了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的工作。不过对于一些关键的模块,有时这种方案往往是必要的。 为了保证这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没有被黑客更改。如果签名检查通过,则调用相关JNI方法。这种保护方式示意图见图3。 代码混淆
图3 转换成本地代码示意图 代码混淆是对Class文件进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是从实际情况来看,由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的Java代码还是能够很好地防止反编译。下面我们会详细介绍混淆技术,因为混淆是一种保护Java程序的重要技术。图4是代码混淆的示意图。
图4 代码混淆示意图 几种技术的总结 以上几种技术都有不同的应用环境,各自都有自己的弱点,表1是相关特点的比较。 混淆技术介绍 表1 不同保护技术比较表
到目前为止,对于Java程序的保护,混淆技术还是最基本的保护方法。Java混淆工具也非常多,包括商业的、免费的、开放源代码的。Sun公司也提供了自己的混淆工具。它们大多都是对Class文件进行混淆处理,也有少量工具首先对源代码进行处理,然后再对Class进行处理,这样加大了混淆处理的力度。目前,商业上比较成功的混淆工具包括JProof公司的1stBarrier系列、Eastridge公司的JShrink和4thpass.com的SourceGuard等。主要的混淆技术按照混淆目标可以进行如下分类,它们分别为符号混淆(Lexical Obfuscation)、数据混淆(Data Obfuscation)、控制混淆(Control Obfuscation)、预防性混淆(Prevent Transformation)。 符号混淆 在Class中存在许多与程序执行本身无关的信息,例如方法名称、变量名称,这些符号的名称往往带有一定的含义。例如某个方法名为getKeyLength(),那么这个方法很可能就是用来返回Key的长度。符号混淆就是将这些信息打乱,把这些信息变成无任何意义的表示,例如将所有的变量从vairant_001开始编号;对于所有的方法从method_001开始编号。这将对反编译带来一定的困难。对于私有函数、局部变量,通常可以改变它们的符号,而不影响程序的运行。但是对于一些接口名称、公有函数、成员变量,如果有其它外部模块需要引用这些符号,我们往往需要保留这些名称,否则外部模块找不到这些名称的方法和变量。因此,多数的混淆工具对于符号混淆,都提供了丰富的选项,让用户选择是否、如何进行符号混淆。 数据混淆 图5 改变数据访问 数据混淆是对程序使用的数据进行混淆。混淆的方法也有多种,主要可以分为改变数据存储及编码(Store and Encode Transform)、改变数据访问(Access Transform)。 改变数据存储和编码可以打乱程序使用的数据存储方式。例如将一个有10个成员的数组,拆开为10个变量,并且打乱这些变量的名字;将一个两维数组转化为一个一维数组等。对于一些复杂的数据结构,我们将打乱它的数据结构,例如用多个类代替一个复杂的类等。 另外一种方式是改变数据访问。例如访问数组的下标时,我们可以进行一定的计算,图5就是一个例子。 在实践混淆处理中,这两种方法通常是综合使用的,在打乱数据存储的同时,也打乱数据访问的方式。经过对数据混淆,程序的语义变得复杂了,这样增大了反编译的难度。 控制混淆 控制混淆就是对程序的控制流进行混淆,使得程序的控制流更加难以反编译,通常控制流的改变需要增加一些额外的计算和控制流,因此在性能上会给程序带来一定的负面影响。有时,需要在程序的性能和混淆程度之间进行权衡。控制混淆的技术最为复杂,技巧也最多。这些技术可以分为如下几类: 增加混淆控制 通过增加额外的、复杂的控制流,可以将程序原来的语义隐藏起来。例如,对于按次序执行的两个语句A、B,我们可以增加一个控制条件,以决定B的执行。通过这种方式加大反汇编的难度。但是所有的干扰控制都不应该影响B的执行。图6就给出三种方式,为这个例子增加混淆控制。 图6 增加混淆控制的三种方式 控制流重组 重组控制流也是重要的混淆方法。例如,程序调用一个方法,在混淆后,可以将该方法代码嵌入到调用程序当中。反过来,程序中的一段代码也可以转变为一个函数调用。另外,对于一个循环的控制流,为可以拆分多个循环的控制流,或者将循环转化成一个递归过程。这种方法最为复杂,研究的人员也非常多。 预防性混淆 这种混淆通常是针对一些专用的反编译器而设计的,一般来说,这些技术利用反编译器的弱点或者Bug来设计混淆方案。例如,有些反编译器对于Return后面的指令不进行反编译,而有些混淆方案恰恰将代码放在Return语句后面。这种混淆的有效性对于不同反编译器的作用也不太相同的。一个好的混淆工具,通常会综合使用这些混淆技术。 案例分析 在实践当中,保护一个大型Java程序经常需要综合使用这些方法,而不是单一使用某一种方法。这是因为每种方法都有其弱点和应用环境。综合使用这些方法使得Java程序的保护更加有效。另外,我们经常还需要使用其它的相关安全技术,例如安全认证、数字签名、PKI等。 本文给出的例子是一个Java应用程序,它是一个SCJP(Sun Certificate Java Programmer)的模拟考试软件。该应用程序带有大量的模拟题目,所有的题目都被加密后存储在文件中。由于它所带的题库是该软件的核心部分,所以关于题库的存取和访问就成为非常核心的类。一旦这些相关的类被反编译,则所有的题库将被破解。现在,我们来考虑如何保护这些题库及相关的类。 在这个例子中,我们考虑使用综合保护技术,其中包括本地代码和混淆技术。因为该软件主要发布在Windows上,因此转换成本地代码后,仅仅需要维护一个版本的本地代码。另外,混淆对Java程序也是非常有效的,适用于这种独立发布的应用系统。 在具体的方案中,我们将程序分为两个部分,一个是由本地代码编写的题库访问的模块,另外一个是由Java开发的其它模块。这样可以更高程度地保护题目管理模块不被反编译。对于Java开发的模块,我们仍然要使用混淆技术。该方案的示意图参见图7。 图7 SCJP保护技术方案图 对于题目管理模块,由于程序主要在Windows下使用,所以使用C++开发题库访问模块,并且提供了一定的访问接口。为了保护题库访问的接口,我们还增加了一个初始化接口,用于每次使用题库访问接口之前的初始化工作。它的接口主要分为两类: 1. 初始化接口 在使用题库模块之前,我们必须先调用初始化接口。在调用该接口时,客户端需要提供一个随机数作为参数。题库管理模块和客户端通过这个随机数,按一定的算法同时生成相同的SessionKey,用于加密以后输入和输出的所有数据。通过这种方式,只有授权(有效)的客户端才能够连接正确的连接,生成正确的SessionKey,用于访问题库信息。非法的客户很难生成正确的SessionKey,因此无法获得题库的信息。如果需要建立更高的保密级别,也可以采用双向认证技术。 2. 数据访问接口 认证完成之后,客户端就可以正常的访问题库数据。但是,输入和输出的数据都是由SessionKey所加密的数据。因此,只有正确的题库管理模块才能够使用题库管理模块。图8时序图表示了题库管理模块和其它部分的交互过程。 图8 题库管理模块和其它部分的交互过程图

I. 反编译游戏

现在手机游戏 要不是JAVA 要不是 手机系统本身支持的软件格式.
JAVA 那肯定是用JAVA写的了, 如果是系统本身有可能是用C.

一般非智能手机 ,如摩托罗拉啊,若积压啊都会支持JAVA,所以也只能玩JAVA格式的游戏了. 如果你手机是国产品牌的话, 就有点危险了,首先要看是否支持JAVA, 支持的话有些支持的也不是很好,当然有的还是很完美的.
如果你手机是山载 杂牌,那更危险了. 有些根本就不支持JAVA. 那什么游戏也别想装了. 还有这些会自带游戏.这些游戏相当垃圾, 并且有些还扣费.
我发现,这些手好多都自带了那几种游戏, 都一样, 比如 什么摸法兽司啊等.

如果你手机为智能,那就再好不过了, 首先你要看系统是什么型号的.
然后找这个型号支持的软件格式. 然后下载这种格式的游戏.
当然JAVA也是支持的, 有些智能手机需要下载 软件安装 JAVA运行平台才可以支持JAVA, 所以论速度, 和稳定性, 玩系统本身运行的格式的游戏再好不过了.
如果需要安装JAVA平台,就要选择好点的程序,这样也可以非常完美的运行JAVA.
毕竟现在JAVA游戏 相当流行和丰富, 很有新意.

还有一种游戏 就是 模拟器游戏了, 这需要是智能手机,因为模拟器软件格式都是系统下的格式, 很少是JAVA格式,也有,我搜索过,也运行过,但在我的3星上没成功运行. 所以 要想玩模拟器游戏还是智能比较好.

模拟器游戏是相当经典的,是JAVA游戏无法比的.

比如FC,SFC,MD,GB,GBA,等模拟器, 我的手机 运行 雪山兄弟(就是小时候在游戏厅玩的那个) 相当流畅,当然还有其他的MD ,比如吞食天地啊, 数码宝贝(gb)等.

要想用手机玩游戏爽的话,只能是智能了.

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:645
制作脚本网站 发布:2025-10-20 08:17:34 浏览:936
python中的init方法 发布:2025-10-20 08:17:33 浏览:632
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:821
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:731
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1066
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:299
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:160
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:852
python股票数据获取 发布:2025-10-20 07:39:44 浏览:763