AbemaTV android app 簡單破解去除區域限制

AbemaTV-無料インターネットテレビ局」是一個日本網路電視台「アベマTV」出的視頻 App,裡面不少節目和視頻都是免費的。

但是我安裝後發現這個 App 有區域限制,啟動時全屏顯示 「このサービスはお住まいの地域からはご利用になれません。」提示,無法繼續(已經用了日本IP的shadowsocks)。

簡單地嘗試下破解了這個 App 的區域限制。步驟如下:

1. 從 apkpure 下載 AbemaTV app 最新版的 apk

2. 用 apktool 這個工具解包下載的 apk. apktool 是一個 java 包,需要安裝 Java 運行。

java -jar apktool_2.2.4.jar d “AbemaTV 無料インターネットテレビ局_v3.5.1_apkpure.com.apk”

3. 解包後的文件在當前目錄下 “AbemaTV 無料インターネットテレビ局_v3.5.1_apkpure.com/” 文件夾。其中,res/ 是資源文件,smali/ 和 smali_classes2/ 是 java 源碼編譯後的 smali 文件。這個 app 好像沒怎麼加密什麼的。

在整個目錄里搜索 「このサービスはお住まいの地域からはご利用になれません。」 字元串,找到:

<string name=”error_abroad_description”>このサービスはお住まいの地域からはご利用になれません。</string>

搜索 error_abroad_description,找到:res/values/public.xml:
<public type=”string” name=”error_abroad_description” id=”0x7f0a0114″ />

搜索 0x7f0a0114,找到 smali_classes2\tv\abema\components\fragment\a.smali:

.class public Ltv/abema/components/fragment/a;
.super Ltv/abema/components/fragment/u;
.source “AbroadFragment.java”

const v1, 0x7f0a0114
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(I)V

可以看到,這是一個 Fragment 類編譯成的 smali 文件,當 app 檢測到當前設備是日本以外區域(檢測方法未知,可能是檢測手機sim卡運營商信息)時就在當前 activity 上載入這個全屏 fragment 以阻止使用,所以最簡單的破解方法就是把這個「創建並顯示 Fragment」部分代碼去掉。

搜索 “Ltv/abema/components/fragment/a”,找到:
smali\tv\abema\a\jk.smali

.line 202
const-class v0, Ltv/abema/components/fragment/a;
invoke-virtual {p0, v0}, Ltv/abema/a/jk;->I(Ljava/lang/Class;)V

看起來就是這裡了,將這幾行用 “#” 注釋掉。

4. 最後,用 apktool 重新打包修改後文件生成 apk,參數就是之前解包apk文件所在目錄

java -jar apktool_2.2.4.jar b “AbemaTV 無料インターネットテレビ局_v3.5.1_apkpure.com”

生成的 apk 在 AbemaTV 無料インターネットテレビ局_v3.5.1_apkpure.com/dist 文件夾下。

生成的 apk 是未簽名的,無法直接安裝。可以手工用 java bin目錄下 keytool 工具生成密鑰,jarsigner 工具給 apk 簽名。(具體過程網上資料很多);也可以用直接用 apk-signer 這個圖形化工具來進行

最後在手機上安裝生成的 AbemaTV_v3.5.1_SIGNED_UNALIGNED.apk 即可,實測能夠正常進入主界面並觀看視頻,搞定。

附上我自己生成的破解區域限制的 AbemaTV apk:

AbemaTV_v3.5.1_SIGNED_UNALIGNED.apk
AbemaTV_v3.15.1_SIGNED_UNALIGNED.apk (2017-12-25)

AbemaTV__v3.31.0_apkpure.com_SIGNED_UNALIGNED.apk (2018-09-06)

Update

修改 app 包後無法使用 Google Play IAP 內購功能。最完美的破解 root 檢測方法仍然是安裝 XPosed + rootcloak

Update.2 (2017-08-08)

類似方法解除 Hulu 日本Android app的 root檢測:

由錯誤提示「OSの整合性チェックに失敗しました。Root権限を取得している場合、起動できません。」跟蹤找到某個Fragment:


const-string v2, “su”

invoke-virtual {v1, v2}, Ljava/lang/Runtime;->exec(Ljava/lang/String;)Ljava/lang/Process;
:try_end_0
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0

move-result-object v0

const v1, 0x7f0900e8

這裡通過運行 su 檢測是否有異常來判斷機器是否已 root,所以最簡單的移除方法就是把 “su” 隨便改成個不存在對應命令的名字。

Hulu.jp_v1.0.11_apkpure.com_SIGNED_UNALIGNED.apk

Update.3 (2017-12-25)

如果App是通過檢測sim卡運營商限制區域的,那麼應該可以通過改手機運營商代碼來騙過(需要root),這樣就不需要改apk了。日本主要移動ISP的運營商代碼
docomo:4401020
softbank: 4402081
au: 4540492, 4405014