掘金 人工智能 21小时前
同花顺爱问财参数逆向-纯算法分析
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文深入剖析了同花顺网站中hexin-v参数的生成过程,通过逆向分析JavaScript代码,详细介绍了如何通过纯算的方式实现该参数的生成。文章首先定位到关键的参数生成位置,并逐步分析了E数组的初始化、时间戳的获取、以及random、strhash等函数的实现。随后,文章详细阐述了toBuffer函数、encode函数以及base64编码变种的处理方法,最终实现了hexin-v参数的复现。整个过程注重细节,为读者提供了清晰的技术实现思路。

🔑 通过逆向分析,确定了E数组是hexin-v参数生成的关键,并发现其在特定条件下是固定的,这为后续的参数生成提供了基础。

🕰️ 详细分析了获取服务器时间戳的函数,以及random和strhash函数的实现,这些函数共同构成了参数生成的重要组成部分,通过还原这些函数,可以模拟出参数生成的关键步骤。

⚙️ 深入研究了toBuffer和encode函数,以及其中涉及的闭包函数和base64编码变种。通过扣取、替换和修改相关函数,成功实现了hexin-v参数的复现,并解决了其中存在的差异。

💡 针对base64编码的变种,文章进行了特别说明,通过替换'+'和'/'字符,最终得到了与原始参数一致的结果,完成了hexin-v参数的纯算实现。

前言

网上同花顺的补环境教程很多了,这次来分析下他的纯算实现

网址

aHR0cHM6Ly93d3cuaXdlbmNhaS5jb20v

逆向分析

还是熟悉的三件套,同样是定位 今日涨停 这个接口。

2.js分析

这里不太重复说了,直接定位到参数生成位置,不了解怎么定位的的可以去翻看往日文章。发现这里 E是在这里进行了初始化, 并且多次刷新,这个数组都不会变。所以可以直接把这个E固定下来。进入这个函数:发现这里做的操作是获取服务器的时间, 返回10位时间戳。 好的,E[1]的值就确定了。在来看下c函数,发现也有对E进行操作。进入c看看。发现r是会先取上次次cookies里面的值进行判断,那好办,我直接默认是第一次,即直接r = ''的话,那不就不走 if 那个判断了。跟进random这个函数把常量值替换,还原得到random 函数

function random() {    return Math.random() * parseInt('11111111111111111111111111111111', 2) >>> 0}

接下来红框中的都是常量,可以直接替换。那就是strhash 这个函数的还原。看起来很多变量,实际上真正起作用的就是那个for循环。直接秒了

function strhash(n) {    for (var l = 0, p = 0, d = n.length; p < d; p++)        l = (l << 5) - l + n.charCodeAt(p),            l >>>= 0;    return l}

后面的几个常量按照浏览器环境补上

接下来处理 var t = E.toBuffer(),进入这个函数一样缺啥补啥, 把 toBuffer 补在 E对象里面,并把常量进行替换一下。固定参数对比下和浏览器的生成。完美,好的,接下来就剩下最后一个encode函数了。发现这个依赖了这个闭包里面的很多函数,按照经验,直接把这个闭包里面函数抠出来。

把这个d这个函数扣下来,然后把该替换的替换一下。return 那里发现也是对a函数进行了修改,所以也扣下来,对f函数该替换的替换,得到还原的函数

    function f(n, t, a, i, u) {        for (var c = n.length; t < c;)            a[i++] = n[t++] ^ u & 255,                u = ~(u * 131)    }

重头戏来了,发现g(a) 是对上面得到的a数组进行的处理,a数组的长度为43,但是g(a) 生成的长度变成了 60,大概膨胀了33%,根据经验猜测是经过了base64编码。写个脚本片段先将数组转成 ASCII 编码,然后再将 ASCII 编码进行base64编码。

let s = '';for(let i of a){    s += String.fromCharCode(i);}

发现这里和g(a)得到的结果一模一样。好的,打完收工。但是测试发现我们得到的和原来的又略微差别,R() 执行结果不存在 + 和 /, 但是我们生成的却有存在 + 和 /。问下deepseek,原来是base64的一个变种。按照这个对原来的字符做个替换就得到了最终结果。然后把生成的hexin-v 用python进行请求测试下。收工收工。

完整代码请私聊,仅供学习使用。

总结

以上案例仅供学习,请勿用于商业传播。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

同花顺 hexin-v参数 逆向分析 JavaScript base64
相关文章