绕过vpn检测抓包

4,653 阅读1分钟

这是肉师傅知识星球的一道检测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打开查看报错位置

image.png

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

image.png

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

image.png

完整代码

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\

最后推荐一波肉师傅的知识星球,这个男人除了生孩子什么都会

微信图片_20210906202823.png