我的家園

          我的家園

          代碼混淆說簡單的其實就是為了防止別人反編譯你的源代碼,因為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

          ?






          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 谢通门县| 泸水县| 宝应县| 宜黄县| 乌兰察布市| 宾阳县| 扬中市| 大丰市| 永城市| 彭山县| 马龙县| 沙湾县| 托克逊县| 黄浦区| 苏尼特左旗| 禹城市| 江永县| 平和县| 上杭县| 高清| 锦屏县| 沁阳市| 鸡西市| 黔西县| 乐安县| 临泽县| 东明县| 潞城市| 广州市| 翁牛特旗| 美姑县| 澳门| 万宁市| 札达县| 赣榆县| 曲水县| 丹寨县| 山阳县| 读书| 图木舒克市| 岳阳市|