【MD5】是单向加密的一种方法,为32位,在进行该种加密方式的破解时,并不能直接破解,只能通过网页模拟MD5的加密,破解网页的登陆或者数据的加载
红人点集的md5登陆界面
1.按f12,进入调式窗口,点击账号密码登陆方式,输入账号以及错误的密码(账号需要事先注册好),触发ajax加载源码数据,点击网络按钮
这里可以看到请求载荷是由几部分组成的:
phoneNum、 pwd、 t、tenant
pwd跟sig是一串不认识的数字跟字母组成,这里可以知道是进行了加密
2.我们需要知道这是何加密
进入控制台,分别查看这两组乱码的长度
都是32位,一般来说,这种情况就可以说明它是MD5的加密,接下来我们进一步验证一下
3.验证是否为md5加密
pwd
这里我的密码是123456
经过网页加密之后是e10adc3949ba59abbe56e057f20f883e
在网上搜索一下MD5在线加密解密的网站进行查看,与网页的加密结果进行对比,啪!对了,一模一样,所以pwd是用的md5加密!
sig
复制sig:(这里需要连:一起复制!!!),点击调试窗口右上角的三个小点
点击搜索字段
就会在调试窗口下显示出搜索窗口,并将sig:复制进去,按回车,显示内容
点击第一条内容,进入该下页面,点击{}查看详情
这里可以看到sig是将l复制给了sig,在var l 打个断点,可以清晰的看到l是有phoneNum + pwd+t +tenant构成的,然后再通过Object(g[“a”])的方法对这个结构生成的参数进行加密,分别查看S(e)、P(S(e))、Object(g[“a”])(P(S(e))),这里可以看到S(e)是sig的结构参数,P(S(e))是对S(e)的参数+JzyqgcoojMiQNuQoTlbR5EBT8TsqzJ进行的拼接
这里我们看一下P(S(e))函数的拼接方法,将鼠标放在这个函数上,会显示一个框,点击框里面的内容
这里我们看一下Object(g[“a”])这个方法,将鼠标放在这个函数上,会显示一个框,点击框里面的内容
内容如下,Object(g[“a”])函数md5的运算方法
这里对sig的结构参数进行加密后的结果为c354621b376b1e23c5f1ceb145b70d52
我们使用在线的md5加密同样对这个结构参数进行加密
可以看到这里跟网页加密的结果是一致的!
结论:pwd跟sig同样通的加密方式是md5
4.最后我们来用python对这个过程进行编写,然后实现登陆
#传入相对应的模块
import hashlib
import requests,time,random
import math
#定义一个类
class Crawl():
def __init__(self):#定义函数,添加头部信息和url地址
self.headers = {
'user-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
self.url = 'https://user.hrdjyun.com/wechat/phonePwdLogin'
def login(self):#定义登陆函数
times = str(math.ceil(time.time() * 1000) + random.randint(1, 10))#时间戳
phoneNum = '账号'
pwd =self.Md5('密码')#写密码并对密码调用md5函数进行加密
sig = self.Md5(phoneNum + pwd + times + '1' + 'JzyqgcoojMiQNuQoTlbR5EBT8TsqzJ')#构造sig,并使用md5进行加密
data = {
'phoneNum':phoneNum,
'pwd':pwd,
'sig':sig,
't':times,
'tenant':1
}
res = requests.post(self.url,data=data,headers=self.headers).json()#请求
print(res)
if res.get('status')==0:#请求参数成功,进行返回
return (data)
def Md5(self,value):#定义md5加密函数
md = hashlib.md5()
md.update(value.encode('utf8')) # 接收字节类型 16进制表示
return md.hexdigest()
if __name__ == '__main__':
s = Crawl() #调用类
s.login() #调用login
总结:在进行此类网站的js逆向解析时,可以先在调试窗口进行抓包,观察网络中的请求头和载荷参数是否有加密,如果有加密,将加密字段在控制台中查看长度,如果为32位,一般为MD5加密,然后将对应的加密参数复制到搜索窗口进行源代码查看,观察加密的过程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)