`
yjzagan2003
  • 浏览: 37110 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

静态常量不能反编译

    博客分类:
  • java
 
阅读更多

     近期项目中需要反编译修改多年前的class文件,经过反编译并修改后,用Eclipse编译和java命令行得到的class文件不同,对新class文件反编译后如下:

 

 

    

    用Eclipse编译的class文件反编译:

package com.langchao.kpiengine.builder.baskpi;
import com.langchao.kpiengine.model.common.BasDimensionType;
import com.langchao.kpiengine.model.common.Kpi;
import com.langchao.kpiengine.model.common.KpiRelation;
import com.langchao.kpiengine.model.common.UnitKpi;
import com.langchao.kpiengine.search.BasKpiDefine;
import com.langchao.kpiengine.util.KpiConfigHelper;
import com.langchao.kpiengine.xml.digester.DigesterUtil;
import com.langchao.kpiengine.xml.digester.KpiDigester;
import com.langchao.kpiengine.xml.digester.KpiDigesterFactory;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class BasKpiDefineDaoXmlImpl
  implements BasKpiDefineDao
{
  private static Log log = LogFactory.getLog("KpiQueryService");
  public static final String RULE_CONFIG;
  public static final String DEFINE_CONFIG;
  private BasKpiDefine basKpiDefine;
  static Class class$0;

  // ERROR //
  static
  {
    // Byte code:
    //   0: ldc 20
    //   2: invokestatic 22	org/apache/commons/logging/LogFactory:getLog	(Ljava/lang/String;)Lorg/apache/commons/logging/Log;
    //   5: putstatic 28	com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:log	Lorg/apache/commons/logging/Log;
    //   8: new 30	java/lang/StringBuffer
    //   11: dup
    //   12: getstatic 32	com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0	Ljava/lang/Class;
    //   15: dup
    //   16: ifnonnull +28 -> 44
    //   19: pop
    //   20: ldc 34
    //   22: invokestatic 36	java/lang/Class:forName	(Ljava/lang/String;)Ljava/lang/Class;
    //   25: dup
    //   26: putstatic 32	com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0	Ljava/lang/Class;
    //   29: goto +15 -> 44
    //   32: new 42	java/lang/NoClassDefFoundError
    //   35: dup_x1
    //   36: swap
    //   37: invokevirtual 44	java/lang/Throwable:getMessage	()Ljava/lang/String;
    //   40: invokespecial 50	java/lang/NoClassDefFoundError:<init>	(Ljava/lang/String;)V
    //   43: athrow
    //   44: invokevirtual 54	java/lang/Class:getPackage	()Ljava/lang/Package;
    //   47: invokevirtual 58	java/lang/Package:getName	()Ljava/lang/String;
    //   50: invokestatic 63	java/lang/String:valueOf	(Ljava/lang/Object;)Ljava/lang/String;
    //   53: invokespecial 69	java/lang/StringBuffer:<init>	(Ljava/lang/String;)V
    //   56: ldc 70
    //   58: invokevirtual 72	java/lang/StringBuffer:append	(Ljava/lang/String;)Ljava/lang/StringBuffer;
    //   61: invokevirtual 76	java/lang/StringBuffer:toString	()Ljava/lang/String;
    //   64: putstatic 79	com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:RULE_CONFIG	Ljava/lang/String;
    //   67: new 30	java/lang/StringBuffer
    //   70: dup
    //   71: getstatic 32	com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0	Ljava/lang/Class;
    //   74: dup
    //   75: ifnonnull +28 -> 103
    //   78: pop
    //   79: ldc 34
    //   81: invokestatic 36	java/lang/Class:forName	(Ljava/lang/String;)Ljava/lang/Class;
    //   84: dup
    //   85: putstatic 32	com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0	Ljava/lang/Class;
    //   88: goto +15 -> 103
    //   91: new 42	java/lang/NoClassDefFoundError
    //   94: dup_x1
    //   95: swap
    //   96: invokevirtual 44	java/lang/Throwable:getMessage	()Ljava/lang/String;
    //   99: invokespecial 50	java/lang/NoClassDefFoundError:<init>	(Ljava/lang/String;)V
    //   102: athrow
    //   103: invokevirtual 81	java/lang/Class:getName	()Ljava/lang/String;
    //   106: invokestatic 63	java/lang/String:valueOf	(Ljava/lang/Object;)Ljava/lang/String;
    //   109: invokespecial 69	java/lang/StringBuffer:<init>	(Ljava/lang/String;)V
    //   112: ldc 82
    //   114: invokevirtual 72	java/lang/StringBuffer:append	(Ljava/lang/String;)Ljava/lang/StringBuffer;
    //   117: invokevirtual 76	java/lang/StringBuffer:toString	()Ljava/lang/String;
    //   120: putstatic 84	com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:DEFINE_CONFIG	Ljava/lang/String;
    //   123: return
    //
    // Exception table:
    //   from	to	target	type
    //   20	25	32	java/lang/ClassNotFoundException
    //   79	84	91	java/lang/ClassNotFoundException
}
 

 

 

java命令行执行(如图):

 

C:\j2sdk1.4.2_16\bin>javac

–classpath .;kpimodelbuild.jar;commons-logging.jar;kpimodel.jar;commons-digester.jar;sax.jar;zhibiaoutil.jar

 BasKpiDefineDaoXmlImpl.java

 

对用命令行新生成的class反编译:

 

package com.langchao.kpiengine.builder.baskpi;

import com.langchao.kpiengine.model.common.BasDimensionType;
import com.langchao.kpiengine.model.common.Kpi;
import com.langchao.kpiengine.model.common.KpiRelation;
import com.langchao.kpiengine.model.common.UnitKpi;
import com.langchao.kpiengine.search.BasKpiDefine;
import com.langchao.kpiengine.util.KpiConfigHelper;
import com.langchao.kpiengine.xml.digester.DigesterUtil;
import com.langchao.kpiengine.xml.digester.KpiDigester;
import com.langchao.kpiengine.xml.digester.KpiDigesterFactory;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class BasKpiDefineDaoXmlImpl
  implements BasKpiDefineDao
{
  private static Log log = LogFactory.getLog("KpiQueryService");
  public static final String RULE_CONFIG = BasKpiDefineDaoXmlImpl.class.getPackage().getName() + ".ruleconfig";
  public static final String DEFINE_CONFIG = BasKpiDefineDaoXmlImpl.class.getName() + ".defineconfig";
  private BasKpiDefine basKpiDefine;

 

 

经比对,Eclipse生成的对应的public static final String 静态常量的值在反编译后都没有了,而使用java命令行的反编译后正常。

问题找到了,但是原因未知。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 37.2 KB
分享到:
评论

相关推荐

    javaClass反编译.pdf

    在IT领域,特别是软件开发行业中,反编译技术是一项至关重要的技能,它不仅能够帮助开发者理解其他程序的内部逻辑,还能用于逆向工程、安全审计及版权分析等多个方面。本文将深入探讨Java Class文件的反编译原理,为...

    delphi10 Obfuscator混淆js文件的静态反编译工具

    JavaScript作为一种广泛使用的前端开发语言,其源代码通常是可见的,这使得代码容易受到静态反编译和逆向工程的攻击。为了应对这一挑战,开发者们通常会采用混淆(Obfuscation)技术来保护他们的JavaScript代码。 ...

    java 反编译工具

    反编译通常包括识别类结构、方法签名、变量定义、常量池解析等步骤。由于Java字节码是静态类型语言的中间表示,反编译器必须重建类的继承关系、接口实现以及方法体内的指令序列。 5. **注意事项**: 使用反编译...

    Apk反编译工具

    6. **AndroGuard**:这是一个全面的Android分析工具集,包括反编译、动态分析和静态分析功能,可以用于安全审计和研究。 在使用这些工具时,开发者需要注意版权和法律问题,因为反编译他人的APK可能涉及侵犯知识...

    Android 反编译和smali语法用于ROM适配

    ### Android 反编译与smali语法:ROM适配的关键技术 #### 一、引言 在Android开发领域,反编译技术与smali语法的应用是进行深度定制、ROM适配以及逆向工程的重要手段。smali作为一种中间语言,与dalvik虚拟机紧密...

    android反编译工具大全

    当APKtool不能完全恢复源代码时,Smali和baksmali可以作为更底层的分析工具来使用。 5. **dexdump**:这是Android SDK自带的一个命令行工具,可以将DEX文件的信息输出到文本格式,包括类、方法、字段等。虽然它不...

    Android反编译工具.rar

    Android反编译工具就是这样的利器,它们能帮助开发者或者安全研究人员将APK文件转换回源代码形式,便于理解和研究。"Android反编译工具包"提供了这样的功能,包含了多种实用工具,如"Androidfby"和"apk2java"。 ...

    安卓反编译dex文件格式实例分析

    ### 安卓反编译dex文件格式实例分析 #### 第一部分:创造一个可供分析的Hello.dex ##### 测试环境 为了进行本次实验,我们需要搭建一个可靠的测试环境。本实验使用了以下配置: - **操作系统**: Ubuntu 12.04 64...

    轻松Android反编译工具

    由于编译过程通常会丢失一些元数据,反编译并不总是能完全恢复原始代码,但apk2java通过复杂的算法和映射策略尽可能地还原代码结构和逻辑。 3. **APK文件结构**:APK是Android应用的打包格式,包含.dex文件(Dalvik...

    ApkDecompiler Android 程序的反编译工具

    通过查看反编译后的代码,可以发现潜在的安全漏洞,例如硬编码的API密钥、敏感数据明文存储、不安全的网络通信等。 5. **逆向工程应用**:开发者可以利用ApkDecompiler进行逆向工程,学习其他应用的优秀设计,或者...

    Android APK反编译详解

    在Android开发领域,APK反编译是一种常见技术,它涉及到对APK文件进行解包、解析和逆向工程,以获取应用的源代码、资源文件、字符串常量等信息。这一过程通常用于安全分析、漏洞挖掘、学习借鉴他人的编程技巧,以及...

    反编译jar包所需的jar文件jclasslib.jar ,kotlin-runtime,kotlin-stdlib

    jclasslib不仅能够展示类的结构,如字段、方法、常量池等,还可以将字节码反编译为接近原始源代码的格式,尽管它可能不完全相同于原始的Java源代码。 Kotlin是近年来越来越受欢迎的静态类型编程语言,与Java高度...

    .NET反编译必备IL常用指令集

    总的来说,.NET反编译必备IL指令集是提升开发者技能的重要部分,它提供了一种底层视角来理解和操作.NET代码,是.NET开发者进阶道路上不可或缺的知识。通过学习和掌握IL指令集,你可以更好地优化代码,解决复杂问题,...

    Java中的常量如何避免反模式Java开发Java经验技巧

    - 常量应该是不可变的,这意味着它们一旦被赋值,就不能更改。这可以通过使用`final`关键字和避免任何可能改变状态的操作来实现。 8. **避免使用`public static final`的类属性**: - 尽管这可以创建全局常量,但...

    Dll2C_Dll2C_

    Dll2C的反编译引擎可能采用了静态分析和动态分析相结合的方式,以尽可能准确地还原DLL的原始C代码结构。 标签“Dll2C”强调了这个工具的独特性和专一性,它是专门为DLL文件设计的反编译解决方案。这意味着Dll2C可能...

    编译与开发设计

    反编译是将已编译的代码转换回高级语言的过程,尽管不总是能完全恢复原始代码,但在逆向工程中具有重要意义。 总结,编译与开发设计是一门深奥且实用的技术,涵盖了从源代码到可执行程序的整个过程,包括各种语言...

    apktool 2.3.1

    apktool是一款强大的Android应用反编译工具,由布拉德...除非你拥有应用的源代码或者得到了作者的许可,否则不应随意对他人应用进行反编译。总的来说,apktool是一个强大的工具,但使用时需谨慎并尊重他人的知识产权。

    C51常量 单片机C语言知识点

    十进制形式由数字和小数点组成,如0.888、3345.345、0.0,整数或小数部分可以为0,但是小数点不能省略。指数形式的写法是[±]数字[。数字]e[±]数字,其中e前后的内容为可选,但e及其前面的数字必须有,例如...

    Covert Java Techniques for Decompiling, Patching,and Reverse Engineering

    逆向工程不仅仅局限于简单的反编译操作,还包括深入理解程序的行为、逻辑以及潜在的安全漏洞。 **关键知识点:** 1. **静态分析**:通过对源代码或字节码进行分析,查找潜在的问题,如安全漏洞、编码错误等。静态...

    编译原理中文版

    - **逆向工程工具**:用于反编译或反汇编程序,以便理解其功能或查找漏洞。 综上所述,编译原理是一门涉及多个领域的综合性学科,对于软件开发人员来说具有极高的实用价值。通过深入学习编译原理,不仅可以更好地...

Global site tag (gtag.js) - Google Analytics