记一次Js逆向-youdao的sign参数
地址:https://fanyi.youdao.com/index.html?keyfrom#/AITranslate?keyfrom=fanyiweb_tab
注意:
本次逆向我遇到的最大的坑:在看到"i.createHash(‘md5’).update(e.toString()).digest(‘hex’)"这样一串代码后,我很头铁的去一步一步的断点,找它调用的函数,然后整个人都麻了,找了20个左右后,点错了按键,直接从下一步变成了跳过,全部重来,崩溃的我一怒之下将这段代码发给了“文心一言”,然后它告诉我这就是调用了Node.js 的 crypto
模块来创建一个 MD5 哈希。然后我马上将这段字符串“client=fanyideskweb&mysticTime=1732084892552&product=webfanyi&key=asdjnjfenknafdfsdfsd”甩给了在线的md5加密,得到的结果与调试的结果一样,呵呵,白费了半天功夫找函数。。。。
1、数据包监听
打开网址,按下f12,进入网络,先清空数据包,然后在网页上输入文字,可以看到我们监听到了3个包
查看各包后,在中间的包中找到了我们要分析的参数sign
2、栈跟踪,找到关键代码
点开栈跟踪发现有如下的几个js文件是我们需要搜索的
方法跟上一次的一样
于是这一次也出了大问题,找到了好多个跟下图一样的代码段,然后最坑的是,在一个文件中搜索sign,一看有340多个关键词,麻了。。。
而且,找了很长时间也没有下对断点,于是又记起来了个办法,将**sign:**进行搜索,果然减少了到只有18个,然后在不断的测试下,终于在app。。。的js文件中找到了这个包中sign生成的正确位置
在此期间,还找到一个跟这个非常像的,但是debug后需要点击翻译后的文本才会调用这段代码。
3、debug
在这里debug
我们可以看到来到这里后,e=1732098894526,t=“asdjnjfenknafdfsdfsd”,e这里可以通过a = (new Date).getTime();来看出这是一个时间戳(或者到网站工具中检查一下),t暂时不知道怎么来的,先不管
然后下一步,来到_(e)这个函数,可以看到e=“client=fanyideskweb&mysticTime=1732098894526&product=webfanyi&key=asdjnjfenknafdfsdfsd” ,所以可以确定S(e,t)的作用是将d、e、u、t拼接成一个字符串,然后我最开始的做法是一步一步的找函数,然后发现函数是真的很多,还容易出错,所以如果找到核心加密的代码,可以现将其丢给AI看看,说不定会有惊喜,我这里后来就是这么干的,找到了这个就是md5的加密,没有其他的别的东西
然后我将e进行加密后,又发现的一个问题这个S(e,t)调用了两遍,第二遍的时候t的值变成了"fsdsogkndfokasodnaso",所以找到了关键代码后不要着急,多发几次包,仔细观察看会不会有坑
我将e修改为了最新的时间戳和最新的t,得到e=“client=fanyideskweb&mysticTime=1732099630758&product=webfanyi&key=fsdsogkndfokasodnaso”
先在网上用md5对其加密,得到644cc6a4