安卓免 root 绕过网易云音乐 IP 限制 | 季寻日志
找到个免 root 的安卓防火墙 (NetGuard),通过虚拟一个本地 VPN 实现对网络访问数据的拦截以及处理。
但是对流量进行拦截为该应用的收费功能,该方案在未来可能会被网易封锁,因此请自行进行决舍。像我这样的好孩子当然是买买买啦
因为我的网络环境有点特殊,不能使用自定义 DNS 服务器,只好通过修改 dns 劫持的代码使其工作。程序本身不支持篡改 DNS 回应,但得力于其易读的代码,可以很简单的对代码进行改造实现。
当然,因为不是很懂安卓 JNI 交互,因此地址是写死到编译后的 apk 里的。如果你不需要这个功能,你可以跳过这部分直接到防火墙设定部分。
代码修改法
准备工作
- Android Studio 最新版
- 一份 NetGuard 最新版的源代码
- 一颗有着折腾的 ♥
首先要修改的是 JNI 的代码,使其在遇到希望修改的域名处将其 IP 数据给修改掉。
/** * 修改文件: * app/src/main/jni/netguard/dns.c * 行号: * 123 ~ 124 行中间插入 */if (qtype == DNS_QTYPE_A) { if (strcmp(name, 'music.163.com') == 0 || strcmp(name, 'ip.ws.126.net') == 0) { inet_pton(AF_INET, '79.137.38.20', data + off); } else if (strcmp(name, 'm10.music.126.net') == 0) { inet_pton(AF_INET, '125.39.1.27', data + off); }} else { if (strcmp(name, 'music.163.com') == 0 || strcmp(name, 'ip.ws.126.net') == 0) { inet_pton(AF_INET6, '2001:41d0:401:3100::4f8a', data + off); }}
然后是基于 IP 的屏蔽:
/** * 修改文件: * app/src/main/jni/netguard/ip.c * 行号: * 第 24 行后增加 */jboolean allow_ip(uint32_t dest);
307 ~ 312 行是这样的,替换为:
if (version != 4 || allow_ip(*(uint32_t*)daddr)) { jobject objPacket = create_packet( args, version, protocol, flags, source, sport, dest, dport, '', uid, 0); redirect = is_address_allowed(args, objPacket); allowed = (redirect != NULL); if (redirect != NULL && (*redirect->raddr == 0 || redirect->rport == 0)) redirect = NULL;} else { redirect = NULL; allowed = 0;}
然后在下面找到 get_uid
这个函数,上面加上:
jboolean allow_ip(uint32_t dest) { switch (dest){ case 180878559: // 223.252.199.10 case 1434516327: // 103.251.128.85 return 0; } return 1;}
然后因为流量过滤功能需要进行应用内购才允许执行,因此你还需要干掉内购认证的代码。
这个部分我就不多说了,代码都在那,自行寻找 😘
然后参考安卓应用签名编译的步骤产生 apk 文件,将其安装到手机内就行了。
防火墙设定法
- 首先保存事先配置好的设定文件到手机
- “三个点” 的菜单 > 设定 Settings > 备份 Backup > 导入设定 Import Settings
- 选择刚才保存的文件
- 等待数秒,直到提示操作完成 Action Complete
- 此时应停留在设定界面,返回到主界面。
- 点击应用左上角的滑条,启用防火墙。
总结
根据应用 FAQ 的说法,如果你关机的时候开了防火墙,那么重启后防火墙将自动启用。
赞 (0)