最新支持java8的Java反编译工具汇总(大全)!!

大多商业软件,会对程序进行加密、加壳等安全措施以防范软件被破解,从而使得反编译越来越难。反编译是一个对目标可执行程序进行逆向分析,从而得到源代码的过程。尤其是像Java这样的运行在虚拟机上的编程语言,更容易进行反编译得到源代码。

我们知道,在代码支撑方面,JDK 1.7引入了字符串Switch、泛型接口改进等新功能,1.8增加了lambda表达式、方法传递、多重注解等新特性,这使得反编译工具的编写难度加大。今天我们盘点一下目前仍然可用的、相对功能很强大的Java反编译工具(Eclipse插件不做评价),比较老的反编译工具很难支持Java8及其以上版本。

1、Java 反编译器 JD-GUI

JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse、IntelliJ的插件JD-IntelliJ。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件。

最新版本1.4.0,官方网站:。

2、Java 反编译器 procyon-decompiler及其window下独立UI工具luyten

Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错,如反编译匿名类、内部类、Java8 Lambda等等。Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错:字符串的Switch、枚举声明方面、注解方面、匿名类、内部类、Java8新接口规范、Java8 Lambda表达式、Java8 方法传递等。

luyten是Procyon的GUI,是一款操作简单、功能实用的java反编译工具,软件支持*.JAR、*.zip、*.class等类型文件的反编译操作,还原度非常高,支持更多功能设置,如显式导入、类型、合成组件等等,用户可根据不同的需求选择合适的显示项目,结果更明了。

luyten的最新版本0.53,官方网址:,只需要下载luyten即可,不用下载Procyon。Procyon最新版本0.5.30。

3、Android反编译gui工具Jadx

jadx是一款Android反编译gui工具,它支持apk、dex、jar、class、zip、aar等文件。jadx操作方便,反编译后的代码可读性高,同时还拥有较完善的gui界面,除去混淆部分的代码,jadx已经非常接近源代码了。

Jadx最高版本v0.7.1,官方地址。

三个工具中JD-GUI打开jar文件反编译速度飞快、luyten次之、Jadx最慢(有时候需要等好一会,喝杯咖啡先)。三者都会遇到反编译不出来的情况,建议配合使用。

---------------------

原文:

png透明问题解决方法(png图片ie6不兼容问题)

在web前端开发中,经常会遇到需要用背景或图片透明的问题。

首先,目前我们所面临的情况是:

1.在ie7+,firefox,safari,opera这些常用浏览器中,直接使用透明png是没有问题的,但在ie6下却不能透明。

2.ie6目前的时常份额仍然很大,我们必须考虑兼容ie6的问题。

png背景透明解决办法

.pngbackground{

background:url(your.png);

_background: none;

_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='your.png',sizingMethod='scale');

注:当属性前面加_,则只在ie6下被解析。

那 么到目前为止,基本解决了png在ie6下的透明问题,但事情似乎没有这么顺利,很快我们就可以发现,当png作为透明背景的时候,会另自己失去焦点,此 时加在上面的事件如:onmouseover,onclick等事件都失去了作用,这也是滤镜的一个特性,这时候我们需要将该元素的position设置 为relative就可以解决问题,即:

.pngbackground {

position:relative;

background:url(your.png);

_background: none;

_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='your.png',sizingMethod='scale');

png图片解决方案

作为图片插入是用以下代码即可解决。

function correctPNG()

for(var i=0; i {

var img = document.images[i]

var imgName = img.src.toUpperCase()

if (imgName.substring(imgName.length-3, imgName.length) == "PNG")

var imgID = (img.id) ? "id='" + img.id + "' " : ""

var imgClass = (img.className) ? "class='" + img.className + "' " : ""

var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "

var imgStyle = "display:inline-block;" + img.style.cssText

if (img.align == "left") imgStyle = "float:left;" + imgStyle

if (img.align == "right") imgStyle = "float:right;" + imgStyle

if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle

var strNewHTML = " + " style=/"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"

+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"

+ "(src=/'" + img.src + "/', sizingMethod='scale');/">"

img.outerHTML = strNewHTML

i = i-1

};

};

};

if(navigator.userAgent.indexOf("MSIE")>-1)

window.attachEvent("onload", correctPNG);

};

另一种解决方案

在做WEB设计时最让人头痛的就是不同浏览器之间的显示差异,这一点尤其以IE6最让人深恶痛绝。最近就碰到一个非常让人头痛的问题,PNG在IE6下的透明效果失效。研究了差不多三天,终于不完美解决了这个问题。

