首页
社区
课程
招聘
[原创] Akamai保护的相关网站(IHG,TI)学习记录
发表于: 2022-5-31 17:04 2824

[原创] Akamai保护的相关网站(IHG,TI)学习记录

2022-5-31 17:04
2824



之前没怎么看web,就看抖音的时候看过一下web版本,最近接触了下Akamai,主要看了下面2个网站:

https://www.ihg.com/

https://www.ti.com


相比二进制的逆向,这个套路还是有点不同,这里记录下分析过程,技术交流用。


现在回过头来看,主要是两个部分:

1、指纹检测,发起的http请求中的ja3指纹要跟浏览器一致的(还要考虑不同版本的浏览器有特定的header字段,总之就是要伪装成真实浏览器请求)。

2、JS逆向,这个主要就是反混淆调试逻辑了,处理sensor_data数据请求,对于搞过二进制逆向的,这个反混淆感觉也不是必须的,就算是直接硬扛,

    也比PC的VMP简单,当然能够处理,肯定更加方便调试。


下面还是流水账


1、弯路部分


    刚开始也是网上搜了下,资料不多,不是旧版本就是没怎么细讲的(也有可能是讲得太细,就会被封,之前发过一篇 

    小红书 V7.37 学习记录,感觉也没写很细,被移会员区了,其实就相当于删帖了)。

    初始搞的过程中最大问题就是发现请求结果不是预期的时候,不知道是指纹问题,还是 akamai  sensor_data数据有问题。


    首先直接用node自带的http模块请求,发现也能返回,自己维护cookie,按Chrome请求记录来发送,发现最后也能登录TI,但是看返回头里面

    有不正常的情况:


    'ti_bm=Unknown%20Bot%20(AB5B20DF4B5B288A17DACF5E811F9ED8)%3amonitor%3a%3aRequest%20Anomaly%3a%3a;

     path=/;     domain=.ti.com.cn'

    

    刚开始发现能登录,也没管这个,后来请求加入购物车的时候,死活不行,发送sensor_data也不行,总是返回一个信息:

    You don't have permission to access ...


    这个时候才又开始检查之前的返回状态,cookie字段太多了,看数据比较复杂,觉得相关的有bm_sv,bm_mi,ak_bmsc,_abck,bm_sz,ti_bm等,

    因为也不清楚这些cookie的返回逻辑,跟浏览器请求记录比较中,有时候发现浏览器会多某个字段,就想到会不会是少发了某个请求,毕竟自己协议请求

    比浏览器实际请求是少很多的,后来补了很多请求,这个过程实际花了不少时间折腾,结果一样,接着就想到跟浏览器实际请求的差异问题了。

   

    首先就是想搞一个带源码的浏览器调试环境,Chrome浏览器本身是不开源的,后来发现了miniblink:   

    

weolar/miniblink49: a lighter, faster browser kernel of blink to integrate HTML UI in your app. 一个小巧、轻量的浏览器内核,用来取代wkelibcef (github.com)


    把源码拖下来编译了个版本(新版本没开源了),跑TI网站比较慢,最后屏蔽了一些图片显示相关的,走了下登录流程,

    发现返回的cookie字段中也有异常情况:


    就是ti_bm中也返回了Unknown%20Bot,看起来miniblink请求也是过不了检测的,并且后来比较请求返回的网页内容,其实跟正常浏览器也是有不同的,

    比如Chrome请求返回页面中会包含下面脚本:

    但是使用miniblink请求,或者node自带http模块请求,就没有这个信息。


    当时的想法还是想找一个直接能用的请求库,尝试过mytls等几个号称可以修改指纹的库,实际测试也是不行,一时没找到,

    后来想到之前搞过抖音的Cronet库,是调通了整个请求流程的,尝试用抖音的Cronet库来请求TI网站:

   


    测试后发现,还真能返回上面的script信息了,这部分跟浏览器请求的倒是一样了,但是最后实际请求加入购物车协议的时候,还是失败。

    折腾了一圈,各种组合请求还是没搞定,毕竟这个库的请求指纹跟浏览器还是不同的,那还是要从请求上保持跟浏览器的完全一致才行。



2、解决指纹,让请求跟浏览器一致


    这个开始也是准备硬杠的,打算按照wireshark记录的浏览器请求算法来修改请求的算法组,查资料的过程中,发现了


    lwthiker/curl-impersonate - Docker Image | Docker Hub


    这个号称可以完全模拟器浏览器的请求,按照说明本地部署了下环境,需要安装docker:


    测试了下访问 https://ja3er.com/json



    看起来确实跟浏览器的一致了,这里有个容器操作的小坑:


    从docker拷贝文件出来要注意容器名称,不是ID,之前搞错了一直错误:

    Error: No such container:path: curl-impersonate-chrome:/build/out/libcurl-impersonate.so.4.7.0


    它这整个环境是容器,想直接用还不好用,开始看见有提供so,考虑直接写app调用so来发起http请求,最后折腾了下,发现开发效率是个问题,

    用的是win系统,还是想搞个win版本的,这就涉及到需要自己编译curl了,直接把上面的curl,还有boringssl,brotli

    ,nghttp2源码都拖下来,改了个win版本,编译后生成了exe。

    

    curl-impersonate的组件信息:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
打赏 + 50.00雪花
打赏次数 1 雪花 + 50.00
 
赞赏  Editor   +50.00 2022/07/01 恭喜您获得“雪花”奖励,安全圈有你而精彩!
最新回复 (4)
雪    币: 3
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
正在搞这个,一头雾水!
2023-11-6 18:11
0
雪    币: 19
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
厉害
2023-11-14 22:48
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
大佬~可以给个联系方式码~有问题请教~
2024-3-19 17:49
0
游客
登录 | 注册 方可回帖
返回
//