【问题标题】:obfuscate default java packages and classes names using proguard使用 proguard 混淆默认的 java 包和类名
【发布时间】:2015-07-14 23:03:35
【问题描述】:

我有一个用 java 编写的应用程序,我正在使用 proguard 对其进行模糊处理,并且它工作得很好,我的意思是类和成员(数据和函数)被重命名为 a、ax、xy、z 等。

但是当我使用 jd-gui-1.2.0.jar 反编译它时,我发现所有默认的 java 包和类对读者都是可见的,例如:

import java.awt.GridLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;

类和函数名称对读者可见,例如:

try
{
  Class.forName("org.sqlite.JDBC");
  this.ab = DriverManager.getConnection("jdbc:sqlite:db.db");
}
catch (ClassNotFoundException|SQLException localClassNotFoundException)
{
  JOptionPane.showMessageDialog(this, "Database Not Found", "Exception Occured", 0);
}

我说的不是字符串加密,而是默认 java 包中的类和函数名称,例如:java.sql.ConnectionDriverManager.getConnection("")

我想知道如何使用 proguard 隐藏或重命名所有这些默认类和函数名称,此时我只能通过映射它们的名称或任何其他方式在 proguard 中的某个地方..

任何帮助或建议都会很有帮助..

【问题讨论】:

  • 如果在你的 jar 中没有直接引用它们,它应该如何在默认/3rd 方 java 包中找到函数或类?
  • 你只能做这么多来混淆二进制文件。即使有某种机制可以间接引用默认/第 3 方的东西,即使是勉强能够进行逆向工程的人也可以用很少的工作重建原始调用。
  • @Brian Vandenberg 我认为 proguard 足以保护我的代码至少不受普通开发人员的影响,但我只是在想是否可以通过映射或映射的方式隐藏 java 包、类或方法任何其他使我的代码更难理解的方法......
  • 混淆只能用于您控制的事物。假设 proguard 中存在一个功能来做你想做的事,它最终会成为一个查找表。 XYZ 将映射到 JOptionPane 等。任何有足够技能编写逆向工程工具的人都绝对没有问题弄清楚如何进行查找表并撤消混淆。
  • 为了进一步加剧问题,预打包的保护方案往往使破解者更容易,因为一旦破解,破解使用该工具保护的任何其他东西都是一件简单的事情。

标签: java proguard


【解决方案1】:

当您深入了解时,代码混淆是security by obscurity 的一种形式。在编写良好的或多或少自记录的代码中,类/方法/函数的名称可以准确地告诉您一段代码在做什么。有鉴于此,混淆代码非常有助于将不那么坚定/知识渊博的人拒之门外。

作为我自学逆向工程的项目之一,我想找出这个问题的答案:你能在 [windows xp] 扫雷中第一次点击就击中炸弹吗?我所需要的只是我对汇编、winapi 等的了解。当我检查反汇编时,我能够弄清楚许多函数在做什么,并给它们起一个对我有意义的名字。我最终找到了用于板的内存,并且能够可靠地确定板的布局直到第一次单击后才被选择;生成电路板布局的代码始终确保点击的方块中没有炸弹。

虽然只有地址(我给了有意义的名称)掩盖了方法名称和诸如此类的东西,但他们无法做很多事情来隐藏系统/winapi/库调用。有很多创造性的技巧可以做到这一点,但它们都归结为制作查找表的晦涩方法。任何有足够技能编写 jd-gui-1.2.0.jar 之类的工具的人,或者能够为自己的目的修改其源代码的人,都不会遇到任何用于查找的方案的问题。

用于分析使用某种加密/压缩形式的病毒的常用技术是识别用于解压可执行代码的代码并直接使用该代码,而不是自行使用。毕竟,当您需要的代码就在那里时,为什么还要努力编写自己的代码呢?

我的观点:虽然技术上可以做你想做的事,但我个人认为这不值得你花时间。

【讨论】:

  • 感谢先生的回答,但我实际上想至少为我的两个包含我的应用程序所有逻辑的类这样做..,我知道即使我的代码对人们不安全做逆向工程:(,但至少对于其他不擅长逆向工程的人来说并不容易..
猜你喜欢
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多