W3C标准推荐使用PNG图片作为网页首选图像资源,但是漂亮、和谐而且有透明效果的PNG却在IE6下显示得一塌糊涂。为了解决这个问题查阅了很多资料,核心原理是使用IE独有的CSS样式中的behaviro属性,最终用如下方法解决:

1.下载iepngfix.zip,其中有三个文件:iepngfix.htc、iepngfix_tilebg.js、blank.gif,将这几个文件解压出来放到所需要使用png做为CSS背景的网站的根目录下。

2.假定一个div需使用png作为背景,标准的做法是:

#mydiv {

background:url(../img/main.png) no-repeat;

width:739px;

height:366px;

top:12%;

left:20%;

position:absolute;

此时该背景能在FF和IE7下正常显示,但是在IE6下会有恐怖的“灰边”。需要使用滤镜来解决。具体做法是使用上面提到的htc文件,在CSS样式的最后定义一个behaviro属性。新的的样式定义为:

#login_main {

background:url(../img/main.png) no-repeat;

width:739px;

height:366px;

top:12%;

left:20%;

position:absolute;

behavior: url("iepngfix.htc");

此时要注意url内的路径是相对于index.htm来说的,而不是相对于定义其样式的css文件。

3.在index.htm文件中需要引入上文中提到的第二个javascript文件,使用

插入到中

此 时大功告成,使用IE6浏览index.htm文件看看效果,得意的笑吧。顺便提醒一句,对于普通IE6升级成IE7的XP用户,这两种浏览器是无法在同 一个操作系统中共存的,笔者比较愚笨,使用了SUN的virtual box装了一个WIN2K3,幸好virtual box提供全屏和无缝模式,使得虚拟机用起来还是蛮流畅的。

优化:

方案一:可以发现,当需要用到的 png图片比较多时IE6反应会有些迟钝,因为IE6每次加载需要透明的PNG时都会进行一系列的运算,将png中的alpha透明部分用 blank.gif空白位图代替,可以想象这样的计算规模有多庞大。没办法,这是无法避免的,Vista 和IE7早就出来了,还有非常卓越的FF可供选择,使用IE6的客户所占的份额总会渐渐下降的。观察一下,此时使用IE7打开刚刚index.htm可以 发现,本来非常完美而且不需要做任何改动的页面在IE7下也加载得特别慢,看来behaviro属性也影响到了IE7,让IE7也做了繁重的无用功。

此 时我们的目标是将IE7解放出来,查阅各种浏览器的hack,发现只有IE6在CSS中能够认识下划线“_”,所以我们在刚刚的CSS样式中的 behaviro前加上一个下划线。而这个下划线无论是FF或者IE7都是不会去解析的,这样IE7就会忽略这个CSS属性,既而解放了IE7。

方 案二:既然此次处理的目标就是IE6浏览器,所以在首页中的JS加载语句也可以加上一个小小的改动,加上“”标签,既而只针对IE6,而解放了其他浏览器,使它们在页面加载时就忽略 iepngfix_tilebg.js这个文件,提高效率。而可怜的IE6,让它接受暴风骤雨般的CPU消耗吧,没办法,爱莫能助了。在web前端开发中,经常会遇到需要用背景或图片透明的问题。

首先,目前我们所面临的情况是:

1.在ie7+,firefox,safari,opera这些常用浏览器中,直接使用透明png是没有问题的,但在ie6下却不能透明。

2.ie6目前的时常份额仍然很大,我们必须考虑兼容ie6的问题。

png背景透明解决办法

.pngbackground{

background:url(your.png);

_background: none;

_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='your.png',sizingMethod='scale');

注:当属性前面加_,则只在ie6下被解析。

那 么到目前为止,基本解决了png在ie6下的透明问题,但事情似乎没有这么顺利,很快我们就可以发现,当png作为透明背景的时候,会另自己失去焦点,此 时加在上面的事件如:onmouseover,onclick等事件都失去了作用,这也是滤镜的一个特性,这时候我们需要将该元素的position设置 为relative就可以解决问题,即:

.pngbackground {

position:relative;

background:url(your.png);

_background: none;

_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='your.png',sizingMethod='scale');

png图片解决方案

作为图片插入是用以下代码即可解决。

function correctPNG()

