天天看點

Android混淆、反編譯以及反破解的簡單回顧

=========================================================================雖然反編譯很簡單,也沒下面說的那麼複雜,不過還是轉了過來。

Android混淆、反編譯以及反破解的簡單回顧

         搜尋下,發現文章相關文檔好多好多。就簡單點,不贅述了==

一、Android混淆

1)概述

         建立Android工程,根目錄下會有個proguard.cfg。簡單的混淆,你隻需要在project.properties内加入一行“proguard.config=proguard.cfg”即可。

         注意:在簽名釋出apk時才會混淆,直接Run As在bin目錄下的apk是不被混淆的。簽名釋出:右鍵工程->Android Tools->Export Signed Application Package…

2)外部jar

         未混淆過的,隻加個類庫聲明就好。例如,用到“SDK目錄\ extras\android\support\v4\ android-support-v4.jar”時,可以在-keep前加如下内容即可:

-dontwarn android.support.** 

-libraryjars lib/android-support-v4.jar 

         第一行,表示去除警告,第二行是聲明jar(jar包拷到工程内了,是以是相對目錄==)。

         這樣混淆後,引用的jar包也會一起被混淆。

         如果用的第三方jar包是被混淆過的,或你不想混淆,則用-keep去除即可。例如,之前android-support-v4.jar,如果不需要混淆它的話,可以增加這麼一句:

-keep class android.support.v4.** { 

        *; 

         此時的話,jar包就不會被混淆了^^。

         更詳細的使用方法,請參看小節3。

1. 在手冊的樣例中,有兩篇即是講述Android的,如下:

中文相關的話,可以參考下述網址,呼呼~

4)可能問題

4.1)建立工程下沒有proguard.cfg

         你的環境太老了吧==。

         ProGuard是2.2才加的?記得我起初低于2.2的混淆時,要從2.2工程下把proguard.cfg拷過去。當時建2.1的目錄下是沒proguard.cfg的。

         不過現在建立個1.5都是有這個檔案的。

二、Android反編譯

         具體做什麼用的或如何操作,參看小節2。

easyTool.bat

@echo off 

title APK反編譯[by Join] 

rem apktool目錄 

set p_at="E:\zhao\environment\decompile\apktool" 

rem dex2jar目錄 

set p_dj="E:\zhao\environment\decompile\dex2jar-0.0.9.8" 

rem dex2jar字尾 

set suffix=_dex2jar.jar 

if "%~1"=="" echo 請将apk直接拖放至bat檔案!&goto :over 

rem 增加apktool路徑 

set path=%p_at%;%p_dj%;%path% 

setlocal enabledelayedexpansion 

if /i "%~x1"==".apk" ( 

  echo apktool處理"%~nx1"中... 

  apktool d "%~1" "%~dpn1" 

  echo dex2jar處理"%~nx1"中... 

  dex2jar.bat "%~1" 

  rem dex2jar執行後直接結束了== 

  echo 移動檔案"%~n1!suffix!"中... 

) else ( 

  echo 檔案類型錯誤:不支援%~x1! 

:over 

echo. 

@pause>nul 

         儲存成bat,修改下apktool目錄&dex2jar目錄,将apk拖上去即可。會有一個“同名”檔案夾和一個“同名_dex2jar.jar”的檔案。檔案夾是apktool生成的資源,jar則是dex2jar反編譯出的代碼。然後用jd-gui打開jar即可。

         注意:dex2jar需要用最新的,可以直接用于apk。代碼增加了zip解壓,不再需要手動了,不清楚哪個版本開始的==。才發現的,bat也剛更新了下。

2)更多

三、Android反破解

         那位版主現總結了四篇文章,如下:

         還有一些回複和摘錄,如下:

1)可以介紹一下openssl工具,挺好用的。

2) 以下為一段整合的回複:

-> 呵呵~!代碼混淆能避免被别人破解嗎?

-> 不能,隻是會增加别人破解的難度。如果要防别人破解的話,最好的方法是使用NDK,用C、C++寫的代碼,用NDK編成so庫,用JNI進行調用!

-> SO庫檔案包含符号, 調試也比java代碼友善, 是以某種意義上說逆向so裡面的native code比逆向java還容易。

-> Open Source 成就了 GNU Tool-chain. ELF裡面符号表是“一等公民”. 是以預設選項生成的目标檔案裡面帶符号,雖然可以通過選項分離符号,但是很多時候都會忽略了這一點。

不過我相信Open Source模式才是未來軟體工程的王道。

3)可以多關注dalvik是怎麼實作java對JNI調用的。其中會涉及到怎麼定位一個native func,有文章可做。

4)Dalvik虛拟機類加載機制的SDK類

         A class loader that loads classes from .jar and .apk files containing a classes.dex entry. 

in the local file system, but does not attempt to load classes from the network.

四、後記

         我用Proguard覺得最大的好處不在于混淆,而在于壓縮了代碼,apk整整能瘦一圈呢^^

五、補充——反編譯odex檔案

         沒關注過ROM,在反編譯4.0系統framework.jar定制SDK時,才發現odex這個東西==。

         這裡也就直接以這舉例了^^

1. 下載下傳baksmali-1.3.2.jar & smali-1.3.2.jar

2. 模拟器導出整個/system/framework/

         baksmali 反編譯是自動找5個核心的BOOTCLASSPATH,當然某些可能會涉及其他的CLASSPATH需要指定-c再添加。

         總之全部弄出來得了,ROM的話也一樣吧?不同公司應該會涉及自己的一些包,就這邊加吧?

3. 把兩個jar放進導出的framework目錄

4. 進入framework目錄

5. 以下指令進行反編譯啦~

java -Xmx512m -jar baksmali-1.3.2.jar -x framework.odex -o out(反編譯進out目錄)

java -Xmx512M -jar smali-1.3.2.jar -o classes.dex out(重新生成classes.dex)

         第一條指令的話,現版本-a預設為14。出UNEXPECTED TOP-LEVEL EXCEPTION,可能是這出錯,記得指定正确。-c,預設會找5個核心CLASSPATH,其他自己指定了。

6. 繼而的話,可以用來整成一個apk,或繼續dex2jar反編譯咯~

         參考網址:

                   apk生成odex & 合并odex和少dex的apk為完整apk。

                   當然用這兩個jar時,可以先-h看參數說明也差不多。

繼續閱讀