MD5算法,微信公众平台js算法改写
MD5
简介
MD5
算法一般指MD5
。MD5信息摘要算法
(英语:MD5 Message-Digest Algorithm
),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value)
,用于确保信息传输完整一致。
我们这里代码举例:某平台js
算法改写!
分析js
源码
我们打开网站,输入信息进行抓包。
可以看到,username
是正确显示的,而pwd
却是一串字母+数字。
很容易知道这个是md5
。
那么我们怎么获取这个明文呢?
1.源码里搜索参数pwd
这里,我不要直接ctrl+f
,点图里标记处进行搜索!
搜索后出现了很多内容!首先可以确定.css
文件肯定不是,因为加密算法肯定是在js
文件里。我们点开第二个看下:
2.js文件
里定位搜索pwd
文件内容搜索直接ctrl+f
搜索后我们看到有20个
3.使用断点
20个pwd
,首先第一个肯定不是。
第二个,在1183行,是一个函数,它好像是的?
既然怀疑是的,那就先点击下行号,打个断点。
类推,20个只要有你怀疑的,都先打上断点、
都定位好后,我们再来点下登录。发现代码定位到了1883行。
那这个基本就是了。
可以将鼠标放在次函数的源码中,会提示有’123456’的字样。
4.复制JS
代码,使用调试工具
确定好上述函数后,我们点进去!
然后我们在点右上角的第三个位置(进入下一个函数调用)
然后我们选中return
这段代码,就会看到‘123456’加密后的md5
。
发现是和网站post
提交的pwd
是一样的。
那就肯定确定是这段js函数了
我们看到,这里的 n、e、t 等等参数都是未知的,那么我们需要复制大括号以上的所有代码。
粘贴到JS调试
工具里,先点击格式化,再点击加载。
我们看到有个错误信息:n未定义
5.改写js
代码
没有n,那么我们就在代码最上面定义一个n:
var n = {}
然后我们再点击加载就成功了~
成功后,我们可以把最下面的的这段函数n.exports
改为getPwd
.
并计算下这个表达式。可以看到计算后的结果是正确的!
Python执行js代码
js
代码我们有了,我们如何在Python
代码里执行呢?
1.环境安装
-
nodejs
开发环境(自行安装) pip install PyExecJs
2.复制刚才的js代码
创建wechat.js
文件放在同目录,把刚才复制的js代码
写进去
3.Python代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import execjs
# 1.实例化一个node对象
node = execjs.get()
# 2.js源文件编译
ctx = node.compile(open('./wechat.js', encoding='utf-8').read())
# 3.执行js函数
funcName = 'getPwd("{0}")'.format('123456')
pwd = ctx.eval(funcName)
print(pwd)
代码执行后,我们就看到了结果~