JS逆向 | instagram登入enc_password

news/2024/7/19 8:35:42 标签: 爬虫, 逆向

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除

一、流程分析

分析发现密码加密,且发送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"}

在这里插入图片描述代码就不贴出来了,偷偷放在知识星球<虫术>里面了,公众号有星球的优惠券,其实整个分析过程还是挺简单,有兴趣的同学可以自己试试


http://www.niftyadmin.cn/n/997317.html

相关文章

httpsendrequest的head怎么用string写_平安夜快乐的英语怎么写,平安夜快乐用英语怎么说...

导语&#xff1a;我们一直说在圣诞节的前一天就是平安夜&#xff0c;这个说法是对的&#xff0c;也是有点不对的。因为“平安夜”的这个叫法是我们中国人自己创造出来的&#xff0c;平安夜的英文名字&#xff0c;也就是他原本的名字其实直译过来并不是平安夜的意思&#xff0c;…

mongodb简单操作

1、执行mongod.exe 服务器启动 后面可跟参数说明启动的数据库和日志。eg:mongod.exe --bind_ip 127.0.0.1 --logpath "F:\data\dbConf\mongodb.log" --logappend --dbpath "F:\data\db" --port 19901 --serviceName "mongodb1" --serviceDispla…

rabbitmq连接认证_RabbitMQ原理

微信公众号&#xff1a;云计算通俗讲义持续输出技术干货&#xff0c;欢迎关注&#xff01;通过本文你将了解&#xff1a;AMQP协议RabbitMQ概述RabbitMQ架构RabbitMQ交换机消息可靠性消息幂等性消息投递消息端限流消息端确认重回队列/TTL队列/死信队列RabbitMQ常用指令01 AMQP协…

JS逆向 | 推特x-guest-token

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除 一、整体分析 首先就拿用户文章接口分析&#xff0c;复制出cURL转换成Python代码&#xff0c;分别删除cookie和其中比较特殊的参数然后尝试请求&#xff0c;多次尝试发现headers 中authorization和x-guest-…

一道多线程面试题引起的自我救赎

一道多线程面试题引起的自我救赎 近日去一个知名互联网企业参加面试&#xff0c;之前准备多多信心满满&#xff0c;但是面试一开始就是一道不起眼的编程题 数组A内容为 1,2,3,4...52 ,数组B内容为26个英文字母&#xff0c;使用两个线程分别输入两个数组&#xff0c;打印内容为&…

安卓逆向 | 某H新闻类APP Secret

*本案例仅做分析参考,如有侵权请联系删除 一、抓包+重放 重放时发现返回请求已过期,猜测是请求参数带有时间戳,服务器对时间戳进行时效验证。 {"Code": ...,"ResultMsg": "请求已过期." }经过验证发现在DeviceInfo中有毫秒级时间戳Timesta…

datagridview设置某一行选中_excel表格标题设置方法

excel表格标题设置方法&#xff1a;标题设置步骤1&#xff1a;首先我们看到了一个很常见的表格&#xff0c;我们需要在第一行出添加一行来做标题。我们把鼠标先选中第一行&#xff0c;行变蓝色或者灰色说明已经选中。  标题设置步骤2&#xff1a;在选中的这个行中我们右击鼠标…

IOS 未来几年的认知

学了好几年iOS 了&#xff0c;碰见过很多大神&#xff0c;也见过很多大神&#xff0c;也时常沟通与反思&#xff0c;刚开始很火的&#xff0c;到现在人才市场爆满&#xff0c;到底是为啥呢&#xff0c;分析得出一下结论学历&#xff0c;名校出来人的&#xff0c;容易进入百度&a…