记录一次4399加密信息解密过程

记录一次4399加密信息解密过程

一、前提须知

  1. 在4399页面中,登录面板中输入了用户名和密码(随便输入,只是拿来试试解密),输入的用户名是:test ,密码:23232323;

  2. 4399网站采用的是 HTTP 协议,意味着安全性是较低的,找解密其实并不难

  3. 纯属娱乐,在种种巧合之下无难度阻碍的解了密

二、正题

大体想法:寻找网站使用何种加密算法,然后尝试利用在线网站的工具对其解密(如果得知加密算法是base64,那么通过base64加密,对应的也通过base64解密),如果有需要私钥,尝试分析私钥可能保存在何处,有无可能获得。

  • 提前打开开发者工具,便于发起登录请求后查看报文。用户名和密码输入后点击登录,在 Network 选项卡中找本次做的登录请求,很明显可以看到在众多请求中有个叫 login.do?v=1 的项惹人注目,如图:
    记录一次4399加密信息解密过程

  • 点进去查看该请求附带的表单信息 Form Data,如图:
    记录一次4399加密信息解密过程
    username:test
    password:U2FsdGVkX19DpJPPbUtzw5/nC4pHHe8jhj3mbzJaVyE=

  • 可以看到密码是有被加密过的,首先我去找了登录按钮所在面板的 HTML 结构,发现它是通过 iframe 嵌入的一个页面,找到它引入的脚本文件,类似处理交互的方法或工具方法不用说,都写在脚本文件里的,于是去找它引入的脚本文件。

个人认为在开发中遇到通用的问题需解决时,一般会找市面上已成熟大家都会去用或流通较久的方案去解决问题,因此猜想可能加解密使用的是现成的库

记录一次4399加密信息解密过程

  • 红框标注出来的文件,猜测验证登录或其他输入的方法应该都放在 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 加密的方式有多种,因此需要先商量并确定好采用何种方式,传递如下参数:
    1. 明文
    2. 私钥 - 这个私钥只有自己知道,别人不知道,因为你要通过它对明文进行加密
    3. 对象,里面包括要指定的 mode(加密模式) 和 padding (填充方式), iv(秘钥偏移量)这个可选
  • 点开 cryptojs-aes.js ,发现该脚本是经过压缩后的代码,于是尝试去看 validation.js ,如果也被压缩了,那这就…尴尬了…,所幸打开后,发现没被压缩,反而立马发现一个有趣东西:
    记录一次4399加密信息解密过程
    难道这就是传说中的得来全不费工夫?懂了懂了,这不就是把方法在封装了下吗,我盯着’lzYW5qaXVqa’ 看了很久,也没搞明白这咋整的,就这样明晃晃的把私钥写在外边,没做任何处理,这。。都挺好
  • 接着在页面中找该方法都有哪些调用了它,没什么好说的,仙人指路看图:
    记录一次4399加密信息解密过程
    可以确认,加密密码是调用该方法实现的,接下来就是验证过程了:
    记录一次4399加密信息解密过程

三、结尾

要解决的这样的问题,方法还是多种多样的,例如将私钥保存在服务端,或者对私钥进行加密等,如若有感,邀请留言指出!