JA3 TLS 指纹新选择~编译chromium网络库记录

目前在跑akamai中遇到一个网站 经常被403

尝试过很多东西 怀疑是ja3指纹的问题

在github搜索到有一些人编译的cronet
是chromium中的网络请求库抽离出来的动态库

官方的解释

Cronet是Chromium网络引擎对不同操作系统做的封装,
实现了移动端应用层、表示层、会话层协议,
支持HTTP1/2、SPDY、QUIC、WebSocket、FTP、DNS、TLS等协议标准。
支持Android、IOS、Chrome OS、Fuchsia,
部分支持Linux、MacOS、Windows桌面操作系统。
实现了Brotli数据压缩、预连接、DNS缓存、session复用等策略优化
以及TCP fast open等系统优化

优点

他内部支持完整的tls层 不需要依赖openssl 是完全和chrome浏览器一样的ja3指纹
可以降低被识别的可能性

编译

1. 拉代码

首先需要拉下来chromium的源码
我使用的是 22.04.1-Ubuntu x64 的linux 系统


chromium官方文档 看官方文档就好了

2. 生成编译文件
gn gen out/Cronet --args='is_debug=false'
is_debug=false 是release模式 都编译进一个so里
3. 开始编译
ninja -C out/Cronet/ cronet_package
如果不指定后面的cronet_package 就会编译chromium浏览器

在这里插入图片描述

大概四千多个文件 编译还是挺快的

4. 编译结果

在这里插入图片描述

5. 使用

很多语言都可以调用这个动态库

效果

这是chrome浏览器的

在这里插入图片描述

{
  "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
  "ja3_hash": "49f70b3e88f1c16efb129287356f5d8f",
  "ja3_text": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,27-5-10-13-35-18-65037-0-51-11-45-65281-16-17513-23-43,25497-29-23-24,0",
  "ja3n_hash": "4c9ce26028c11d7544da00d3f7e4f45c",
  "ja3n_text": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-5-10-11-13-16-18-23-27-35-43-45-51-17513-65037-65281,25497-29-23-24,0",
  "akamai_hash": "1078ca4bfd193d5da4914b977eec979e",
  "akamai_text": "1:65536;2:0;4:6291456;6:262144;64234:3439937096|15663105|0|m,a,s,p"
}
这是动态库请求的

在这里插入图片描述

{
  "user_agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Mobile Safari/537.36",
  "ja3_hash": "18b44992750235fb3f1a5c1c23b3158e",
  "ja3_text": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,5-45-17513-27-43-65037-13-65281-51-10-18-0-23-11-35-16,25497-29-23-24,0",
  "ja3n_hash": "4c9ce26028c11d7544da00d3f7e4f45c",
  "ja3n_text": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-5-10-11-13-16-18-23-27-35-43-45-51-17513-65037-65281,25497-29-23-24,0",
  "akamai_hash": "52d84b11737d980aef856699f885ca86",
  "akamai_text": "1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p"
}

JA3_hash 不一致是因为新的chrome会随机扩展顺序导致的

akamai 测试上面的站成功率从20%多提升到90%

欢迎关注我的公众号 谢谢大家

在这里插入图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Ja3指纹是SSL/TLS握手时客户端发送的一个字段,用于描述客户端支持的SSL/TLS版本以及加密套件等信息。如果你想修改Ja3指纹,可以在Java代码中通过创建自己的SSLSocketFactory实现。具体步骤如下: 1. 创建自己的SSLSocketFactory类,继承javax.net.ssl.SSLSocketFactory类,并重载createSocket方法,该方法返回一个SSLSocket对象。 2. 在createSocket方法中,通过调用SSLSocket的setEnabledCipherSuites方法和setEnabledProtocols方法,设置所支持的加密套件和SSL/TLS版本。 3. 在网络请求时,使用自己的SSLSocketFactory对象替换默认的SSLSocketFactory对象。 下面是一个基本的示例代码: ``` // 创建自己的SSLSocketFactory类 public class MySSLSocketFactory extends SSLSocketFactory { private SSLSocketFactory factory; public MySSLSocketFactory() { try { SSLContext sslcontext = SSLContext.getInstance("TLS"); sslcontext.init(null, null, null); factory = sslcontext.getSocketFactory(); } catch (Exception ex) { ex.printStackTrace(); } } // 重载createSocket方法 public Socket createSocket(Socket socket, String s, int i, boolean flag) throws IOException { SSLSocket sslsocket = (SSLSocket) factory.createSocket(socket, s, i, flag); sslsocket.setEnabledCipherSuites(new String[]{"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"}); sslsocket.setEnabledProtocols(new String[]{"TLSv1.2"}); return sslsocket; } // 其他方法略... } // 使用自己的SSLSocketFactory对象发起网络请求 public static void main(String[] args) { try { URL url = new URL("https://www.example.com"); HttpsURLConnection.setDefaultSSLSocketFactory(new MySSLSocketFactory()); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); InputStream is = connection.getInputStream(); // 处理响应流 } catch (Exception ex) { ex.printStackTrace(); } } ``` 需要注意的是,修改Ja3指纹可能会导致一些网站无法正常访问,因为服务器会根据客户端发送的Ja3指纹进行识别和过滤。因此,建议在实际使用中谨慎修改Ja3指纹
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值