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?


猜你喜欢
- 本文为大家讲解了pytorch实现CNN卷积神经网络,供大家参考,具体内容如下我对卷积神经网络的一些认识卷积神经网络是时下最为流行的一种深度
- 1.插入语句1.1插入一行有两种:1.以小括号的形式这里注意:如果表名后边不加小括号对应内容,那么默认就是添加所有列2.以set形式inse
- 效果图:(灰色区域可拖动)代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
- 许多数据科学家认为获取和清理数据的初始步骤占工作的 80%,花费大量时间来清理数据集并将它们归结为可以使用的形式。因此如果你是刚刚踏入这个领
- 在使用过程中,一边看文档一边做,遇到了一些困难的地方,在此记录一下,顺便做个总结:1、前端分页2、后端分页3、模糊查询前端分页相当简单,在我
- 前言:过完520,咱们来玩玩五子棋陶冶情操。快拿这个和你女朋友去对线。多的不说直接进入正题人人对战游戏规则:p1为黑子,p2为白子,黑子先手
- 源码: 代码如下: <% '隐藏并修改文件的最后修改时间的aspshell '原理:通过FSO可以修改文件的属性,比
- 在接触python时最开始接触的代码,取长方形的长和宽,定义一个长方形类,然后设置长方形的长宽属性,通过实例化的方式调用长和宽,像如下代码一
- 这篇文章主要介绍了python imread、newaxis用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 1、Matplotlib 简介数据可视化有助于更有效地讲述有关数据的故事并使其易于呈现。有时很难用静态图表来解释数据的变化,为此,我们将讨论
- Timedelta转换为Int或Float方式Pandas处理import pandas as pddataSet['t']
- 本文实例为大家分享了Python管理Windows服务的具体代码,供大家参考,具体内容如下#!/usr/bin/python# encodi
- SQL Server数据库涉及到的数据仓库概念:1.多维数据集:多维数据集是联机分析处理 (OLAP) 中的主要对象,是一项可对数据仓库中的
- 本文实例讲述了php绘制圆形的方法。分享给大家供大家参考。具体实现方法如下:php绘图的基本步骤,有四步(php.ini里的 extensi
- 本文实例讲述了javascript中createElement的两种创建方式。分享给大家供大家参考。具体实现方法如下:<html xm
- MySQL Index索引是一种数据结构,可以是B-tree、R-tree、或者hash结构。其中,B-tree适用于查找某范围内的数据,可
- 源代码: 传送门Vue会对我们在data中传入的数据进行拦截:对象:递归的为对象的每个属性都设置get/set方法数组:修改数组的原型方法,
- JavaScript ES6之前的还没有Class类的概念,生成实例对象的传统方法是通过构造函数。例如:function Mold(a,b)
- Linux系统下调用动态库(.so) 1、linuxany.c代码如下: #include "stdio.h"
- 从这节算是开始进入“正规”的机器学习了吧,之所以“正规”因为