关于扰乱器与反编译 (转载)

编译

以下摘录于Delphibbs中Dr.yysun 的回答,希望对你有帮助

用 Java 编程的人, 如果不想公开源程序, 就得与反编译器作斗争,
必须使用反编译器,先看看别人将会如何看你的程序,再看看Obfuscators(扰乱器)的效果.

JAD 是 Windows 下效果极佳的反编译器 http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
围绕这个引擎, 有很多图形界面, 例如 FrontEnd. (我常用)

JODE 是免费的 Java 反编译器和优化器.
http://jode.sourceforge.net/

Intr@byte 是个 JBuilder 的外挂工具 (OpenTool), 使得您在 JB 中能打开 *.class
http://www.webappcabaret.com/bjb/index.jsp
它也使用 JAD 引擎, 并限制为只反编译器类的定义部分.

有些网站可以帮您反编译, 您给个 URL, 它分析出其中有多少个 applet,
然后, 再反编译掉. http://www.jreveal.org/

最后, 您想了解反编译原理, 想自己编个反编译器和扰乱器, 这里有本免费得书 .
http://www.riis.com/depile.html

其他到 yahoo 里找吧, 太多了.

JJams_King: 扰乱器就是把 bytecode 中的类名,方法名,变量名等变成无意义的符号。
例如,以下源程序:
package temp;
public class HelloWorld {
  String helloWorld = "Hello World";
  String byeWorld = "Bye World";
  public static void main(String[] args) {
      new HelloWorld(true);
      new HelloWorld(false);
  }
  HelloWorld(boolean isHappy) {
      if (isHappy) {
        System.out.println(helloWorld);
      }
      else {
        System.out.println(byeWorld);
      }
  }
}
加扰后,再反编译出来是:
package a;
import java.io.PrintStream;
public class a
{
    String a;
    String b;
    a(boolean flag)
    {
        a = "Hello World";
        b = "Bye World";
        if (flag)
            System.out.println(a);
        else
            System.out.println(b);
    }
    public static void main(String astring[])
    {
        new a(true);
        new a(false);
    }
}

而更高级的扰乱器,还能加密字符常量和扰乱程序流。加扰后,再反编译后变成这样:
package a;
import java.io.PrintStream;
public class a
{
    String a;
    String b;
    public static boolean c;
    a(boolean flag)
    {
        a = a("q\0041\033/\03162\005,]");
        b = a("{\0308W\027V\0231\023");
        if (!flag) goto 42 else 26;
        System.out.println(a);
        if (!c) goto 52 else 42;
        System.out.println(b);
    }

    public static void main(String astring[])
    {
        new a(1);
        new a(0);
    }

    private static String a(String string)
    {
        char ach[];
        int i;
        int j;
        int k;
        ach = string.toCharArray();
        i = ach.length;
        j = 0;
        k = 0;
        expression 57
        expression ach
        expression j
        expression 97
        expression ach
        expression j
        expression 93
        expression ach
        expression j
        expression 119
        expression ach
        expression j
        expression 64
        expression ach
        expression j
        dup 2 over 1
        push []
        ^
        pop []
        j++;
        k++;
        if (i == j)
            return new String(ach);
        expression k
        switch
case 1: goto 21
case 2: goto 29
case 3: goto 37
case 4: goto 45
case 5: goto 10
default: goto 54
    }
}
你想破译其中的思路可就难了 :)

以上资料摘自:http://www.zelix.com/klassmaster/

时间: 2024-10-27 23:40:46

关于扰乱器与反编译 (转载)的相关文章