for(var i=0; i {

var img = document.images[i]

var imgName = img.src.toUpperCase()

if (imgName.substring(imgName.length-3, imgName.length) == "PNG")

var imgID = (img.id) ? "id='" + img.id + "' " : ""

var imgClass = (img.className) ? "class='" + img.className + "' " : ""

var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "

var imgStyle = "display:inline-block;" + img.style.cssText

if (img.align == "left") imgStyle = "float:left;" + imgStyle

if (img.align == "right") imgStyle = "float:right;" + imgStyle

if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle

var strNewHTML = " + " style=/"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"

+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"

+ "(src=/'" + img.src + "/', sizingMethod='scale');/">"

img.outerHTML = strNewHTML

i = i-1

};

};

};

if(navigator.userAgent.indexOf("MSIE")>-1)

window.attachEvent("onload", correctPNG);

};

另一种解决方案

在做WEB设计时最让人头痛的就是不同浏览器之间的显示差异,这一点尤其以IE6最让人深恶痛绝。最近就碰到一个非常让人头痛的问题,PNG在IE6下的透明效果失效。研究了差不多三天,终于不完美解决了这个问题。

W3C标准推荐使用PNG图片作为网页首选图像资源,但是漂亮、和谐而且有透明效果的PNG却在IE6下显示得一塌糊涂。为了解决这个问题查阅了很多资料,核心原理是使用IE独有的CSS样式中的behaviro属性,最终用如下方法解决:

1.下载iepngfix.zip,其中有三个文件:iepngfix.htc、iepngfix_tilebg.js、blank.gif,将这几个文件解压出来放到所需要使用png做为CSS背景的网站的根目录下。

2.假定一个div需使用png作为背景,标准的做法是:

#mydiv {

background:url(../img/main.png) no-repeat;

width:739px;

height:366px;

top:12%;

left:20%;

position:absolute;

此时该背景能在FF和IE7下正常显示,但是在IE6下会有恐怖的“灰边”。需要使用滤镜来解决。具体做法是使用上面提到的htc文件,在CSS样式的最后定义一个behaviro属性。新的的样式定义为:

#login_main {

background:url(../img/main.png) no-repeat;

width:739px;

height:366px;

top:12%;

left:20%;

position:absolute;

behavior: url("iepngfix.htc");

此时要注意url内的路径是相对于index.htm来说的,而不是相对于定义其样式的css文件。

3.在index.htm文件中需要引入上文中提到的第二个javascript文件,使用

插入到中

此 时大功告成,使用IE6浏览index.htm文件看看效果,得意的笑吧。顺便提醒一句,对于普通IE6升级成IE7的XP用户,这两种浏览器是无法在同 一个操作系统中共存的,笔者比较愚笨,使用了SUN的virtual box装了一个WIN2K3,幸好virtual box提供全屏和无缝模式,使得虚拟机用起来还是蛮流畅的。

优化:

方案一:可以发现,当需要用到的 png图片比较多时IE6反应会有些迟钝,因为IE6每次加载需要透明的PNG时都会进行一系列的运算,将png中的alpha透明部分用 blank.gif空白位图代替,可以想象这样的计算规模有多庞大。没办法,这是无法避免的,Vista 和IE7早就出来了,还有非常卓越的FF可供选择,使用IE6的客户所占的份额总会渐渐下降的。观察一下,此时使用IE7打开刚刚index.htm可以 发现,本来非常完美而且不需要做任何改动的页面在IE7下也加载得特别慢,看来behaviro属性也影响到了IE7,让IE7也做了繁重的无用功。

此 时我们的目标是将IE7解放出来,查阅各种浏览器的hack,发现只有IE6在CSS中能够认识下划线“_”,所以我们在刚刚的CSS样式中的 behaviro前加上一个下划线。而这个下划线无论是FF或者IE7都是不会去解析的,这样IE7就会忽略这个CSS属性,既而解放了IE7。

方 案二:既然此次处理的目标就是IE6浏览器,所以在首页中的JS加载语句也可以加上一个小小的改动,加上“”标签,既而只针对IE6,而解放了其他浏览器,使它们在页面加载时就忽略 iepngfix_tilebg.js这个文件,提高效率。而可怜的IE6,让它接受暴风骤雨般的CPU消耗吧,没办法,爱莫能助了。

本站内容来自用户投稿,如果侵犯了您的权利,请与我们联系删除。联系邮箱:835971066@qq.com

本文链接:http://news.xiuzhanwang.com/post/1888.html

友情链接: