JS逆向入门案例-某狐x电邮xiang(JSFuck+MD5)-04

概要

提示:仅供学习,不得用做商业交易,如有侵权请及时联系!

逆向:某狐x电邮xiang(JSFuck)

URL:aHR0cHM6Ly9tYWlsLnNvaHUuY29tL2ZlLyMvbG9naW4=

目的:登录(password和cookies)

在这里插入图片描述
在这里插入图片描述

整体架构流程

提示:分析-调试-猜想-实现-执行

1、首页将代码复制到py中执行
在这里插入图片描述

生成py工具:spidertools.cn

在这里插入图片描述

2、我们就需要去分析这三个cookie是怎么来的
在这里插入图片描述
观察发现,每次点击登录,都会发送这个请求包,观察代码,看代码形式是一个JSFuck混淆,它是一种将代码使用特殊符号来进行表示的混淆方式,而使用**[]!**这种方式的混淆,我们也叫它JSFuck混淆!
3、复制括号内的代码,我们到控制台去执行它,发现出值了!
在这里插入图片描述

那么我们如何去得到他原来的代码是什么样的?
我们看一般象这种混淆它都是一个方法,那么它去执行一个方法的时候都会带上** () **去执行,那么我们可以将代码最后面的那个括号进行去掉,然后再加上一个空字符串就能得到原来的代码形式。

在这里插入图片描述
4、所以jv参数是通过后端返回回来js代码,将一组数组通过String.fromcharcode转换得到的!
5、继续复制curl生成py代码,得到这个JSFuck代码,我们发现请求它也是需要gidinf、_dfp这俩个cookie值的
在这里插入图片描述

发现没有这俩个cookie值是获取不到的,继续分析这俩个cookie是怎么来的,我们通过搜索值发现:
在这里插入图片描述
通过该接口获得,所以我们继续使用curl复制py代码
在这里插入图片描述

6、最后我们就需要解决password这个参数了,我们去验证我们刚开始的猜想,因为它的值长度为32位,所以我们使用spidertools中的加密去验证!

密码输入:123456,结果发现确实是MD5加密
在这里插入图片描述

我们发现每个接口都有一个"_"参数:13位时间戳

7、python代码实现

	import requests
	import time
	import execjs
	import hashlib
	
	# 请求该接口获取cookies  - gidinf -dfp
	def getCommon():
	    url = "https://xxx/common"
	    params = {
	        "callback": "passport4014_cb1724658961362",
	        "_": f"{time.time() *1e3}"
	    }
	    response = requests.get(url, headers=headers, params=params)
	
	    cookies = response.cookies.get_dict()
	    print('首先访问common接口,cookie值为:',cookies)
	    # jsfuck --- 获取cookie jv
	    url = "https://xxx/code"
	    params = {
	        "callback": "passport4014_cb1724658961364",
	        "type": "0",
	        "_": f"{time.time() *1e3}"
	    }
	    response = requests.get(url, headers=headers, cookies=cookies, params=params)
	    
	    jsFuck = response.text.replace('passport4014_cb1724658961364("','').replace('")','')
	    jv = execjs.compile("document = {cookie: ''};" + '\n' + jsFuck + '\n' + "function getjv() {return document.cookie.split(';')[0].split('=')[1]};").call('getjv')
	    print('再访问code接口,获取jsFuck文件,cookie值为:jv--',jv)
	    cookies['jv'] = jv
	    return cookies
	
	def login(user,pwd):
	    cookies = getCommon()
	    
	    url = "https://xxx/login/101305"
	    data = {
	        "userid": f"{user}@sohu.com",
	        "password": hashlib.md5(pwd.encode()).hexdigest(),
	        "appid": "101305",
	        "nf": "1"
	    }
	    response = requests.post(url, headers=headers, cookies=cookies, data=data).json()
	    print('登录结果:',response['message'])
	
	if __name__ == '__main__':
	    headers = {
	        "authority": "xxx",
	        "accept": "*/*",
	        "accept-language": "zh-CN,zh;q=0.9",
	        "cache-control": "no-cache",
	        "pragma": "no-cache",
	        "referer": "https://mail.sohu.com/",
	        "user-agent": "Mozilla/5.0 (Windows NT 10.0; JiSu) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.3.1.7 Safari/537.36"
	    }
	    
	    user = 'xxx'
	    pwd = 'xxx'
	    login(user,pwd)

9、运行结果:
在这里插入图片描述

技术细节

提示:快速定位方式,猜想是何加密,验证猜想

例如:

  • password:为32位字符串(小写),猜测md5
  • []!格式代码,猜测JSFuck

小结

提示:学习交流群:v:wzwzwz0613拉进群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值