透過修改 apk 來移除巴哈姆特 app 廣告 | maple 的廢文集中區

透過修改 apk 來移除巴哈姆特 app 廣告

之前已經有一篇阻擋 Android 版巴哈姆特的廣告在講如何阻擋巴哈 app 廣告了但是根據 這個 Issue,自從 Android 7 開始,Android 對於使用者自己新增的憑證有限制會導致 https 過濾不完全,有 root 的裝置可以使用 Move Certs! 這個 app 來把 AdGuard 的憑證轉為系統憑證來繼續正常過濾不過沒有 root 的裝置就只能靠其他辦法來去除廣告了

Move Certs! 的 GitHub releases 中只有 1.0.1 的 apk,最新版 1.0.2 可能要另外找

它的 Package name 是 com.nutomic.zertman

準備

  1. 安裝 java
  2. 安裝 apktool (內有安裝教學)
  3. 取得原版巴哈姆特 apk (apkpure)

這篇文章使用版本為

1
2
3
java=1.8.0_162
apktool=2.3.1
巴哈姆特apk=5.7.0

修改

在有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
2
3
4
5
6
7
.method public static requestAd(/*這邊省略...*/)V
/*其他程式碼*/
/*在這邊應該能找到下方那一行,這個網址也要改*/

const-string v3, "https://api.gamer.com.tw/mobile_app/ad/v2/mobile_ad.php"

.end method

這邊的改法也是把 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 消失了