Implement The VPN Hood For Xamarin.android

Introduction

In this article, I have explained the VPN connection via VPNHood in Xamarin.Android. Undetectable VPN for ordinary users and experts. VpnHood is a solution to bypass Advanced Firewall and can circumvent deep packet inspection. VpnHood has been created from scratch entirely in C#.

Server Features

  • No Network configuration or knowledge is required
  • No Admin privilege is required
  • Built-In User Management
  • Built-In NAT with zero configuration
  • Run on any Windows 7,8,10 or Windows Server
  • Run on Linux

Requirement

Install-Package VpnHood.Client -Version 1.2.250

Install-Package VpnHood.Client.App -Version 1.1.235

Step 1

Create a new class name like AndroidApp.cs and implementing the Application, IAppProvider Interface to connect the vpnhood server.

public class AndroidApp: Application, IAppProvider {
    public static AndroidApp Current {
        get;
        private set;
    }
    private VpnHoodApp VpnHoodApp {
        get;
        set;
    }
    public IDevice Device {
        get;
    }
    public AndroidApp(IntPtr javaReference, JniHandleOwnership transfer): base(javaReference, transfer) {
        Device = new AndroidDevice();
    }
    public override void OnCreate() {
        base.OnCreate();
        VpnHoodApp = VpnHoodApp.Init(this, new AppOptions {});
        Current = this;
    }
    protected override void Dispose(bool disposing) {
        if (disposing) {
            VpnHoodApp?.Dispose();
            VpnHoodApp = null;
        }
        base.Dispose(disposing);
    }
}

Step 2

After creating the Vpn hood connection, call the VPN server via webview to connect the public server and Undetectable vpn to bypass Advanced Firewall and can circumvent deep packet inspection.

[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity: AppCompatActivity {
    public WebView WebView {
        get;
        private set;
    }
    private VpnHoodAppUI _appUi;
    private
    const int REQUEST_VpnPermission = 10;
    private AndroidDevice Device => (AndroidDevice) AndroidApp.Current.Device;
    protected override void OnCreate(Bundle savedInstanceState) {
        try {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            SetContentView(Resource.Layout.activity_main);
            Device.OnRequestVpnPermission += Device_OnRequestVpnPermission;
            _appUi = VpnHoodAppUI.Init(Resources.Assets.Open("SPA.zip"));
            InitWebUI();
        } catch (Exception ex) {}
    }
    private void Device_OnRequestVpnPermission(object sender, System.EventArgs e) {
        var intent = VpnService.Prepare(this);
        if (intent == null) {
            Device.VpnPermissionGranted();
        } else {
            StartActivityForResult(intent, REQUEST_VpnPermission);
        }
    }
    protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) {
        if (requestCode == REQUEST_VpnPermission && resultCode == Result.Ok) Device.VpnPermissionGranted();
        else Device.VpnPermissionRejected();
    }
    protected override void OnDestroy() {
        Device.OnRequestVpnPermission -= Device_OnRequestVpnPermission;
        _appUi.Dispose();
        _appUi = null;
        base.OnDestroy();
    }
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults) {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
    public void InitWebUI() {
        var webViewClient = new MyWebViewClient();
        webViewClient.PageLoaded += WebViewClient_PageLoaded;
        WebView = new WebView(this);
        WebView.SetWebViewClient(webViewClient);
        WebView.Settings.JavaScriptEnabled = true;
        WebView.Settings.DomStorageEnabled = true;
        WebView.Settings.JavaScriptCanOpenWindowsAutomatically = true;
        WebView.SetLayerType(LayerType.Hardware, null);
        WebView.SetWebContentsDebuggingEnabled(true);
        WebView.LoadUrl($ "{_appUi.Url}?nocache={_appUi.SpaHash}");
    }
    private void WebViewClient_PageLoaded(object sender, System.EventArgs e) {
        SetContentView(WebView);
        Window.SetStatusBarColor(new Color(0x19, 0x40, 0xb0));
    }
    public override void OnBackPressed() {
        if (WebView.CanGoBack()) WebView.GoBack();
        else base.OnBackPressed();
    }
}

Step 3

The final step to copy-paste the attached SAP.Zip files in the project assets folder to access the public server.

Output

Hopefully, this article has given you sufficient information for you to start creating your vpnhood server in your Xamarin.Android application. Feel free to leave a comment if you would like me to further elaborate on anything within this article.


Similar Articles