instgram登录协议分析

Author Avatar
Tisoz 8月 04, 2022
  • 在其它设备中阅读本文章

instgram登录协议分析

分析登录数据包

image-20220804132102728

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

image-20220804132409510

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

分析enc_password加密流程

image-20220804132548474

  • 查看堆栈后 , 函数名无明显混淆
  • 尝试在e.login异步这里断下
1
2
3
4
5
6
7
8
9
10
11
12
13
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

image-20220804132811178

  • 进入enc函数进行查看分析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
})
}

image-20220804133045551

  • 进入t函数

image-20220804133201091

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

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

image-20220804133751925

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

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:http://www.tisoz.com/2022/08/04/instgram%E5%88%86%E6%9E%90/