MD5
md5:消息摘要算法(英文:MD5 Message-Digest Algorithm ),一种被广泛使用的密码散列函数,可以产生一个128位(16字节)的散列值。该加密算法不可逆,通过暴力穷举法破解,以及网站接口实现解密。
js逆向中,可以通过搜索MD5关键字查找加密位置。
md5的js加密方法:
const CryptoJs = require ('crypto-js'); //导入加密库
let password = 'philosophy'; //加密字符串
let enPwd = CryptoJs.MD5(password).toString();
console.log(enPwd); //输出结果
python实现MD5加密:
方法一:
import hashlib
str = 'philosophy' #加密字符串
m = hashlib.md5()
m.update(str.encode('utf-8'))
print(m.hexdigest())
方法二:
from lxpy.encrypt import md5 #第三方库需要安装
print(md5.get_md5(str))
输出结果都为:
225ab6cdf797eae79495ff584a46dfd2
逆向案例
进入登录窗口,打开开发者工具,输入账号密码,点击登录进行抓包:
网站地址:https://www.zhaoxi.net/
在开发者工具中Network面板可以看到登录提交的数据有三个,前两个参数是固定,参数txtpassword明显通过加密生成,如图所示:
通过全局搜索参数名可以看到有多个结果,使用Initiator快速查看堆栈调用,进入send调用中设置断点,重新触发登录请求:
重新登录触发断点后,进行回溯堆栈调用,点击右侧Call Stack(调用堆栈),逐个点击查看,可以发现CheckForm里的Ajax请求前有个#txtpassword ,可以看出hex_md5明显是个加密函数,在控制台console中输入它,双击方法进入查看:
可以确认为md5加密,通过python实现加密,可以发现加密结果和提交的参数值一致。