记录一次4399加密信息解密过程
记录一次4399加密信息解密过程
一、前提须知
-
在4399页面中,登录面板中输入了用户名和密码(随便输入,只是拿来试试解密),输入的用户名是:test ,密码:23232323;
-
4399网站采用的是 HTTP 协议,意味着安全性是较低的,找解密其实并不难
-
纯属娱乐,在种种巧合之下无难度阻碍的解了密
二、正题
大体想法:寻找网站使用何种加密算法,然后尝试利用在线网站的工具对其解密(如果得知加密算法是base64,那么通过base64加密,对应的也通过base64解密),如果有需要私钥,尝试分析私钥可能保存在何处,有无可能获得。
-
提前打开开发者工具,便于发起登录请求后查看报文。用户名和密码输入后点击登录,在 Network 选项卡中找本次做的登录请求,很明显可以看到在众多请求中有个叫 login.do?v=1 的项惹人注目,如图:
-
点进去查看该请求附带的表单信息 Form Data,如图:
username:test
password:U2FsdGVkX19DpJPPbUtzw5/nC4pHHe8jhj3mbzJaVyE= -
可以看到密码是有被加密过的,首先我去找了登录按钮所在面板的 HTML 结构,发现它是通过 iframe 嵌入的一个页面,找到它引入的脚本文件,类似处理交互的方法或工具方法不用说,都写在脚本文件里的,于是去找它引入的脚本文件。
个人认为在开发中遇到通用的问题需解决时,一般会找市面上已成熟大家都会去用或流通较久的方案去解决问题,因此猜想可能加解密使用的是现成的库
- 红框标注出来的文件,猜测验证登录或其他输入的方法应该都放在 validation.js 中,加解密模块想必是放在 cryptojs-aes.js 中了,其实看到文件名也能有点怀疑
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输采用该加密算法)
crypto-js 是一个纯 javascript 写的加密算法类库 ,可以非常方便地在 javascript 进行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密
- 使用 cryptojs 库 ase 加密的方式有多种,因此需要先商量并确定好采用何种方式,传递如下参数:
- 明文
- 私钥 - 这个私钥只有自己知道,别人不知道,因为你要通过它对明文进行加密
- 对象,里面包括要指定的 mode(加密模式) 和 padding (填充方式), iv(秘钥偏移量)这个可选
- 点开 cryptojs-aes.js ,发现该脚本是经过压缩后的代码,于是尝试去看 validation.js ,如果也被压缩了,那这就…尴尬了…,所幸打开后,发现没被压缩,反而立马发现一个有趣东西:
难道这就是传说中的得来全不费工夫?懂了懂了,这不就是把方法在封装了下吗,我盯着’lzYW5qaXVqa’ 看了很久,也没搞明白这咋整的,就这样明晃晃的把私钥写在外边,没做任何处理,这。。都挺好 - 接着在页面中找该方法都有哪些调用了它,没什么好说的,仙人指路看图:
可以确认,加密密码是调用该方法实现的,接下来就是验证过程了:
三、结尾
要解决的这样的问题,方法还是多种多样的,例如将私钥保存在服务端,或者对私钥进行加密等,如若有感,邀请留言指出!