首页 > 其他分享 >逆向之Ja3指纹学习

逆向之Ja3指纹学习

时间:2023-06-20 13:36:03浏览次数:43  
标签:tls 逆向 23 51 Ja3 指纹 52392 requests

声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

tls

tls实际上前身就是 ssl,由于访问 https页面的时候,网络层建立连接过程中,涉及到了tl握手问题,
所以tls指纹就有可能被反爬手段所检测,目前有一些防火墙已经将此技术应用。
目前为止,tls指纹的检测手段依然停留在 将tls内容做哈希操作,由此检测黑名单的方案,而并非使用了白名单手段。

抓包展示

用下某网站做测试 且此网站也有有Ja3指纹加密的

aHR0cHM6Ly9nZ3p5LmppYW5neGkuZ292LmNuL3h3ZHQvMDAxMDAyL3NlYzEuaHRtbA==

fiddler

!注意 fiddler要想抓Ja3-tls指纹 包
要把CONNECTS选项取消勾选,不然抓包指纹包

然后我们抓到了很多指纹包,然后我们挨个打开看看


然后我们看到很多的加密算法,还有加密方式
其实这种包其实本质上就是加入黑名单

已经tls的版本也有

charles

相比较fiddler charles抓到的包就很有限了。
但是操作也更加的简单了
我们直接打开charles 然后刷新网站

这里直接就显示了tls的信息

我们接着点开详细信息 这里显示了tls的加密方式 已经加密的两种方式.

这两种抓包方式终究还是图一乐,真要抓包还得看wireshark

wireshark

步骤如下

  1. 查询网站IP地址 ======> cmd ======> ping xxx.com =====> 复制IP地址
  2. 打开wireShark抓包,选择抓取的网卡
  3. 刷新浏览器
  4. 在过滤器中输入 ip.addr == 你要查看的ip地址 具体如下图
  5. 找到一个Client hello的包
  6. 查看详细信息

    最下面的是hash指纹 和详细指纹信息

    把这个指纹fullstring复制出来
    771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,18-51-35-23-45-5-27-10-13-43-65281-11-16-17513-0-21,29-23-24,0
    这个指纹信息就是网站可以运行的指纹信息

指纹分析

指纹信息分析其实很简单,
我们接下来用三种方式去获取这个指纹信息
也就是上文的771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,18-51-35-23-45-5-27-10-13-43-65281-11-16-17513-0-21,29-23-24,0

浏览器

这里我们选择直接用上文抓包抓到的指纹
还有一种方式
https://tls.browserleaks.com/json 直接去网站看自己的浏览器指纹也是可以的

由于上面已经获取了浏览器的指纹了,我们直接就拿来用了

771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,18-51-35-23-45-5-27-10-13-43-65281-11-16-17513-0-21,29-23-24,0

python

接着我们使用requests原生库,即正常访问,携带基本的参数去请求即可
我们使用代码去访问下这个网站https://tls.browserleaks.com/json

import requests

r = requests.get('https://tls.browserleaks.com/json', verify=True)
print(r.text)

结果

{
  "ja3_hash": "8d9f7747675e24454cd9b7ed35c58707",
  "ja3_text": "771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-61-60-53-47-255,0-11-10-16-22-23-49-13-43-45-51-21,29-23-30-25-24,0-1-2",
  "ja3n_hash": "a790a1e311289ac1543f411f6ffceddf",
  "ja3n_text": "771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-61-60-53-47-255,0-10-11-13-16-21-22-23-43-45-49-51,29-23-30-25-24,0-1-2",
  "akamai_hash": "",
  "akamai_text": ""
}

所以这个指纹是

771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-61-60-53-47-255,0-11-10-16-22-23-49-13-43-45-51-21,29-23-30-25-24,0-1-2

python 魔改库

我们再试试 Python有关SSL的魔改库
其实这类库有很多
简单举例两个吧 一个是 curl_cffi 一个是 tls_client

我们这里使用curl_cffi 去访问一下看看这个指纹是什么

from curl_cffi import requests

r = requests.get("https://tls.browserleaks.com/json", impersonate="chrome101")
print(r.text)

结果

{
  "ja3_hash": "cd08e31494f9531f560d64c695473da9",
  "ja3_text": "771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21,29-23-24,0",
  "ja3n_hash": "aa56c057ad164ec4fdcb7a5a283be9fc",
  "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-21-23-27-35-43-45-51-17513-65281,29-23-24,0",
  "akamai_hash": "4f04edce68a7ecbe689edce7bf5f23f3",
  "akamai_text": "1:65536;3:1000;4:6291456;6:262144|15663105|0|m,a,s,p"
}

而这个指纹是

771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21,29-23-24,0

总结三种方式

然后我们把这三个指纹拿出来做个对比

浏览器: 
771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,18-51-35-23-45-5-27-10-13-43-65281-11-16-17513-0-21,29-23-24,0

python原生库: 
771,4866-4867-4865-49196-49200-49195-49199-52393-52392-159-158-52394-49327-49325-49326-49324-49188-49192-49187-49191-49162-49172-49161-49171-49315-49311-49314-49310-107-103-57-51-157-156-49313-49309-49312-49308-61-60-53-47-255,0-11-10-16-22-23-49-13-43-45-51-21,29-23-30-25-24,0-1-2

python魔改库: 
771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21,29-23-24,0

