久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

手把手教你搞懂Android反編譯

 根的情義 2016-10-13

手把手教你搞懂Android反編譯

轉(zhuǎn)載時請必須注明出處:http://www./2016/06/29/2016-06-29/

前言

反編譯別人的程序不是什么值得炫耀的事,,希望大家最好只是興趣探索,,而不是利益驅(qū)動。本文主要目的是繞開一個簡單的激活程序,。

什么是反編譯

我們知道,,Android的程序打包后會生成一個APK文件,這個文件可以直接安裝到任何Android手機上,,因此,,反編譯就是對這個APK進行反編譯。Android的反編譯分成兩個部分:

  1. 一個是對代碼反編譯,,也就是java文件的反編譯,。
  2. 一個是對資源反編譯,也就是res文件的反編譯,。

所需的工具


反編譯代碼的工具:

反編譯資源的工具:

熱身準(zhǔn)備

首先我們需要一個APK,,這里我自己寫了一個,,源碼下載地址:http://download.csdn.net/detail/u012891055/9563180,打包成APK后下載到手機上,。

它的主要功能是模擬郵箱激活,,如果我們輸入了錯誤的數(shù)據(jù)則無法通過激活。所以我們的目的很簡單,,就是讓這個判斷邏輯失效,。


主要源碼說明:

第51行存儲的正確的兩個激活號碼,通過:將賬號密碼隔開,,如下

private static final String[] DUMMY_CREDENTIALS = new String[]{ '[email protected]:20135115', '[email protected]:20135115' };

現(xiàn)在只有激活碼正確才能通過激活,。

第331行是Execute函數(shù),邏輯判斷的部分,。

@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文件):

  • d2j_invoke.sh
  • d2j-dex2jar.sh
  • lib

AndroidStudio打包好的APK文件的后綴,需改為.zip,,然后解壓,。從解壓的文件中找到classes.dex文件,并將其放入dex2jar同一目錄下,,如下:


并在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文件夾,。


主要目錄說明:

  • AndroidManifest.xml:描述文件
  • res:資源文件
  • smail:反編譯出來的所有代碼,語法與java不同,,類似匯編,,是Android虛擬機所使用的寄存器語言

修改App icon

打開我們的描述文件,高清無碼:



可以看到我們的App icon名稱為ic_launcher,我們找到所有mipmap開頭的文件夾,,替換成下圖即可:


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)即可,,如下:

if (success)//修改成if(!success) { ... } else { ... }

這樣我們就成功的顛倒了以前的邏輯,,我們輸入一個錯誤的激活碼,就會被判斷成正確的,。挺簡單的,,是吧。

現(xiàn)在我們來動手修改:

  1. 打開smail里的LoginActivity$UserLoginTask.smali文件.
  2. 全局搜索if-eqz,,通過AlertDialog關(guān)鍵字輔助定位,,發(fā)現(xiàn)在第228行


  3. ok,就是這里了,,然后將if-eqz修改成if-nez,他們對應(yīng)Java的語法如下:

Smail 語法 Java 語法
if-eqz v0, if(v0 == 0)
if-nez v0, if(v0 != 0)

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

我們用NewFooApp.apk安裝好盜版app后,,發(fā)現(xiàn)圖標(biāo)變成了籃球,并且隨便輸入數(shù)據(jù)都能通過激活了:


1

怎么樣,?總的來說還是挺有意思的吧,,不過別用歪了。

參考鏈接:

Android安全攻防戰(zhàn),,反編譯與混淆技術(shù)完全解析(上)- 郭霖

Android安全技術(shù)解密與防范 - 周圣韜

Done

作者: @biggergao
個人博客: Mr.碼了戈壁

2016年06月29日

著作權(quán)歸作者所有

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多