检测vpn抓包
zsk Lv4

这是肉师傅知识星球的一道检测vpn抓包的练习题,当检测到开启vpn就会闪退
软件我放在网盘了,需要的自取
链接:https://pan.baidu.com/s/1h4QkrLyDlz8Wb1XylzYLWA
提取码:jjrh
既然已经知道是检测vpn了,通过查询资料以下4个类跟网络相关

image

通过百度知道java.net.NetworkInterface.getName()是检测vpn的api,用objection来hook查看一下

image

发现当开关vpn时,会检测到tun0的网卡,可以用来监测是否开启vpn。
那用frida来hook修改tun0的返回值看看能不能绕过

image

还是会闪退,怀疑检测点不止一个
NetworkCapabilities 也有检测vpn的
用objection hook一下 android.net.ConnectivityManager.getNetworkCapabilities

image

通过查看文档知道,返回null即可

image

用frida hook返回为null,还是闪退,用jadx打开查看报错位置

image

这里返回null的话就无法调用后面的hasTransport方法,直接hook hasTransport修改返回值为false绕过

image

开启vpn后app不闪退了,成功绕过

image

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function main() {
Java.perform(function () {
Java.use("java.net.NetworkInterface").getName.implementation = function(){
var string_class = Java.use("java.lang.String");
var gname = this.getName();
if(gname == string_class.$new("tun0")){
console.log("find ===> ", gname);
return string_class.$new("rmnet_data0")
} else{
console.log("gname ===> ", gname)
}
return gname;
}
// Java.use("android.net.ConnectivityManager").getNetworkCapabilities.implementation = function(v){
// console.log(v)
// var res = this.getNetworkCapabilities(v)
// console.log("res ==> ", res)
// return null;
// }
Java.use("android.net.NetworkCapabilities").hasTransport.implementation = function(v){
console.log(v)
var res = this.hasTransport(v)
console.log("res ==> ", res)
return false;
}
})
}
setImmediate(main);
 评论