可以清楚地看到 python的魔改库和浏览器的指纹是长度是一样的。

这样我们可以知道了,这个指纹长度只要和浏览器相同就可以了。

我们使用魔改库访问开头所要访问的网站实验一下


发现可以正常访问

那该如何不借助魔改库去完成Ja3网站的解密呢
可以通过修改ssl的套接字 使得防火墙黑名单失效
从而保证指纹长度一致 即可完成解密

tls 检测的绕过方案

**临时方案: **

注意 requests库必须在2.4 以上版本 不然会失败

requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS ='ALL'

修改了requests内部包的 ssI里面的套接字设置,使防火墙黑名单失效

动态 DEFAULT CIPHERS :
https://www.openssl.org/docs/man1.1.1/man1/openssl-ciphers.html
https://support.huaweicloud.com/bestpractice-waf/waf_06_0012.html
这种方法国内处理就已经够了

非临时方案:
自设ssl,并覆写requests中的类的一些方法
https://stackoverflow.com/questions/60407057/python-requests-being-fingerprinted

https://stackoverflow.com/questions/64967706/python-requests-https-code-403-without-but-code-200-when-using-burpsuite

深入理解requests中 建立 tls的过程
先抓包看下正常的访问 tls,和requests访问的区别
我们需要单步调试requests源码,并且想办法修改 tls访问过程中的UA
按照上面的思路,加上对 ssl的理解,就可以实现一个针对于 *ka**i tls检测的高并发方案

标签:tls,逆向,23,51,Ja3,指纹,52392,requests
From: https://www.cnblogs.com/zichliang/p/17491838.html

相关文章

  • 逆向-C语言程序编写
    C语言的执行过程:1、代码编写-->生成EXE(F7)-->运行(F5)-->结束运行(Shift+F5)2、入口函数3、在VC6中设置断点,单步执行,程序返回编译器过程:1、执行过程:构建(F7)->运行(F5)2、打开寄存器窗口、打开内存窗口3、结束程序(Shift+F5)C语言函数的格式:函数名、参数名、变量名的命......
  • 逆向复习整理
    结合复习PPT简单谈谈一些东西的理解对于汇编的代码还没有完全整理(还可以更多),其他的简单写了一些更细致的东西IDA代码olldbg和汇编指令  下面这个就是复习一下之前的实验: 多半是问答的东西SEH结构体异常  SEH(StructuredExceptionHandling)是Windows中的一种......
  • Day02 2.1 逆向基本流程介绍
    逆向基本流程介绍1获取目标app(官网,豌豆荚),安装到手机上2使用抓包工具抓包分析(charles,fiddler,Wireshark。。)3使用反编译工具(JADX、JD-GUI),反编译apk成java代码,分析代码,定位代码位置4使用动态分析工具,如Frida、XposedFramework等,在运行时跟踪应用程序的行为和交互。理解应......
  • Day01 1.1 APP逆向的介绍
    Day01APP逆向的介绍【一】APP逆向入门(1)逆向设备与root真机和模拟器解BL锁fastboot刷机和roottwrp刷root面具和常见模块(2)Python虚拟环境系统解释器环境virtualenv虚拟环境解释器配置常见错误(3)抓包和配置charles介绍配置和安装https证书用户证书与系统证书解......
  • Day01 1.2 APP逆向的必备知识
    Day011.2APP逆向的必备知识【一】逆向原理(1)安卓app逆向正向:安卓开发工程师->Java语法+安卓框架->功能代码(Java+C)->APK(资源文件/.dex/.so)逆向:安卓逆向工程师->APK->反编译->Java+C代码+Hook->Python代码还原【二】什么是反编译,什么是HOOK(2.1......
  • 指纹打卡机语音方案,快速响应、低功耗MP3芯片N9301
    随着科技的不断进步,语音技术在各个领域中的应用也越来越广泛。在指纹考核机领域中,语音方案的加入能够有效提高用户的使用便利性和安全性。为此,一种新型的语音芯片加入指纹考核机语音方案被研发出来。语音指纹考勤机,目前市场上采用的高性价比的语音芯片N9301;此款芯片是一个提供串口......
  • 指纹打卡机语音方案,快速响应、低功耗MP3芯片N9301
    随着科技的不断进步,语音技术在各个领域中的应用也越来越广泛。在指纹考核机领域中,语音方案的加入能够有效提高用户的使用便利性和安全性。为此,一种新型的语音芯片加入指纹考核机语音方案被研发出来。语音指纹考勤机,目前市场上采用的高性价比的语音芯片N9301;此款芯片是一个提供串......
  • JS逆向实战18——猿人学第八题 验证码 - 图文点选
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!网站https://match.yuanrenxue.cn/match/8网站分析首先进去就看到是如此复杂的文字验证码。我们首......
  • 一套最全的突破tls/ja3指纹的方案
    访问这个网站可以查看自己ja3信息  https://tls.browserleaks.com/json方法一pipinstallcurl_cffi#https://github.com/yifeikong/curl_cffifromcurl_cffiimportrequests#注意impersonate这个参数r=requests.get("https://tls.browserleaks.com/json",......
  • SSM框架 使用逆向工程生成Bean、XxxMapper 和XxxMapper.xml【MyBatis Generator 】
    在properties配置文件中,数据库用户名的键不能设为username,你随便改个其他的应该都可以,例如jdbc.username,甚至拼错usernaem都可以jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8jdbc.u......