今天逆向的网站: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方法内部
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));
今天的教程就到这里,有帮助记得点赞!