通过Java反编译揭开一些问题的真相

  博主在上一篇< Java语法糖之foreach>中采用反编译的形式进行探讨进而揭开foreach语法糖的真相.进来又遇到几个问题,通过反编译之后才了解了事实的真相,觉得有必要做一下总结,也可以给各位做一下参考.   相信很多朋友刚开始见到反编译后的内容的时候,肯定会吐槽:WTF!其实只要静下心来认真了解下,反编译也不过如此,java字节码的长度为一个字节,顶多256条指令,目前,Java虚拟机规范已经定义了其中约200条编码值对应的指令含义.这里先用一个小例子来开始我们的征程(这里只是举例

Telerik JustDecompile 2014.1.255.0 开发版(.NET反编译神器,免费下载)

原文:Telerik JustDecompile 2014.1.255.0 开发版(.NET反编译神器,免费下载) Telerik JustDecompile是Telerik公司推出一个免费的.NET反编译工具,支持插件与Visual Studio 2015~2013集成,还能够创建Visual Studio Project文件.JustDecompile与Reflector相比的话,个人更喜欢JustDecompile,因为他免费,而且对于一些C#动态类型的反编译效果比较好. Telerik

反编译DLL文件错误,提示“无法显示调用运算符或访问器”

问题描述 反编译了一个第三方DLL文件.编译后出现很多错误提示:"无法显示调用运算符或访问器".画红框位置都是显示该提示.如下图:以下是源码:usingMicrosoft.Office.Interop.Excel;usingSystem;usingSystem.Data;usingSystem.Runtime.InteropServices;usingSystem.Web;namespaceCRM.Utility.Tif{publicclassExportExcel{publicstr

【转】一个不错的eclipse反编译插件

在CSDN论坛上看到的一个不错的eclipse反编译插件,感觉看起来不错的样子,因而记下,原网址是:http://topic.csdn.net/u/20121030/14/CDE52930-BAF2-4F88-B751-3797A7EB3C44.html 闲暇之余,写了一个Eclipse下的Java反编译插件:Eclipse Class Decompiler,整合了目前最好的2个Java反编译工具Jad和JD-Core,并且和Eclipse Class Viewer无缝集成,能够很方便的使用本插

人肉反编译使用yield关键字的方法

我认为这是一个真命题:"没有用.NET Reflector反编译并阅读过代码的程序员不是专业的.NET程序 员"..NET Reflector强大的地方就在于可以把IL代码反编译成可读性颇高的高级语言代码,并且能够支 持相当多的"模式",根据这些模式它可以在一定程度上把某些语法糖给还原,甚至可以支持简单的 Lambda表达式和LINQ.只可惜,.NET Reflector还是无法做到极致,某些情况下生成的代码还是无法还原 到易于理解--yield关键字便是这样一个典

.Net Reflector 反编译后方法体只有//Invalid method body

问题描述 请问大家:我用.NetReflector反编译一个dll后类方法只有//Invalidmethodbody属性只有get;set; 解决方案 解决方案二:LZ.NetReflector所用的.NET框架是3.5吗?VS2008的新写法只有GET,SET解决方案三:是不是经过混淆器混淆??解决方案四:估计是经过混淆了吧解决方案五:引用2楼wsklt的回复: 是不是经过混淆器混淆??

Android反编译(操作简单、方便可用)

转自:http://blog.csdn.net/a1010012805/article/details/46827517 在Android开发的过程中,有时候难免会想参考其他人的代码.思路,或者布局.这时候就需要反编译其他人的apk了.网上好多的都是要下载这个工具,那个工具,又要运行DOS命令的,感觉好混乱,而且对于DOS命令不熟悉的人来说也不方便,废话不多说,直接上图说明. 首先,你得下载一个工具,用来反编译apk.下载地址http://download.csdn.net/detail/a10

Android反编译看看手Q口令红包的实现原理_Android

首篇作为开始,先讲讲简单的反编译.反编译通常有几种目的:互相学习.借来用用.嘿嘿(干你,又分为小干干类似微信红包,和大干干改别人的apk帮他上架). 因为没带kvm回来,mbpr屏幕太小,所以下文环境为windows. 一.反编译 让我们从实战开始,先实践一下怎么去反编译一个apk,看看某些功能的实现.毕竟没有实践的原理都是耍流氓. 这里我们保留互相学习的心态,所以是友善的第一种目的,嘻嘻. 1.准备 工具 Apktool jadx(新一代反编译大杀器) 安装包 手机QQ 6.2.3 (目标就设

APK反编译之一:smail代码的基础

APK反编译之一:基础知识 本人接触不久,有错误望请各位神牛不吝赐教,仅仅希望把自己这段时间研究的东西分享一下,如果可以帮助到有需要的童鞋万感荣幸.欢迎评论转载,但请加上转载来源谢谢!请尊重开发者劳动成果!请勿用于非法用途! 作者:lpohvbe | http://blog.csdn.net/lpohvbe/article/details/7981386      这部分涉及的内容比较多,我会尽量从最基础开始说起,但需要读者一定的android开发基础.但注意可能讲解详细得令人作呕,请根据个人理