昨天在星球看到杨如画大佬说要发akamai 的文章,给我急的,本来想把指纹数组都搞完再发,这tm再不写就没机会发出来了,58位数组的每个值还没彻底走完,就不误人子弟了,这里只说一下对数组的加密,加密我对照验证了是正确的
加密定位
请求流程和定位加密文件
请求主页面的第一个html请求,查看cookie返回,可以看到set了一堆cookie,重点关注其中的bm_sz
和_abck
两个cookie,后面加密会用上,_abck
会被用来加密生成58个数组,bm_sz
会在加密流程中被解析成一个包含两个数字数组
请求返回的HTML文件中,直接搜<script type="text/javascript" src="
,src属性的链接就是需要逆向的 js 文件链接(不是链接中带assets
那个请求)
提取方式建议选择正则,而不是xpath,因为就算你失败,xpath也会提取到,而正则匹配失败会直接报错
后面可以看到请求了两次这个链接,第一次获取JS文件,同时更新cookie _abck,第二次发送了一个sensor_data的值,然后返回{"success": true}
,这里也会更新cookie
由于每次请求代码都会变,而且代码不仅变量会变,函数之间的位置关系也在变,后续定位比较麻烦,所以建议 固定html文件和js文件
加密分析
1.1追踪堆栈找
根据堆栈追就没啥说的,追就完了
1.2快速定位
大概瞄一眼 JS 文件,找一下类似于zU(zU(zU(zU(zU(zU(
的代码,然后搜这段代码就好,然后搜索zU(zU(zU(zU(
,下一行是类似于var HU = BA();
,的这个zU(zU(zU(zU(
就是了
1.3固定加密和开始前的建议
先说一下加密验证,这个是参考大佬文章写的固定,但是现在还得多需要固定时间才行(注意cookie也要同步)
// Math.random = function () {
//
// return 0.9233990436504134;
// };
// Date.now = function () {
//
// return 1712640715051;
// };
开始前还是建议初步还原一下,不说把控制流还原出来,把那些常数计算,变量名混淆还原出来会省很多力气,而且后续版本改变也好查哪个数字变了(巨多常数)
在扣代码的时候不建议将那些常量数字写死(参考领导给的老版本akamai算法的时候发现有几个常数,变了~),这如果写死了,后面都懒得查哪个数字不一样(嘎嘎纯的纯算当我没说)
毕竟别人的纯算整个代码几百来行,我的纯算一千多行
2.1开始加密
欧克,正题开始
定位到加密点后,记住这个变量名,搜索一下,其实就只有几个地方出现了,然后都打上断点,调试一遍就能找到第一次加密——把58位数组通过分割符拼接成一个字符串
注意,生成分隔符的那个方法的那个常量数字不是固定的,会可能随版本变化
emmm,后面真没啥说的,一步步硬跟,请把你的 F9 给我一路按到死
尽量每个函数全部一步步走一遍,别看到返回值没变化就直接写死,很危险的行为嗷
建议
-
每次刷新的时候,牢记,那个数组是cookie加密来的,刷新一次本地也要跟着换一次
-
细心点,特别数字处理的时候,千万注意里边有没有混入了字符串,我当时查这玩意儿查了一整天
-
建议一步步跟,走一步看一下变量值分别都是啥,你以为的常数可能中间值就变了
-
最后加密走完了,一定要记得固定随机数和时间戳去对比一下结果
最后推一下佬的星球,哈哈哈哈,js,安卓,ios内容都有,而且质量嘎嘎高,要不是他说要发akamai,我都不会这么急写这篇文章,哈哈哈哈哈哈
原文始发于微信公众号(逆向成长日记):Akamai 加密分析(一)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论