AbemaTV-无料インターネットテレビ局 附:破解教程(支持部分日系锁区限制软件)
注:仅破解区域限制,观看还需挂日本IP梯子 ,在此不提供梯子。
“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_classes2tvabemacomponentsfragmenta.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”,找到:
smalitvabemaajk.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 即可,实测能够正常进入主界面并观看视频,搞定。
修改 app 包后无法使用 Google Play IAP 内购功能。最完美的破解 root 检测方法仍然是安装 XPosed + rootcloak
类似方法解除 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” 随便改成个不存在对应命令的名字。
如果App是通过检测sim卡运营商限制区域的,那么应该可以通过改手机运营商代码来骗过(需要root),这样就不需要改apk了。日本主要移动ISP的运营商代码
docomo:4401020
softbank: 4402081
au: 4540492, 4405014