`

Android杂谈--代码混淆及proguard一些错误处理

 
阅读更多

代码混淆说简单的其实就是为了防止别人反编译你的源代码,因为JAVA程序比较容易被反编译,所以如果程序中有一些比较重要的逻辑的话,通过代码混淆来处理的确可以阻止一下被人反编译。

反编译教程可以参考:http://hualang.iteye.com/admin/blogs/994686

不过代码混淆还是不能阻止被反编译xml格式的布局文件,混淆的是JAVA文件。但是混淆后的代码如果经验多的话,可是可以分析出来的,但这是少数

 

下面开始说说这个东西是如何使用的

有两种方式可以实现代码混淆,一种是直接在eclipse中,android 2.3开始支持这个功能;另一种是使用ant。

首先我们会在项目中看到proguard.cfg文件,就不打开了。

只需要在progect.properties中添加如下一句话就可以了



 另外proguard只在发行版本(release)中运行,所以在调试(debug)模式下不必对其进行处理

 

这样就可以了,我们把它(apk文件)倒出来看看与源码到底有什么区别

操作如下:项目--鼠标右键--Android Tools--Export unsigned Applicaiton Package


 

为了看看混淆到底是混淆了什么,我们将apk文件解压,反编译classes.dex。

下面是源代码的样子。

LoveMusicActivity.java

 

package com.louliljun.lovemusic;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class LoveMusicActivity extends Activity {
    private Button startBtn,stopBtn;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startBtn = (Button)findViewById(R.id.startMusic);
        stopBtn = (Button)findViewById(R.id.stopMusic);
        
        startBtn.setOnClickListener(new Button.OnClickListener()
        {

			@Override
			public void onClick(View arg0) {
				startService(new Intent("com.loulijun.lovemusic.ACTION"));
				
			}
        	
        });
        
        stopBtn.setOnClickListener(new Button.OnClickListener()
        {

			@Override
			public void onClick(View v) {
				stopService(new Intent("com.loulijun.lovemusic.ACTION"));
				
			}
        	
        });
    }
}

 

 MusicService.java

 

package com.louliljun.lovemusic;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class MusicService extends Service {
	private MediaPlayer mp;
	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		mp.stop();
	}
	@Override
	public void onStart(Intent intent, int startId) {
		// TODO Auto-generated method stub
		super.onStart(intent, startId);
		mp = MediaPlayer.create(this, R.raw.nala);
		mp.start();
	}	

}
 

 

下面是混淆编译后的样子。

 

这里Activity也变得缺胳膊少腿的,让人看了很蛋疼



 

 


不过仔细分析下还是可以还原源程序的,但是代码量很大的情况下就比较恼火了,几乎无法被原样破解

 

注意:

在添加了"proguard.config=proconfig.cfg"这句话后,如果导出apk的时候有如下的问题的话,说明是proguard的版本问题,当然网上也有将版本号降低来解决的,但是我没有解决。我的解决方案是:最彻底的方法是将 Android SDK 2.3 包含的 ProGuard v4.4 升级到 v4.6,就能彻底解决该问题。

 

即下载http://proguard.sourceforge.net/中最新的4.6版本的proguard,然后解压后将里面的bin目录和lib目录覆盖到android-sdk-windows/tools/proguard目录下的bin和lib目录即可,然后再导出项目就没问题了




 

 

如果还想了解更多,推荐几篇文章

http://www.cnblogs.com/over140/archive/2011/04/22/2024528.html#ConfiguringProGuard

http://proguard.sourceforge.net/index.html#/manual/introduction.html

http://www.iteye.com/topic/1012395

 

有关ant的文章

http://www.java3z.com/cwbwebhome/article/article2/2764.html

http://www.cnblogs.com/tankaixiong/archive/2010/11/24/1887156.html

 

  • 大小: 4.7 KB
  • 大小: 39 KB
  • 大小: 80.1 KB
  • 大小: 48.8 KB
  • 大小: 46.5 KB
  • 大小: 46.5 KB
  • 大小: 16.8 KB
  • 大小: 13.4 KB
分享到:
评论

相关推荐

    java代码混淆器proGuard

    - 配置ProGuard配置文件(proguard-project.txt或proguard-android.txt),指定输入、输出和库文件,以及混淆规则。 - 运行ProGuard工具,对项目进行混淆处理。 - 检查混淆结果:混淆后的代码可以通过反编译工具...

    SpringBoot + proguard+maven多模块实现代码混淆

    proguard-root 是顶级父工程,proguard-modu01、proguard-mudu02是两个业务模块,proguard-server是springboot启动服务类模块,对proguard-modu01、proguard-mudu02两个模块实现proguard代码混淆。 详细实现步骤可...

    代码混淆器java-----proguard

    java代码混淆器------------proguard 很好的混淆工具

    springboot工程(单个maven工程)利用proguard实现代码混淆

    ProGuard是一款强大的代码混淆、优化和压缩工具,它可以帮助开发者将Java字节码混淆为难以阅读的形式,从而增加逆向工程的难度。本篇文章将详细探讨如何在一个Spring Boot的Maven工程中集成并使用ProGuard进行代码...

    Android 4.0及以上版本 ProGuard 代码混淆

    2. **取消注释混淆配置**:找到与 ProGuard 相关的行,例如 `-proguard-config=${sdk.dir}/tools/proguard/proguard-android.txt:-proguard-config proguard-project.txt`,取消这些行的注释(即删除前面的 `#`)。...

    最好用的JAVA代码混淆工具proguard-7.0.0.zip

    总的来说,"proguard-7.0.0.zip"提供的ProGuard工具是Java和Android开发中保护知识产权,提升代码安全性和性能的重要助手。通过合理配置和使用,开发者可以有效地保护自己的劳动成果,同时提高应用的运行效率。

    proguard-base-6.0.3 -_混淆as_

    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 指定混淆规则文件 } } } ``` 当执行构建时,Gradle会自动调用ProGuard进行处理。混淆完成后,可以查看`build...

    实现maven管理的Javaweb项目的proguard代码混淆功能

    在Java Web开发中,代码安全性和保护知识产权是一个重要的议题,其中一种有效的手段就是对源代码进行混淆处理。本文将深入探讨如何在Maven管理的Java Web项目中集成ProGuard工具来实现代码混淆功能,以及在过程中...

    J2EE-web工程ProGuard代码混淆

    【J2EE-web工程ProGuard代码混淆】是Java开发中的一种安全实践,旨在保护应用程序的源代码不被轻易反编译和理解。ProGuard是一款强大的Java字节码混淆、优化、压缩和预校验工具,它能将Java字节码转换成更难阅读和...

    java 代码混淆 proguard

    `getDefaultProguardFile('proguard-android-optimize.txt')`指定了Android提供的默认混淆规则,而`proguard-rules.pro`则是开发者自定义的混淆规则文件。 混淆过程中可能遇到的问题包括依赖库的处理、注解处理、...

    Android 2_3 代码混淆proguard技术介绍 - Zy的技术心

    Android 2_3 代码混淆proguard技术介绍 - Zy的技术心

    proguard-maven-plugin-2.3.1.jar

    修改proguard-maven-plugin插件默认可以对proguard打包后的jar重新打包

    java代码混淆工具proguard及教程讲解

    java代码混淆工具 简单使用docx 字典文件 生成的配置示例

    Java防编译技术---proguard混淆器

    例如,我们可能需要保留一些关键的公共API或者错误处理代码,以避免混淆后出现运行时问题。 配置文件中的常见指令包括 `-keep`(指定不应混淆的类或方法)、`-optimizationflags`(设置优化标志)和`-printmapping`...

    android-proguard-snippets, 通用Android库的混淆器配置.zip

    android-proguard-snippets, 通用Android库的混淆器配置 android-proguard-...这个项目假设你的混淆器配置是基于最新的官方 proguard-android.txt 配置,如下所示。 每个库配置应该仅仅是特定库所需的规则,而不是完

    Android代码混淆 proguard语法及常用

    新写的proguard代码混淆的文档 大家可以看看

    android-proguard-configs:android proguard 配置

    对于 App,建议使用 proguard-android-app-optimize.txt。 对于库,建议使用 proguard-android-lib.txt。 ##参考 ##执照 Copyright (C) 2015 Snowdream Mobile <yanghui1986527>Licensed under the Apache ...

    Android Java代码混淆工具:ProGuard简介及使用.docx

    ### Android Java代码混淆工具:ProGuard的深度解析与实践 #### 概述 在软件开发领域,代码混淆是一项重要的安全措施,特别是在移动应用开发中,它能够保护源代码不被轻易逆向工程,从而增强应用的安全性。在...

    Java代码混淆工具 Proguard4.10(官方免费下载)

    3、新手入门请参照本目录下文档《ProGuard代码混淆操作说明.docx》 先牛刀小试一下,混淆自己本地的工程,支持jar,war,ear,目录(class)等方式 4、proguard常见参数标签的用法在《proguard标签的用法.pdf》 5、混淆...

    Android代码-proguard-tips

    **Android代码混淆与Proguard详解** 在Android应用开发中,为了保护代码安全、减小APK体积以及提高运行效率,开发者通常会使用代码混淆工具,其中最常用的便是Proguard。Proguard是一个强大的Java字节码混淆、优化...

Global site tag (gtag.js) - Google Analytics