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