JavaScript逆向分析instagram登入过程
作者:ZRocket 发布时间:2023-09-08 19:51:52
标签:js,逆向分析,instagram,登入
一、流程分析
分析发现密码加密,且发送POST请求时header必须携带x-csrftoken,否则是报403。
而x-csrftoken是在第一次访问主页的时候设置的。
二、逆向分析
通过查看请求堆栈找到生成处,当然也可以直接采用搜索 * ,白猫黑猫抓到耗子就是好猫。
通过逐步下断点分析函数作用及各种参数传入返回,慢慢溯源最终找到生成处。
其中 i(d[1]).encrypt(t, c, u, f) 是主要逻辑,放到Node中缺啥补啥跑起来就ok,当然也可以用其他语言重写。
s = {
encrypt: async function(s, c, h, l) {
const u = o + h.length;
if (64 !== c.length)
throw new Error('public key is not a valid hex sting');
const w = n(c);
if (!w)
throw new Error('public key is not a valid hex string');
const y = new Uint8Array(u);
let f = 0;
y[f] = 1,
y[f += 1] = s,
f += 1;
const p = {
name: 'AES-GCM',
iv: new Uint8Array(12),
additionalData: l,
tagLen: 16
}
, A = window.crypto || window.msCrypto;
return A.subtle.generateKey({
name: 'AES-GCM',
length: 256
}, !0, ['encrypt', 'decrypt']).then(function(t) {
const n = A.subtle.exportKey('raw', t)
, o = A.subtle.encrypt(p, t, h.buffer);
return Promise.all([n, o])
}).then(function(n) {
const o = t(new Uint8Array(n[0]), w);
if (y[f] = 255 & o.length,
y[f + 1] = o.length >> 8 & 255,
f += 2,
y.set(o, f),
f += 32,
f += r(d[0]).overheadLength,
o.length !== 32 + r(d[0]).overheadLength)
throw new Error('encrypted key is the wrong length');
const s = new Uint8Array(n[1])
, c = s.slice(-16)
, h = s.slice(0, -16);
return y.set(c, f),
f += 16,
y.set(h, f),
y
}).catch(function(t) {
throw t
})
}
};
三、模拟请求
首先访问主页,获取到csrftoken,然后把加密后的密码还有csrftoken组装起来,POST即可,因为账号密码是我瞎填的所以user和authenticated都是false,试了下提交正常账号也是完美没有问题滴。
import requests
def get_proxy():
return {
"http":"http://"+ip,
"https": "https://" + ip,
}
headers = {
'authority': 'www.instagram.com',
'origin': 'https://www.instagram.com',
'referer': 'https://www.instagram.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}
cookie = requests.get('https://www.instagram.com/',headers=headers, proxies=get_proxy()).cookies
headers['x-csrftoken']= cookie.get('csrftoken')
# node服务
enc_password = requests.get('http://localhost:23346/instagram?password=1111111111111111111111').text
print(enc_password)
data = {
'enc_password': enc_password,
'username': '15566678899',
'queryParams': '{}',
'optIntoOneTap': 'false',
'stopDeletionNonce': '',
'trustedDeviceRecords': '{}'
}
response = requests.post('https://www.instagram.com/accounts/login/ajax/', headers=headers, data=data, proxies=get_proxy())
print(response.status_code)
print(response.text)
# 运行结果
#PWD_INSTAGRAM_BROWSER:10:1658217374:AVtQAGM39dHHEHtO7U0tFDVnhUk+Wg2VMRNtL+jtmdLx5fpegdgNyMnTmBPfBWUP0lBNGBK9rrAyX4PZfdVMEf0ksXa5s98X/SlIVF78g92WU4w0JnQHArjoIlNzLNcb+wyuy1SBDRsN92Wy5dw+ghaBC7hSUNpVrmE=
200
{"user":false,"authenticated":false,"status":"ok"}
来源:https://blog.csdn.net/qq_41179280/article/details/125872984?


猜你喜欢
- 日历功能在个人博客网站及一些任务类网站都有广泛的应用,当然,在一些通用网站的后台也不乏这些日历功能的综合应用,所以,一个结构合理、代码清晰的
- 我们通常会通过单击按钮的操作,将定义好的内容直接复制到剪贴板对于用户来说点了按钮直接【Ctrl】+【V】就可以了。其实该功能的核心原理就是用
- nav导航栏<nav role="navigation" class="navbar navbar-de
- 如何实现优惠打折? 代码及说明见下:<%@ LANG
- 背景:这个库的安装不是像其他的一样的直接使用 pip install XXX的形式,而是使用原始的Git方式1、apex这是NVIDIA开发
- 英文原文:http://www.myinkblog.com/2009/03/21/4-principles-of-good-design-f
- PHP levenshtein() 函数实例计算两个字符串之间的 Levenshtein 距离:<?php echo levensht
- Javascript中的eval函数让我们可以很方便地操作一系列变量(a1,a2,a3,……)。自从VBScript 5.0之后,我们也可以
- 比如可以定义开学时间为2009年2月8日,然后程序可以算出,今天距开学那天已经是第几周,非常急需这个程序,忘高手们能提供一个,先谢谢了!自己
- 1.不装入数据库而启动事例 可以不装入数据库而启动事例,一般是在数据库才创建时才可以这样做:STARTUP NOMOUNT2.启动事例并装入
- 一。存储过程的创建和使用1.创建程序包,并在程序中创建存储过程create or replace PACKAG
- 内容摘要:asp使用最多的就是ACCESS数据库和ms sql server数据库,本文列出了asp连接这两个数据库的方
- 基本上快被这个问题搞疯了,症状如下症状描述:在ie下(6或7,8没有试过)当出现中英文混排,都采用默认字体时,并使用 li 列表做float
- 安装时建议你为MySQL管理创建一个用户和组。由该组用户运行mysql服务器并执行管理任务。(也可以以root身份运行服务器,但是不推荐)第
- 内容摘要:下面是虚机维护中,经常碰到的一些ASP程序中的数据库调用的错误,现收集整理如下:1.不能打开注册表关键字(8007000e);2.
- 示例代码:<span style="font-size:18px;">function hi(){ var
- 1.说明:复制表(只复制结构,源表名:a 新表名:b)SQL: select * into b&nb
- 内容摘要:一堆数据摆面前,数据背后有什么样的事情在发生,这些数据里面暗藏着什么样的用户需求,什么样的商业机会?看懂这些,将为未来产品设计的方
- 在前一文中记述了Access启动不了,或者出现“正在准备安装……”的问题,今天则找到了Access对控件支持的问题。本来Access、Exc
- ▲ SHOW执行下面这个命令可以了解服务器的运行状态mysql >show status;该命令将显示出一长列状态