編輯:關於Android編程
我們知道,Android的程序打包後會生成一個APK文件,這個文件可以直接安裝到任何Android手機上,因此,反編譯就是對這個APK進行反編譯。Android的反編譯分成兩個部分:
反編譯代碼的工具:
dex2jar: 把dex文件轉成jar文件下載地址:https://sourceforge.net/projects/dex2jar/files/反編譯資源的工具:
APKTool: 本文重要工具,APK逆向工具,使用簡單下載地址:http://ibotpeaches.github.io/Apktool/install/首先我們需要一個APK,這裡我自己寫了一個,源碼下載地址:http://download.csdn.net/detail/u012891055/9563180,打包成APK後下載到手機上。
它的主要功能是模擬郵箱激活,如果我們輸入了錯誤的數據則無法通過激活。所以我們的目的很簡單,就是讓這個判斷邏輯失效。
第51行
存儲的正確的兩個激活號碼,通過:
將賬號密碼隔開,如下
1
2
3
4
private static final String[] DUMMY_CREDENTIALS = new String[]{
"[email protected]:20135115",
"[email protected]:20135115"
};
現在只有激活碼正確才能通過激活。
第331行
是Execute函數,邏輯判斷的部分。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
showProgress(false);
if (success) {
new AlertDialog.Builder(LoginActivity.this)
.setTitle("恭喜您")
.setMessage("成功激活!")
.show();
//finish();
} else {
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
dex2jar解壓下來文件很多,在mac上我們需要用到dex2jar的是這三個東西(windows上對應用bat文件):
AndroidStudio
打包好的APK文件
的後綴,需改為.zip
,然後解壓
。從解壓的文件中找到classes.dex文件,並將其放入dex2jar同一目錄下,如下:
並在cmd中也進入到同樣的目錄,然後執行:
Shell
1
sh d2j-dex2jar.sh classes.dex
執行如下:
然後我們會得到一個classes-dex2jar.jar文件,我們借助JD-GUI工具打開即可,打開如下:
可以看到代碼非常清晰,這樣我們就可以看到整個APP的代碼邏輯了。
apktool下載完成後有一個.sh文件和.jar文件,我們把APK放進來,如下:
在cmd中進入apktool目錄,執行命令:
1
sh apktool.sh apktool d FooApp.apk
d是decode的意思,表示我們要對FooApp解碼,結果如下:
然後你會驚喜的發現多了一個FooApp文件夾。
主要目錄說明:
打開我們的描述文件,高清無碼:
可以看到我們的App icon名稱為ic_launcher,我們找到所有mipmap開頭的文件夾,替換成下圖即可:
ic_launche
在最後重新打包後我們的App icon就會被修改了,不過在重新打包之前,我們還有最重要的一件事沒有做,那就是修改激活碼判斷邏輯。
我們通過源碼或者JD-GUI查看反編譯的代碼可以看到激活碼判斷邏輯如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Override
protected void onPostExecute(final Boolean success) {
mAuthTask = null;
showProgress(false);
if (success) {
// 激活碼正確
new AlertDialog.Builder(LoginActivity.this)
.setTitle("恭喜您")
.setMessage("成功激活!")
.show();
//finish();
} else {
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
}
所以我們只需要找到反編譯後的if(success)
的語句,並將其修改成if(!success)
即可,如下:
1
2
3
4
5
6
if (success)//修改成if(!success)
{
...
} else {
...
}
這樣我們就成功的顛倒了以前的邏輯,我們輸入一個錯誤的激活碼,就會被判斷成正確的。挺簡單的,是吧。
現在我們來動手修改:
LoginActivity$UserLoginTask.smali
文件.if-eqz
,通過AlertDialog
關鍵字輔助定位,發現在第228行
:if-eqz
修改成if-nez
,他們對應Java
的語法如下:
ok,大功告成,現在就可以重新打包了。關於smail語法,有興趣的直接Google就行了。
我們大概修改後兩個地方,其實重新打包也十分簡單,在cmd中執行以下命令即可:
1
sh apktool.sh b FooAPP -o NewFooApp.apk
其中b是build的意思,表示我們要將FooAPP文件夾打包成APK文件,-o用於指定新生成的APK文件名,這裡新的文件叫作NewFooApp.apk。執行結果如下圖所示:
然後你會發現同級目錄下生成了新的apk文件:
但是要注意,這個apk現在還是不能安裝的,因為我們沒有對它進行簽名,重新簽名後它就是個名副其實的盜版軟件了,大家一定要強烈譴責這種行為。
重新簽名也是很簡單的,我直接用的一個已有簽名文件,使用Android Studio或者Eclipse都可以非常簡單地生成一個簽名文件。
在cmd中執行格式如下:
1
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 簽名文件名 -storepass 簽名密碼 待簽名的APK文件名 簽名的別名
然後我們就可以用這個apk進行安裝了,為了追求更快的運行速度,我們可以對其進行一次字節對齊,這裡就不說了。
我們用NewFooApp.apk
安裝好盜版app後,發現圖標變成了籃球,並且隨便輸入數據都能通過激活了:
怎麼樣?總的來說還是挺有意思的吧,不過別用歪了。
第一步: 打開手機主菜單,選擇“設置”,然後選擇“無線和網絡”第二步:選擇“虛擬專用網設置&rd
其實Android studio的出現很大程度上方便了我們Android開發人員,今天我們說說怎麼構建我們自己的庫。依次按File->New Moudle->
第一步 :獲取ShareSDK 為了集成ShareSDK,您首先需要到ShareSDK官方網站注冊並且創建應用,獲得ShareSDK的Appkey,然後到SDK的下載頁
我們來定制一下吧布局文件:activity_main.xml <framelayout android:layout_height=0dp android:l