专为 Android 设计的网络数据包捕获和注入库
NetBare是一款网络包拦截和注入框架,可以实现抓包、屏蔽包、改包等各种强大功能。NetBare核心是基于VPN技术,将网络包转发到本地代理服务器,再通过虚拟网关(VirtualGateway)进行拦截分发。在设计上,虚拟网关层是完全对外开放的,开发者可以自由定义虚拟网关,也可以使用NetBare内部已实现的虚拟网关进行网络包的处理。
NetBare.get().attachApplication(application, BuildConfig.DEBUG)val jks = JKS(context, alias, password, commonName, organization,
organizationalUnitName, certOrganization, certOrganizationalUnitName)// 判断证书是否安装
JKS.isInstalled(context, alias)
// 安装证书
JKS.install(context, name, alias)// 继承NetBareService创建自己应用的Service
class AppService : NetBareService() {
override fun notificationId(): Int {
// 通知栏ID
}
override fun createNotification(): Notification {
// 创建一个Notification
}
}<service android:name=".AppService"
android:permission="android.permission.BIND_VPN_SERVICE">
<intent-filter>
<action android:name="android.net.VpnService" />
<action android:name="com.github.megatronking.netbare.action.Start"/>
<action android:name="com.github.megatronking.netbare.action.Stop"/>
</intent-filter>
</service>// 通过NetBareConfig自由配置NetBare服务并启动
NetBare.get().start(NetBareConfig)
// 停止NetBare服务
NetBare.get().stop()NetBareConfig需要使用NetBareConfig.Builder进行构造,解释下以下几个重要的配置方法。
NetBare框架提供了默认的NetBareConfig来快速集成:
// 创建默认的NetBareConfig,作用于所有IP协议
val config = NetBareConfig.defaultConfig()
// 为Http协议创建默认的NetBareConfig
val config = NetBareConfig.defaultHttpConfig(jks, interceptors)虚拟网关是对网络包进行拦截、解析、注入的核心,可以加载开发者自定义的拦截器,通过NetBareConfig.Builder来配置。NetBare框架提供了两个默认的虚拟网关对象。
默认虚拟网关,可以拦截到所有协议的网络包。默认虚拟网关无法直接构造,需要通过DefaultVirtualGatewayFactory来进行构造。开发者可以使用NetBareConfig.setVirtualGatewayFactory配置默认虚拟网关工厂。
// 配置自定义拦截器
val interceptors = listOf(...)
// 创建默认虚拟网关工厂
val defaultGatewayFactory = DefaultVirtualGatewayFactory(interceptors)
// 通过NetBareConfig.Builder来配置defaultGatewayFactory
...虚拟网关拦截器,继承Interceptor。Interceptor使用工厂模式,由InterceptorFactory来构造。
…Http协议虚拟网关,可以拦截到所有Http协议的网络包。Http协议虚拟网关也无法直接构造,需要通过HttpVirtualGatewayFactory来进行构造。创建HttpVirtualGatewayFactory实例需要前面的JKS以及拦截器HttpInterceptor。
// 配置自定义HttpInterceptor
val interceptors = listOf(...)
// 创建Http虚拟网关工厂
val httpGatewayFactory = HttpVirtualGatewayFactory(jks, interceptors)
// 通过NetBareConfig.Builder来配置httpGatewayFactory
...Http虚拟网关拦截器,继承HttpInterceptor。同样的HttpInterceptor也使用工厂模式,由HttpInterceptorFactory来构造。
…此外,NetBare框架内置了HttpIndexInterceptor等特殊拦截器方便开发者使用。
NetBare提供了一套通用的injector框架来方便开发者注入请求和响应。Injector框架是基于虚拟网关的拦截器来运行的。目前只开发了针对Http协议的注入器,其它协议可以后续再扩展。
Http协议的注入是基于HttpInjectInterceptor拦截器来实现的,在配置HttpVirtualGatewayFactory的时候,需要配置此拦截器,每一个注入器对应一个拦截器实例。而所有注入器都必须实现HttpInjector接口。
…将注入器绑定到拦截器,并装载到虚拟网关中:
// 配置自定义HttpInjectInterceptor
val interceptor1 = HttpInjectInterceptor.createFactory(injector1)
val interceptor2 = HttpInjectInterceptor.createFactory(injector2)
...
val interceptors = listOf(interceptor1, interceptor2 ...)
// 创建Http虚拟网关工厂
val httpGatewayFactory = HttpVirtualGatewayFactory(jks, interceptors)
// 通过NetBareConfig.Builder来配置httpGatewayFactory
...NetBare的接入步骤就有些繁琐,所以提供了一个简单的Sample工程供大家参考。sample中包含三个比较有趣的东西:
NetBare框架尚未完全成熟,仍然有很多工作要做,包括ICMP、IGMP等IP协议的转发等等,后续会继续完善。
基于NetBare实现的一款抓包+注入工具,欢迎大家下载体验:https://play.google.com/store/apps/details?id=com.guoshi.httpcanary
声明:DON'T BE EVIL!NetBare只可用于学习和调试,禁止用于网络恶意攻击和钓鱼等非法途径
暂无开放 Issues,或尚未同步最近议题。