透過修改 apk 來移除巴哈姆特 app 廣告
之前已經有一篇阻擋 Android 版巴哈姆特的廣告在講如何阻擋巴哈 app 廣告了 但自從 Android 7 開始,Android 對於使用者自己新增的憑證有限制會導致 https 過濾不完全,有 root 的裝置可以使用 Move Certs! 這個 app 來把 AdGuard 的憑證轉為系統憑證,這樣 AdGuard 才能繼續正常過濾 因此對於沒 root 的裝置就需要其他辦法來去除廣告了,這就是這篇文章的目的
資訊來源: ArguardForAndroid issue #334
Move Certs! 的 GitHub releases 中只有
1.0.1
的 apk,最新版1.0.2
可能要另外找,而它的 Package name 是com.nutomic.zertman
更新: 有使用 Magisk 的人可以去搜尋一個 Move Certificates 的 module 來安裝,功能和 Move Certs! 一樣
準備
這篇文章使用版本為
1 | java=1.8.0_162 |
修改
在有bahamut.apk
的目錄下輸入指令apktool d bahamut.apk
然後打開./bahamut/smali/tw/com/gamer/android/ad/MobileAdView.smali
在裡面找到一行
1 | .field private static final API:Ljava/lang/String; = "https://api.gamer.com.tw/mobile_app/ad/v2/mobile_ad.php" |
在這邊可以用瀏覽器打開 https://api.gamer.com.tw/mobile_app/ad/v2/mobile_ad.php,會發現是 json 格式的廣告列表修改方式是利用線上服務(gist,pastebin 之類的)來回傳空的廣告列表:
1 | {"banner":{},"native_major":{"Android__":[],"iOS__":[]},"native_minor":{"Android__":[],"iOS__":[]}} |
我已經用上面的內容新增一個 gist 了,懶得新增可以直接複製: url 然後把剛剛上面那行改成:
1 | .field private static final API:Ljava/lang/String; = "空廣告列表的網址" |
再來是第二處要修改一樣是在MobileAdView.smali
大約 600
多行的地方找到
1 | .method public static requestAd(/*這邊省略...*/)V |
這邊的改法也是把 api 網址改成空廣告列表的網址
然後再度回到有bahamut.apk
的資料夾下執行指令apktool b bahamut -o bahamut_noads.apk
之後就會產生出沒有廣告的巴哈姆特 apk: bahamut_noads.apk
不過這個 apk
因為還沒有簽名所以無法直接安裝(有核心破解就可以跳過簽名的部分)
簽名
已經會幫 apk 簽名的請直接跳過這一部份
為了簡化簽名的方法,這邊會使用第三方工具 uber-apk-signer
到 Releases
頁面選擇最新版的,在下面找到uber-apk-signer-x.y.z.jar
下載(x.y.z
是版本號)
然後把下載回來的uber-apk-signer-x.y.z.jar
放到與bahamut_noads.apk
同個目錄下並改名sign.jar
然後執行指令java -jar sign.jar --apks ./bahamut_noads.apk
最後會得到bahamut_noads-aligned-debugSigned.apk
,就可以傳到手機上去安裝
安裝前請務必把原版巴哈姆特 app 移除
關於去廣告
如果可以的話我是希望巴哈能像動畫瘋一樣推出付費去廣告的方法,但是目前(2018/2/5 17:57)還沒有這種方法來去廣告當然如果想要靠看廣告支持巴哈姆特的營運的話可以繼續使用官方 app 而如果和我一樣看到廣告就不舒服的話請自己按照這篇文章的方法去去廣告,我沒有打算開放下載修改後的 apk
更新紀錄
- 2018/4/11 更新: 巴哈姆特 5.7.5 版有很大的改動,目前最新能修改的版本為 5.7.3
- 2018/8/20 更新: 修改 Move Certs! 的連結,因為它已經從 Google Play 消失了