js逆向-有道翻译sign参数逆向

今天逆向的网站:aHR0cHM6Ly9mYW55aS55b3VkYW8uY29tL2luZGV4Lmh0bWwjLw==

(去在线网站进行base64解密即可)

1、点击翻译,触发请求

可以看到sign参数加密,加密长度为32为

md5加密特征:

  • **长度固定。**无论输入的数据长度是多少字节,输出总32位字符。
  • **不可逆。**即无法通过MD5值反推出原始数据。
  • **抗修改性。**对原始数据进行的任何改动,甚至是一个字节的修改,都会导致MD5值显著不同。
  • **抗碰撞性。**要找到两个具有相同MD5值的不同数据非常困难。

由此我们可以判断,它属于md5加密

2、输入快捷键ctrl+shift+f  打开全局搜索  搜索被加密参数sign:

3、我们点击第一个js文件 ,进入内部,可以看到sign:h(t,e)

4、给sign:h(t,e)这行代码加上断点,点击翻译触发断点

5、控制台输出参数t和e

可以看到参数t类似时间戳,参数e是一个字符串,经过笔者验证,e为固定字符串

t=(new Date).getTime();   获取时间戳的方法

6、进入h方法内部

进入h方法内部-鼠标放在h方法,点击蓝色字符那里,点击即可进入h方法内部

 7、我们给h方法加上断点 

8、执行h方法

 可以看到使用g进行加密:

g(`client=${d}&mysticTime=${e}&product=${u}&key=${t}`)

类似于python的格式化字符串传参,传入了参数d和e和u和t

分别看看他们的数据结果是什么:

//时间戳  变化
e=(new Date).getTime();

//固定参数
t='fsdsogkndfokasodnaso'
d='fanyideskweb'
u='webfanyi'

 得出结论:

使用g方法对这个字符串(d,t,u,t)进行加密:`client=${d}&mysticTime=${e}&product=${u}&key=${t}`

结果:

'client=fanyideskweb&mysticTime=1687839695433&product=webfanyi&key=fsdsogkndfokasodnaso'

最后使用g方法对进行加密

7、猜测加密方法

我们刚才大概猜测到加密方法为md5,我们使用g方法加密字符串'1'的结果:

8、验证是否属于标准加密

我们对比标准加密算法,对字符串'1'进行加密是否和g方法的加密结果是否一致:

      可以看到,标准加密的结果和g方法是一致的,由此,g属于标准加密,

9、实现加密逻辑

我们使用js标准加密算法库(crypto-js)进行加密

 

 可以看到我们使用js标准库加密和逆向的网站的结果是一样的

js逆向代码(sign参数):

Crypto=require('crypto-js')

function h(e, t) {
                d='fanyideskweb'
                u='webfanyi'

            //格式化字符串  最后转为字符串
                return Crypto.MD5(`client=${d}&mysticTime=${e}&product=${u}&key=${t}`).toString()
            }

//传入e(时间戳)和t参数

//时间戳
e=(new Date).getTime();

//固定参数
t='fsdsogkndfokasodnaso'

//调用h方法,入e(时间戳)和t参数
console.log(h(e, t));

今天的教程就到这里,有帮助记得点赞!

猜你喜欢

转载自blog.csdn.net/m0_63533079/article/details/131413540