【MD5】js逆向

【MD5】js逆向,第1张

今天学习MD5网页的破解,进行js逆向

【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加密,然后将对应的加密参数复制到搜索窗口进行源代码查看,观察加密的过程。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/716804.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存