• java反编译,eclipse支持插件


    http://java.decompiler.free.fr/?q=jdeclipse

    按照说明 在eclipse更新插件就可以。

    这样 在一些 闭源的jar文件,你也可以看到 大致的源码。(公司 知道如何 加密混淆 java代码或class文件,居然无法使用jd-gui浏览源码)

    而:http://java.decompiler.free.fr/?q=preview 这个页面居然支持 在chrome下 拖拽class到浏览器,然后再反编译 太神奇了(至少不支持IE8)

    记录下那个页面的源码

    View Code
    <html class="js"><script src="chrome-extension://dooekkcihpllpcfoioflgemikhfejpec/injected.js?sk1=false"></script><head>
     <title>Preview | Java Decompiler</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="shortcut icon" href="/sites/default/themes/jd/favicon.ico" type="image/x-icon">
     <link type="text/css" rel="stylesheet" media="all" href="/css/ad2803645f1f510d8998d3fb4ab2026d.css">
     <script type="text/javascript" src="/js/10580b65ebdc00fda171cf6ef3b996ec.js"></script>
    <script type="text/javascript">
    <!--//--><![CDATA[//><!--
    jQuery.extend(Drupal.settings, { "basePath": "/" });
    //--><!]]>
    </script>
     <meta name="keywords" content="decompiler,java,java 1.5,java 5,annotation,generic,enum,jar,free,freeware,decompilation,d�compilateur">
     <meta name="description" content="Yet another fast Java decompiler">
     <link rel="alternate" type="application/rss+xml" title="Java Decompiler - News" href="/?q=news/all/rss">
     <link rel="alternate" type="application/rss+xml" title="Java Decompiler - Last posts" href="/?q=post/all/rss">
     <link rel="alternate" type="application/rss+xml" title="Java Decompiler - Last comments" href="/?q=comment/all/rss">
    </head>
    <body class="layout-page">
     <div id="container">
    
       
      <div id="page">
       <div id="title">
        <h1><a href="/">Java Decompiler</a></h1>
        <div class="description">Yet another fast Java decompiler</div>
       </div>
       <div id="title-image"></div>
       <div class="header"><div id="block-block-6" class="block block-block">
    
      <div class="content">
        <div id="projects-menu"> <span><a href="/">Home</a></span>
     <span><a href="/?q=jdgui">JD-GUI</a></span>
     <span><a href="/?q=jdeclipse">JD-Eclipse</a></span>
     <span><a href="/?q=jdintellij">JD-IntelliJ</a></span>
     <span class="active"><a href="/?q=preview">Preview</a></span>
    </div>  </div>
    </div>
    </div>
       <div id="frame">
                <div class="node">
     <h2>Preview</h2>
     <div id="demo" class="content">
    
    
    <script type="text/javascript">
      var actions= {
        'hln': function(checked ) { $('#linenumber').css({'display' : checked ? 'none' : 'inline'}); },
        'ho': function(checked ) { $('kbd', $('#javacode')).css({'display' : checked ? 'none' : 'inline'}); },
        'mel': function(checked ) { 
            $('s', $('#linenumber')).css({'display' : checked ? 'none' : 'inline'}); 
            $('s', $('#javacode')).css({'display' : checked ? 'none' : 'inline'}); 
        }
      };
      function checkboxClicked(checkbox) {
        $.cookie('demo.config.' + checkbox.id, checkbox.checked ? true : null);
        actions[checkbox.id](checkbox.checked);
      }
      $(document).ready(function(){
        $('#demo').dndnu({
            decompilerVersion: '0.7.0-SNAPSHOT-20120129',
            onEnter: function(e) { 
                $('#demo .in .title').css("background-color","#ff5500");
            },
            onLeave: function(e) { 
                $('#demo .in .title').css("background-color","#555555");
            },
            onCheckFile: function(file) { 
                return file.size>6 && !!file.name.match('\\.class$')
            },
            onCheckAllFiles: function (filtredFiles) {
                if (filtredFiles.length > 1) {
                    var first = filtredFiles[0].name,
                        pattern='^' + first.substr(0, first.length-6).replace('$','\\$') + '\\$',
                        length=filtredFiles.length,
                        result=new Array();
                    
                    result.push(filtredFiles[0]);
                
                    for (var i=1; i<length; i++) {
                        if (filtredFiles[i].name.match(pattern)) {
                            result.push(filtredFiles[i]);
                        }
                    }
                    
                    return result
                } 
                return filtredFiles
            },
            onStart: function(files) {
                var demo=$('#demo'), list=$('.in .list', demo), content='<ul>', first=files[0].name;
    
                demo.css("cursor","wait");
                list.empty();
                
                $.each(files, function (k) {
                    content += '<li>' + this.name + '<\/li>';
                });
                content += '<\/ul>';
                $(content).appendTo(list);
    
                document.title = first.substr(0, first.length-6) + demo.data('title');
            },
            /* onProgress: function(percent) {
                //$('#demo .in pre').empty();
                $('#demo .in pre').text(percent+'%');
            }, */
            onComplete: function(text) {
                $('#demo .out .content').replaceWith('<div class="content">' + text + '</div>');
                $.each($('#demo .config input'), function (k) {
                    if ((this.type == 'checkbox') && !!actions[this.id]) {
                        actions[this.id](this.checked);
                    }
                });
                $('#demo').css("cursor","default");
            }
        });
        $.each($('#demo .config input'), function (k) {
            if (this.type == 'checkbox') {
                this.checked = ($.cookie('demo.config.' + this.id) == 'true') ? 'true' : '';
            }
        });
        $('#demo').data('title', ' | ' + document.title);
      });
      </script>
    
     <div class="block in">
      <div class="title">Input Class Files</div>
      <div class="content list">Drop class and inner class files here</div>
     </div>
    
     <div class="separator"><img src="/sites/default/images/down.gif"></div>
       
     <div class="block config">
      <div class="title">Decompiler</div>
      <div class="content">
        <form action="#">
          <label for="hln"><input type="checkbox" id="hln" onclick="checkboxClicked(this)">Hide line number</label><br>
          <label for="ho"><input type="checkbox" id="ho" onclick="checkboxClicked(this)">Omit <span class="javacode"><b>this</b></span> if possible</label><br>
          <label for="mel"><input type="checkbox" id="mel" onclick="checkboxClicked(this)">Merge empty lines</label>
        </form>
        </div>
     </div>
    
     <div class="separator"><img src="/sites/default/images/down.gif"></div>
      
     <div class="block out">
      <div class="title">Output Java Code</div>
      <div class="content">
      </div>
     </div>
    
    
     </div>
    </div>   </div>
    
       <div id="footer">
           </div>
      </div>
      
      
     </div>
     <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"><script type="text/javascript">_uacct="UA-4144628-1";urchinTracker();</script>
     
    
    <script src="http://s.skimresources.com/js/28468X864468.skimlinks.js"></script></body><script>(function () {
            var affect = function() { return {}; }
            var abjure = function() { }
            document.getSelection = affect;
            window.getSelection = affect;
            window.print = abjure;
            window.moveTo = abjure;
            window.moveBy = abjure;
            window.resizeTo = abjure;
            window.resizeBy = abjure;
        })();</script></html>
  • 相关阅读:
    Python从入门到精通系列文章总目录
    使用465端口加密发邮件
    kubernetes学习14—Dashboard搭建和认证
    kubernetes学习01—kubernetes介绍
    CSS基础
    SVN 命令行的使用
    Python判断字符集
    Flask框架(2)-JinJa2模板
    搭建ntp服务器
    Ansible的Playbook的编写
  • 原文地址:https://www.cnblogs.com/ayanmw/p/2534226.html
Copyright © 2020-2023  润新知