js 逆向流程
js 逆向的一般流程如下:
抓包
调试
抠js
改写
本地运行出值
请求服务器拿值
常见加密方法分类介绍
对称加密(Symmetric Encryption)
在对称加密中,发送和接收方使用相同的密钥来加密和解密数据。常见的对称加密算法包括:
•DES(Data Encryption Standard):是一种对称密钥加密算法,已经不推荐使用,因为它的密钥长度较短,易受到暴力破解攻击。•AES(Advanced Encryption Standard):目前最常用的对称加密算法之一,支持128位、192位和256位的密钥长度,安全性较高。特点:•加解密速度快,适合大数据量的加密和解密。•密钥管理相对容易,但需要确保密钥安全传输。
非对称加密(Asymmetric Encryption)
在非对称加密中,使用一对密钥,包括公钥和私钥,公钥用于加密,私钥用于解密。常见的非对称加密算法包括:•RSA(Rivest-Shamir-Adleman):基于大数分解的数学难题,是最早也是最广泛使用的非对称加密算法之一。•ECC(Elliptic Curve Cryptography):利用椭圆曲线上的点运算问题来构建的加密算法,相比RSA,在相同的安全级别下,所需密钥长度更短,计算量更小。特点:•加解密速度相对较慢,适合于少量数据或者密钥交换。•公钥用于加密,私钥用于解密,提供了更好的安全性。•适合解决密钥交换和数字签名等问题。
哈希加密(Hash Encryption)
哈希加密是一种单向加密方式,它将任意长度的数据映射为固定长度的哈希值。常见的哈希加密算法包括:•MD5(Message Digest Algorithm 5):产生128位的哈希值,由于其存在碰撞风险和安全性问题,已经不推荐用于加密应用。•SHA-1(Secure Hash Algorithm 1):产生160位的哈希值,也存在碰撞风险,逐渐被弃用。•SHA-256、SHA-384、SHA-512:SHA家族的变种,分别产生不同长度的哈希值,安全性更高。特点:•单向加密,不可逆。•对于相同的输入,始终产生相同的输出。
tips:对于 MD5,SHA-1 ,可以记住 123456 对应的密文,以便在进行 js 逆向时快速识别出其加密方式。
明文:123456
密文:
•MD5:e10adc3949ba59abbe56e057f20f883e•SHA-1:7c4a8d09ca3762af61e59520943dc26494f8941b
其他编码方式
BASE64encode 等等,其不属于加密,而是一种编码方式。 base64 编码特点:A-Z a-z 0-9 + _ =
sohu.com
查看登录的网络请求,存在加密。
密文为 e10adc3949ba59abbe56e057f20f883e,很明显这里就是 MD5 的加密方式。(记 123456 密文的原因)
快速定位
tips:找距离断点最近的方法,就是看智能提示(CTRL 键开关),什么时候没有智能提示了,就是该方法的开始
下面来尝试快速定位查找加密方法。 请求的 url 为 https://v4.passport.sohu.com/i/login/116005
,post 请求的 payload 为 userid=test%40123.com&password=e10adc3949ba59abbe56e057f20f883e&appid=116005&nf=1
考虑通过以下几种方式来进行查找:
•XHR•post body 中的参数名——password,userid•url 特征
XHR
最先想到的方法肯定是 XHR 断点。 打好断点后,点击登录:
在 send 处断住,可以看到这里已经是加密后的 password。
password
直接全局搜索 password,结果有数十处。 但是password 值肯定是先有一个对象,再对对象进行赋值等操作,可以通过.password 或者 password =(如果加上空格需要美化输出)来进一步缩小范围。
可以看到此时只剩下 8 条结果。逐条查看可以看到,显然这里利用了 MD5 加密:
userid
userid 跟 password 类似,userid=结果只有一处,在当前上下文中查找,也能找到 md5:function(t){...}
/login
login 同样可以找到:
123456789、1732584193
123456789 和 1732584193 都是 md5 加密中默认的模值,如果采用了默认的 md5 加密就必定会出现。
与前面几种方法不同,搜索这类内容,可以直接跟进加密函数中,再根据调用栈,就能直接跟到加密之前的明文值(此处为 123456)。
为什么要找加密之前的明文,因为网站可能会将用户的输入作一些拼接过滤等操作(加盐),再进行加密编码等等,因此可能需要从明文开始追踪。在明文跟密文中间的部分,肯定就是加密函数。
打好断点,运行查看调用栈:
往上找一个,就能发现明文为 123456:
原文始发于微信公众号(Crush Sec):js 逆向系列02-常见加解密一
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论