概要
提示:仅供学习,不得用做商业交易,如有侵权请及时联系!
逆向:某狐x电邮xiang(JSFuck)
URL:aHR0cHM6Ly9tYWlsLnNvaHUuY29tL2ZlLyMvbG9naW4=
目的:登录(password和cookies)
整体架构流程
提示:分析-调试-猜想-实现-执行
1、首页将代码复制到py中执行
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拉进群