Skip to main content
QUICK REVIEW

[论文解读] JConstHide: A Framework for Java Source Code Constant Hiding

Praveen Sivadasan, P. Sojan Lal|ArXiv.org|Apr 22, 2009
Advanced Malware Detection Techniques参考文献 16被引用 3
一句话总结

JConstHide 是一种新颖的框架,通过在 Java 源代码中隐藏整数常量来抵御反编译和逆向工程。它在源代码级别将常量转换为混淆表达式,实现源代码和字节码的双重混淆,显著提高对分析的抵抗力,填补了现有工具仅混淆字节码的空白。

ABSTRACT

Software obfuscation or obscuring a software is an approach to defeat the practice of reverse engineering a software for using its functionality illegally in the development of another software. Java applications are more amenable to reverse engineering and re-engineering attacks through methods such as decompilation because Java class files store the program in a semi complied form called byte codes. The existing obfuscation systems obfuscate the Java class files. Obfuscated source code produce obfuscated byte codes and hence two level obfuscation (source code and byte code level) of the program makes it more resilient to reverse engineering attacks . But source code obfuscation is much more difficult due to richer set of programming constructs and the scope of the different variables used in the program and only very little progress has been made on this front. We in this paper are proposing a framework named JConstHide for hiding constants, especially integers in the java source codes, to defeat reverse engineering through decompilation. To the best of our knowledge, no data hiding software are available for java source code constant hiding.

研究动机与目标

  • 解决 Java 领域缺乏源代码级别混淆工具的问题,特别是针对常量隐藏。
  • 通过使从反编译代码中提取敏感值(如魔术数字)更加困难,降低对逆向工程的脆弱性。
  • 提供一个实用框架,实现双层混淆(源代码和字节码),提高对攻击的抗性。
  • 聚焦于整数常量,因为这些常量在反编译后的 Java 代码中经常暴露,且通常对程序功能至关重要。
  • 提出一种在保持程序语义不变的同时,于源代码级别隐藏常量值的方法。

提出的方法

  • 该框架识别 Java 源代码中适合混淆的整数常量。
  • 将每个选定的常量替换为使用算术和逻辑运算构建的复杂、语义等价的表达式。
  • 构造的混淆表达式在运行时可计算为原始常量值,但在源代码形式中隐藏了原始值。
  • 转换在编译前作为源代码预处理阶段应用,确保与标准 Java 编译器的兼容性。
  • 该框架支持可配置的混淆强度,并允许选择性地隐藏特定常量。
  • 生成的源代码被编译为混淆后的字节码,实现双层保护。

实验结果

研究问题

  • RQ1能否有效隐藏 Java 源代码中的整数常量,以防止在反编译过程中暴露?
  • RQ2可采用哪些技术将常量转换为混淆表达式,同时不改变程序行为?
  • RQ3在抵御逆向工程方面,源代码级别的混淆与字节码级别的混淆相比有何差异?
  • RQ4源代码混淆对程序可维护性和性能有何影响?
  • RQ5是否存在一个实用框架,能够为 Java 应用程序实现双层混淆(源代码和字节码)?

主要发现

  • JConstHide 成功将整数常量转换为语义等价但源代码中隐藏原始值的混淆表达式。
  • 该框架实现了双层混淆,结合了源代码和字节码保护,显著提高了对逆向工程的抵抗能力。
  • 该方法对 Java 编译器透明,确保混淆后的代码能够正确编译和运行。
  • 该方法在保持程序功能的同时,使通过反编译提取敏感常量变得极为困难。
  • 据作者所知,这是首个专为 Java 源代码级别常量隐藏而设计的框架。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。