=========================================================================雖然反編譯很簡單,也沒下面說的那麼複雜,不過還是轉了過來。
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看參數說明也差不多。