这是肉师傅知识星球的一道检测vpn抓包的练习题,当检测到开启vpn就会闪退
Demo链接放在文章最后,需要的自取
既然已经知道是检测vpn了,通过查询资料以下4个类跟网络相关
通过百度知道java.net.NetworkInterface.getName()是检测vpn的api,用objection来hook查看一下
发现当开关vpn时,会检测到tun0的网卡,可以用来监测是否开启vpn。
那用frida来hook修改tun0的返回值看看能不能绕过
还是会闪退,怀疑检测点不止一个
NetworkCapabilities 也有检测vpn的
用objection hook一下 android.net.ConnectivityManager.getNetworkCapabilities
通过查看文档知道,返回null即可
用frida hook返回为null,还是闪退,用jadx打开查看报错位置
这里返回null的话就无法调用后面的hasTransport方法,直接hook hasTransport修改返回值为false绕过
开启vpn后app不闪退了,成功绕过
完整代码
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);
链接:pan.baidu.com/s/1h4QkrLyD…
提取码:jjrh\
最后推荐一波肉师傅的知识星球,这个男人除了生孩子什么都会