instgram登录协议分析
instgram登录协议分析
分析登录数据包

- 值得关注的字段有
header中的X-CSRFToken,cookie中的mid, 以及enc_password字段 - 优先排查
csrftoken与mid的值对正常请求是否有影响

- 删除
mid后登陆结果正常返回 - 删除
csrftoken后返回页面异常 - 后续可以关注
csrftoken的生成方式 , 优先分析enc_password提交参数
分析enc_password加密流程

- 查看堆栈后 , 函数名无明显混淆
- 尝试在
e.login异步这里断下
return r(d[0]).post("/accounts/login/ajax/", {
...await r(d[6]).getEncryptedParam('password', n, _),
username: t,
queryParams: o,
optIntoOneTap: s,
stopDeletionNonce: c,
trustedDeviceRecords: u
}, {
loggingData: _,
timeout: P
})
// 关注 r(d[6]).getEncryptedParam('password', n, _)
| n | 密码 |
|---|---|
| _ | uuid |

- 进入enc函数进行查看分析
e.getEncryptedParam = async function(n, c, o, f="enc_") {
let u = {}
, l = {};
if (!i(d[0])._("540a27c9b465b678b75a387cf050e8d8"))
return Object.freeze({
[n]: c
});
const s = await t(c, o);
null != s && (u = {
[`${f}${n}`]: s
});
return i(d[0])._("d35655349616aa247b37d45a4f8ef432") || (l = {
[n]: c
}),
Object.freeze({
...u,
...l
})
}

- 进入t函数

- 生成了一份时间戳
- 同时出现了一个success 与 failure 的通知函数
- 先推测成功后将结果推送到send函数处 , 那么
l大概率为加密结果
l = await r(d[3]).encryptAndFormat(t, c)
"#PWD_INSTAGRAM_BROWSER:10:1659591100:AYtQALyxojdD2/dr+2vaJTJ7E1qKXpPtIh3hwsrpTltn87QIOSVbD1BFL4+kGf5wuNTqg5GJ351PC0NpzZio5hGYbqYk2BR5FPcjMIzkcXZDW+XMtk6x/7qMDBgBIpHFoLOWeUDK8xDWO2RA/mThxYYDFtw="
- 实际推测没错 , 尝试进入encryptandformat 函数

- 此时大概推断为hex的key , 于昨天分析时的facebook大同小异

- 与昨天facebook加密时算法一致 , AES-GCM-256算法 , 调用了浏览器自带加密库