有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用proguard模糊默认java包和类名称

我有一个用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的某个地方找到它

任何帮助或建议都会大有帮助


共 (1) 个答案

  1. # 1 楼答案

    当你开始认真思考时,代码混淆是security by obscurity的一种形式。在写得很好、或多或少是自我记录的代码中,类/方法/函数的名称可以准确地告诉您一段代码在做什么。根据这一点对代码进行模糊处理非常有助于将缺乏决心/知识的人拒之门外

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

    而方法名&;由于只有地址(我给了有意义的名称),什么都看不清了,它们无法隐藏系统/winapi/库调用。实现这一点有很多创造性的技巧,但它们都可以归结为查找表的晦涩方法。任何有足够技能编写像jd-gui-1.2.0这样的工具的人。jar,或者能够为自己的目的修改其源代码的jar,在找出用于查找的任何方案时都不会有问题

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

    我的观点是:虽然从技术上讲,你想做什么就做什么,但我个人认为这不值得你花时间