android一款軟件的反編譯實現(APKtool)


本文主要介紹的是一款軟件的反編譯實現,從而實現去除軟件中的插屏廣告;這里需要重點說明一下,去除廣告時,我們首先要做的是裝在真機上去體驗,看一下廣告出現的地方,對軟件的實現有一個大概的概括,而不是盲目的去查看代碼,

一 准備的工具

(1)APKtool

(2)dex2jar

(3)jd-gui

關於上述工具的實現,可以參考相關blog的介紹,這里就不詳細說明了。

二 開始我們的反編譯

本文使用的APK是在小米應用商城中下載的----2048

(1)使用apktool將其轉化為dex文件,轉化后的文件為下圖所示,簡單說明一下,smali文件為我們所要分析的代碼部分,這個部分是由原工程中的java文件所生成,對smali還不是很了解的同學找度娘再學習一下,AndroidManifest.xml寫過Android代碼的都不會陌生。


(2)將apk轉化為dex文件后,首先我們分析一下AndroidManifest.xml內容,通過它我們可以獲取一下內容

---1---軟件的包名,我們可以利用它找到原工程中的java文件所生成的smali文件,而且打包的時候是必不可少的。

---2---軟件的LAUNCHER,即android.intent.category.LAUNCHER,啟動軟件首先進入的部分,分析的開始。

(3).apk格式也是一種壓縮包的形式,解壓后的形式為下圖,我們需要的是classes.dex


(4)得到classes.dex后,我們使用dex2jar即可將其轉化為jar形式,再使用jd-gui去查看jar


(5)前面我們已經得到了LAUNCHER,然后定位到代碼當中SplashActivity.java,即為軟件首先啟動的界面,看看他們做了什么事情,上面開頭已經說了,體驗軟件中廣告出現的地方,我找到的有三個地方,

---1---引導頁后,會有一張覆蓋全屏的廣告

---2---軟件的主界面,以一種類似Dialog形式懸浮在界面上

---3---進入游戲界面的時候,會在下方出現廣告條

(6)對於上述廣告出現的位置,我采用去除廣告的方式為

---1---設置軟件的主界面為LAUNCHER,即為啟動頁,跳過引導頁

---2---分別在軟件的主界面和游戲界面禁止廣告的播放

(7)進入代碼分析階段,在jd-gui中找到GameActivity.java,這個是軟件的主界面,首先在onCreate()方法中分析代碼,注意到如下地方


再查看showAsPopop方法,大致推斷出該地方為廣告顯示的地方;進入MainActivity.java查看代碼,這個是游戲時的主界面,還是查看onCreate()方法


在這個地方一個showBanner()方法,其他地方沒有了,推斷該代碼也是廣告插入的地方(查找的時候不是一下就找到的,需要我們多次分析/實踐得到的);還有一個廣告地方是在引導頁后出現的,我們只需將GameActivity.java設置為啟動頁就可以了。

(8)廣告插入的地方我們找到了,下面需要在smali文件中修改了,在GameActivity.smali文件中找到onCreate()方法調用的地方,我們在onCreate()方法中找到showAsPopup()方法調用的部分


我們將invoke-direct.......這一行的內容給刪除,作用就是不讓他調用該方法,在游戲時的主界面MainActivity.smali文件也是這樣修改的,這里就不介紹了。

(9)如何修改LAUNCHER呢?很簡單就是在AndroidManifest.xml將


放置到GameActivity中,即可完成LAUNCHER的修改。

(10)做完以上三個廣告修改的地方,再將smali文件打包成apk格式的軟件安裝到手機上,測試一下;


寫在最后:

內容寫的有些亂,見諒!


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com