广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript逆向分析instagram登入过程
  • 719
分享到

JavaScript逆向分析instagram登入过程

2024-04-02 19:04:59 719人浏览 安东尼
摘要

目录一、流程分析二、逆向分析三、模拟请求一、流程分析 分析发现密码加密,且发送POST请求时header必须携带x-csrftoken,否则是报403。 而x-csrftoken是

一、流程分析

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

到此这篇关于javascript逆向分析instagram登入过程的文章就介绍到这了,更多相关js逆向分析instagram登入内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript逆向分析instagram登入过程

本文链接: https://www.lsjlt.com/news/164724.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript逆向分析instagram登入过程
    目录一、流程分析二、逆向分析三、模拟请求一、流程分析 分析发现密码加密,且发送POST请求时header必须携带x-csrftoken,否则是报403。 而x-csrftoken是...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作