绕过Vpn和代理检测
代理检测的原理和定义
定义
代理检测是用于检测设备是否设置了网络代理。这种检测的目的是识别出设备是否尝试通过代理服务器来转发网络流量,从而实现截取App的流量进行分析。
原理
代理检测是用于检测设备是否设置了网络代理。这种检测的目的是识别出设备是否尝试通过代理服务器来转发网络流量,从而实现截取App的流量进行分析。
return System.getProperty("http.proxyHost") == null
&& System.getProperty("http.proxyPort") == null
Port跟设置有关,例如FD默认是8888
connection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
OkHttpClient.Builder()
.proxy(Proxy.NO_PROXY)
.build()
Vpn检测的原理和定义
定义
App或者系统通过检测用户是否正在使用虚拟专用网络的一种方法,当用户使用Vpn时 网络流量会被远程服务器加密转发,这样会隐藏实际的IP地址。
原理
当使用Vpn虚拟隧道协议时,会在当前节点创建基于eth之上的tun0接口或者ppp0接口,这些接口是用于连接虚拟网络的特殊接口。
netWorkInterface.getName()
绕过代理检测的方法
通过Hook
Hook掉系统类“java.net.NetworkInterface”的getProperty
function anti_proxy() {
var GetProperty = Java.use("java.lang.System");
GetProperty.getProperty.overload("java.lang.String").implementation = function(getprop) {
if (getprop.indexOf("http.proxyHost") >= 0 || getprop.indexOf("http.proxyPort") >= 0) {
return null;
}
return this.getProperty(getprop);
}
}
绕过Vpn检测的方法
通过Hook
function hook_vpn() {
Java.perform(function () {
var NetworkInterface = Java.use("java.net.NetworkInterface");
NetworkInterface.getName.implementation = function () {
var name = this.getName(); //hook java层的getName方法
console.log("name: " + name);
if (name === "tun0" || name === "ppp0") {
return "rmnet_data0";
} else {
return name;
}
}
var NetworkCapabilities = Java.use("android.net.NetworkCapabilities");
NetworkCapabilities.hasTransport.implementation = function () {
return false;
}
NetworkCapabilities.appendStringRepresentationOfBitMaskToStringBuilder.implementation = function (sb, bitMask, nameFetcher, separator) {
使用r0Caputre通杀检测
python r0Caputre.py xxx.xxx.xxx -v -p xxx.pcap
此命令可以实现使用r0Caputre生成一个.pcap的文件,该文件可以直接拖入WireShark进行流量分析
绕过Vpn和代理检测
http://1.95.139.200:8090/archives/VpnJianCe