手把手教你搞懂Android反編譯轉(zhuǎn)載時請必須注明出處:http://www./2016/06/29/2016-06-29/ 前言反編譯別人的程序不是什么值得炫耀的事,,希望大家最好只是興趣探索,,而不是利益驅(qū)動。本文主要目的是繞開一個簡單的激活程序,。 什么是反編譯我們知道,,Android的程序打包后會生成一個APK文件,這個文件可以直接安裝到任何Android手機上,,因此,,反編譯就是對這個APK進行反編譯。Android的反編譯分成兩個部分:
所需的工具
反編譯代碼的工具:
反編譯資源的工具:
熱身準(zhǔn)備首先我們需要一個APK,,這里我自己寫了一個,,源碼下載地址:http://download.csdn.net/detail/u012891055/9563180,打包成APK后下載到手機上,。 它的主要功能是模擬郵箱激活,,如果我們輸入了錯誤的數(shù)據(jù)則無法通過激活。所以我們的目的很簡單,,就是讓這個判斷邏輯失效,。 主要源碼說明:
private static final String[] DUMMY_CREDENTIALS = new String[]{
'[email protected]:20135115',
'[email protected]:20135115'
}; 現(xiàn)在只有激活碼正確才能通過激活,。
@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上對應(yīng)用bat文件):
并在cmd中也進入到同樣的目錄,,然后執(zhí)行: sh d2j-dex2jar.sh classes.dex 執(zhí)行如下: 然后我們會得到一個classes-dex2jar.jar文件,我們借助JD-GUI工具打開即可,打開如下: 可以看到代碼非常清晰,,這樣我們就可以看到整個APP的代碼邏輯了,。 反編譯資源apktool下載完成后有一個.sh文件和.jar文件,我們把APK放進來,,如下: 在cmd中進入apktool目錄,,執(zhí)行命令: sh apktool.sh apktool d FooApp.apk d是decode的意思,表示我們要對FooApp解碼,,結(jié)果如下: 然后你會驚喜的發(fā)現(xiàn)多了一個FooApp文件夾,。 主要目錄說明:
修改App icon打開我們的描述文件,高清無碼:
ic_launche
在最后重新打包后我們的App icon就會被修改了,,不過在重新打包之前,我們還有最重要的一件事沒有做,,那就是修改激活碼判斷邏輯,。 修改邏輯我們通過源碼或者JD-GUI查看反編譯的代碼可以看到激活碼判斷邏輯如下: @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)
{
...
} else {
...
} 這樣我們就成功的顛倒了以前的邏輯,,我們輸入一個錯誤的激活碼,就會被判斷成正確的,。挺簡單的,,是吧。 現(xiàn)在我們來動手修改:
ok,,大功告成,,現(xiàn)在就可以重新打包了。關(guān)于smail語法,,有興趣的直接Google就行了,。 重新打包我們大概修改后兩個地方,其實重新打包也十分簡單,,在cmd中執(zhí)行以下命令即可: sh apktool.sh b FooAPP -o NewFooApp.apk 其中b是build的意思,,表示我們要將FooAPP文件夾打包成APK文件,-o用于指定新生成的APK文件名,這里新的文件叫作NewFooApp.apk,。執(zhí)行結(jié)果如下圖所示: 然后你會發(fā)現(xiàn)同級目錄下生成了新的apk文件: 但是要注意,,這個apk現(xiàn)在還是不能安裝的,因為我們沒有對它進行簽名,,重新簽名后它就是個名副其實的盜版軟件了,,大家一定要強烈譴責(zé)這種行為。 重新簽名重新簽名也是很簡單的,,我直接用的一個已有簽名文件,,使用Android Studio或者Eclipse都可以非常簡單地生成一個簽名文件。 在cmd中執(zhí)行格式如下: jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 簽名文件名 -storepass 簽名密碼 待簽名的APK文件名 簽名的別名 然后我們就可以用這個apk進行安裝了,,為了追求更快的運行速度,,我們可以對其進行一次字節(jié)對齊,這里就不說了,。 使用盜版APK我們用 1
怎么樣,?總的來說還是挺有意思的吧,,不過別用歪了。 參考鏈接: Android安全攻防戰(zhàn),,反編譯與混淆技術(shù)完全解析(上)- 郭霖 Done作者: @biggergao 2016年06月29日 著作權(quán)歸作者所有 |
|