一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

手把手教你搞懂Android反編譯

 根的情義 2016-10-13

手把手教你搞懂Android反編譯

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

前言

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

什么是反編譯

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

  1. 一個(gè)是對(duì)代碼反編譯,也就是java文件的反編譯。
  2. 一個(gè)是對(duì)資源反編譯,也就是res文件的反編譯。

所需的工具


反編譯代碼的工具:

反編譯資源的工具:

熱身準(zhǔn)備

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

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


主要源碼說(shuō)明:

第51行存儲(chǔ)的正確的兩個(gè)激活號(hào)碼,通過(guò):將賬號(hào)密碼隔開(kāi),如下

private static final String[] DUMMY_CREDENTIALS = new String[]{ 'foo@163.com:20135115', 'bar@163.com:20135115' };

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

第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解壓下來(lái)文件很多,在mac上我們需要用到dex2jar的是這三個(gè)東西(windows上對(duì)應(yīng)用bat文件):

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

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


并在cmd中也進(jìn)入到同樣的目錄,然后執(zhí)行:

sh d2j-dex2jar.sh classes.dex

執(zhí)行如下:


然后我們會(huì)得到一個(gè)classes-dex2jar.jar文件,我們借助JD-GUI工具打開(kāi)即可,打開(kāi)如下:


可以看到代碼非常清晰,這樣我們就可以看到整個(gè)APP的代碼邏輯了。

反編譯資源

apktool下載完成后有一個(gè).sh文件和.jar文件,我們把APK放進(jìn)來(lái),如下:


在cmd中進(jìn)入apktool目錄,執(zhí)行命令:

sh apktool.sh apktool d FooApp.apk

d是decode的意思,表示我們要對(duì)FooApp解碼,結(jié)果如下:


然后你會(huì)驚喜的發(fā)現(xiàn)多了一個(gè)FooApp文件夾。


主要目錄說(shuō)明:

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

修改App icon

打開(kāi)我們的描述文件,高清無(wú)碼:



可以看到我們的App icon名稱(chēng)為ic_launcher,我們找到所有mipmap開(kāi)頭的文件夾,替換成下圖即可:


ic_launche

在最后重新打包后我們的App icon就會(huì)被修改了,不過(guò)在重新打包之前,我們還有最重要的一件事沒(méi)有做,那就是修改激活碼判斷邏輯。

修改邏輯

我們通過(guò)源碼或者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)的語(yǔ)句,并將其修改成if(!success)即可,如下:

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

這樣我們就成功的顛倒了以前的邏輯,我們輸入一個(gè)錯(cuò)誤的激活碼,就會(huì)被判斷成正確的。挺簡(jiǎn)單的,是吧。

現(xiàn)在我們來(lái)動(dòng)手修改:

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


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

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

ok,大功告成,現(xiàn)在就可以重新打包了。關(guān)于smail語(yǔ)法,有興趣的直接Google就行了。

重新打包

我們大概修改后兩個(gè)地方,其實(shí)重新打包也十分簡(jiǎn)單,在cmd中執(zhí)行以下命令即可:

sh apktool.sh b FooAPP -o NewFooApp.apk

其中b是build的意思,表示我們要將FooAPP文件夾打包成APK文件,-o用于指定新生成的APK文件名,這里新的文件叫作NewFooApp.apk。執(zhí)行結(jié)果如下圖所示:


然后你會(huì)發(fā)現(xiàn)同級(jí)目錄下生成了新的apk文件:


但是要注意,這個(gè)apk現(xiàn)在還是不能安裝的,因?yàn)槲覀儧](méi)有對(duì)它進(jìn)行簽名,重新簽名后它就是個(gè)名副其實(shí)的盜版軟件了,大家一定要強(qiáng)烈譴責(zé)這種行為。

重新簽名

重新簽名也是很簡(jiǎn)單的,我直接用的一個(gè)已有簽名文件,使用Android Studio或者Eclipse都可以非常簡(jiǎn)單地生成一個(gè)簽名文件。

在cmd中執(zhí)行格式如下:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 簽名文件名 -storepass 簽名密碼 待簽名的APK文件名 簽名的別名

然后我們就可以用這個(gè)apk進(jìn)行安裝了,為了追求更快的運(yùn)行速度,我們可以對(duì)其進(jìn)行一次字節(jié)對(duì)齊,這里就不說(shuō)了。

使用盜版APK

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


1

怎么樣?總的來(lái)說(shuō)還是挺有意思的吧,不過(guò)別用歪了。

參考鏈接:

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

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

Done

作者: @biggergao
個(gè)人博客: Mr.碼了戈壁

2016年06月29日

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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    久久精品福利在线观看| 成在线人免费视频一区二区| 国产永久免费高清在线精品| av在线免费观看一区二区三区| 国产目拍亚洲精品区一区| 人人妻在人人看人人澡| 亚洲一区二区三区一区| 超碰在线播放国产精品| 国产精品夜色一区二区三区不卡 | 欧美日韩免费黄片观看| 在线九月婷婷丁香伊人| 黄片美女在线免费观看| 欧美日韩成人在线一区| 日本精品最新字幕视频播放| 久久碰国产一区二区三区| 好吊色欧美一区二区三区顽频| 欧美一区二区日韩一区二区| 国产精品亚洲欧美一区麻豆| 91亚洲精品综合久久| 午夜福利大片亚洲一区| 精品国产91亚洲一区二区三区| 99久只有精品免费视频播放| 亚洲高清一区二区高清| 永久福利盒子日韩日韩| 国语久精品在视频在线观看| 又色又爽又黄的三级视频| 国产又色又爽又黄又免费| 国产在线一区二区三区不卡| 国产不卡的视频在线观看| 91人妻人澡人人爽人人精品| 蜜桃臀欧美日韩国产精品| 精品国产品国语在线不卡| 在线免费观看一二区视频| 中文字幕佐山爱一区二区免费| 男人大臿蕉香蕉大视频| 欧美成人黄色一区二区三区| 欧洲精品一区二区三区四区| 色综合久久中文综合网| 99久久国产精品成人观看 | 日本淫片一区二区三区| 日韩一级欧美一级久久|