Proguard工具使用教程

本文介绍如何使用Proguard工具进行代码混淆,包括配置输入输出文件、排除特定类的混淆等步骤,并展示了混淆前后代码的具体变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进入Proguard的lib目录,用JDK打开proguardgui.jar,点选Input/Output标签,选择要混淆的JAR包(注意是JAR包),输出JAR包,以及用到的所有类库。
点选Obfuscation标签,选中不需要混淆的类(要被反射的类绝对不能被混淆),一般是1,4,5,9,10,11

,12这几个选项。
a.txt的文件内容为:(混淆函数名)
Gcd
b.txt的文件内容为:(混淆类名)
A
B

点选Process标签,Process按钮,生产b.jar

解压b.jar后,这时的3个class文件分别为A.class、B.class、Test.class;
重新反编译程序jad -d d:\b\ -r -s java d:\b\*.class,生成3个java文件:A.java、B.java、Test.java,具体内容如下:

A.java
//  Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
//  Jad home page:  http://www.kpdus.com/jad.html
//  Decompiler options: packimports(3) 


public   final   class  A
{

    
public A()
    
{
    }


    
public final String Gcd()
    
{
        
return Gcd;
    }


    
public final void Gcd(String s)
    
{
        Gcd 
= (new StringBuilder()).append("Bomber:").append(s).toString();
    }


    
private String Gcd;
}
B.java
//  Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
//  Jad home page:  http://www.kpdus.com/jad.html
//  Decompiler options: packimports(3) 


public   final   class  B
{

    
public B()
    
{
    }


    
public final String Gcd()
    
{
        
return Gcd;
    }


    
public final void Gcd(String s)
    
{
        Gcd 
= (new StringBuilder()).append("Flight:").append(s).toString();
    }


    
private String Gcd;
}
Test.java
//  Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
//  Jad home page:  http://www.kpdus.com/jad.html
//  Decompiler options: packimports(3) 

import  java.io. * ;
import  java.util.StringTokenizer;

public   class  Test
{

    
public Test()
    
{
    }


    
public static void main(String args[])
    
{
        String s;
        
if((s = (args = new BufferedReader(new InputStreamReader(System.in))).readLine()).length() % 2 == 0)
            System.out.println(
"You are my sun1");
        
else
            System.out.println(
"You are my sun2");
        Object obj;
        ((B) (obj 
= new B())).Gcd(s);
        System.out.println(((B) (obj)).Gcd());
        ((A) (obj 
= new A())).Gcd(s);
        System.out.println(((A) (obj)).Gcd());
        s 
= args.readLine();
        args 
= Integer.parseInt((args = new StringTokenizer(s)).nextToken());
        System.out.println(Gcd(args));
    }


    
private static int Gcd(int i)
    
{
        
if(i > 1)
            
return i * Gcd(i - 1);
        
else
            
return 1;
    }

}
通过对比可以发现,它和原来文件的内容有许多出入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值