1. 程式人生 > >APK 去廣告(修改程式碼級)

APK 去廣告(修改程式碼級)



APK去廣告(修改程式碼級)

作者:PeerLessSoul

時間:2016-07-24

轉載請註明版權

準備工具

  1. Java SE Development Kit (JDK)下載地址

  2. 安裝完成後設定全域性路徑變數(參考文章)

  3. apktool.jar下載地址

  4. dex2jar(下載地址)

  5. JavaDecompiler(JD-GUI)(下載地址)

  6. Notepad++(下載地址)

操作流程

解包

  1. 命令提示行執行:java -jarapktool.jar d "XYZ.apk"

  2. 找到解包後文件夾中的classes.dex,並使用dex2jar中的d2j-dex2jar.bat

    進行dex檔案轉換成jar檔案;

  3. 命令如下:d2j-dex2jar.bat “classes.dex”

  4. 最終生成classes-dex2jar.jar檔案;

破解準備

使用jd-gui(上述裝備工具5),開啟並載入classes-dex2jar.jar檔案;

如下圖所示;

(此環節只是作為後面直接修改smali程式碼作為參考)

這裡可以看到是google的廣告,googleSDK可以看到主要在APP裡面呼叫是採用

com.google.android.gms.ads.AdView類 及InterstitialAd類,這點可以查閱Google 廣告SDKAPI

文件;

去除其他廣告,建議先看廣告SDKAPI,這樣就知道APK裡面的寫法;

開始破解

使用Notepad++查詢剛才解包後的路徑中AdView作為關鍵字,如下圖所示;(這裡也就是剛才提到的Google廣告SDK的主要類的關鍵字)

下面查詢到的結果可以看到很多地方有呼叫或者引用的地方;基本可以對查詢中的結果進行區分,如何區分的辦法,我是正向的會寫APP所以定位很清楚,如果不清楚可以找一些APP程式設計的書籍看一些,這些程式碼就很清晰和簡單;

破解的思路:有些破解是直接隱藏現實廣告的窗體,基本上不用動流程程式碼;成功率比較高,因為核心業務程式碼沒有去改動,只是改動佈局頁面中的窗體高度、寬度等等顯示級別的屬性,從而達到去廣告的效果;廣告程式碼還是在呼叫和執行,效率是肯定會有一些影響。我們這次要乾的是直接修改業務程式碼,直接從程式碼級別去掉廣告;

我們點選一個Notepad++所找到的檔案程式碼段;如下圖所示:

Notepad++上面所顯示的就是對應檔案的程式碼段;這個時候開啟剛才開啟的JD-GUI -並找到對應的類檔案;

我擷取的對照程式碼段;這裡找很需要耐心和方法;

  1. jd-gui中要看關鍵程式碼段的上下行,不僅僅看呼叫行;

  2. Notepad++中,按照.line進行比較核對;

  3. 並刪除相對應的呼叫程式碼;

重新封包

APP解包後的檔案需要重新打包並且簽名才能複製到裝置上進行安裝和應用,當完成了修改工作,就可以進行重封包的工作;

  1. 重新把資料夾打包執行命令:

    java -jar apktool.jarb "XXXX" “XXXX.apk";

  2. 重新簽名APK包,執行命令:

    jarsigner -verbose-keystore android.keystore -signedjar XXXX_signed.apk "XXX.apk"android.keystore

    (android.keystore為自己建立的簽名檔案)

    最終生成的XXXX_signed.apk就可以複製到裝置安裝了.

附:自己生成簽名檔案命令

keytool -genkey -alias android.keystore -keyalg RSA -validity 20000-keystore android.keystore

其中:signedjarkeytool命令 均來自JDK資料夾下面bin,如果配置好作業系統全域性變數,直接在命令提示行下是可以直接呼叫;

注意事項

在不熟悉的情況下修改程式碼,,切忌一次修改很多地方,剛開始時候修改少部分程式碼,重新打個包安裝上去試試,驗證一下自己修改的效果。因為很有可能刪了不該刪除的程式碼段,造成APP無法啟動;