Facebook登录协议分析

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

facebook

分析登录请求参数

image-20220803155549757

优先关注encpasslgndim

lgndim eyJ3IjoyNTYwLCJoIjoxNDQwLCJhdyI6MjU2MCwiYWgiOjE0MDAsImMiOjI0fQ== {“w”:2560,”h”:1440,”aw”:2560,”ah”:1400,”c”:24}
encpass #PWD_BROWSER:5:1659513194:AZNQANED7RG7mD6aA7…

lgndim的base64编码ey开头基本都为json格式的base64后数据 , 直接使用atob进行解码 , 记录的是屏幕信息和色位

尝试追踪密码加密调用栈

1.尝试性全局搜索encpass字段

image-20220803160405049

  • 非常轻松找到赋值位置

  • 尝试下断追踪加密函数

2.通过request原型的send追踪调用栈中的encpass字段

* `debug(XMLHttpRequest.prototype.send)`拦截请求函数
* 拦截失败 , 网页直接跳转并显示登录失败
* ![image-20220803160822492](https://oss.tisoz.com/mk-img/image-20220803160822492.png?refer=blog)
* 这时候可以根据经验判断是通过form表单进行submit提交跳转
* 由此可以判断表单密码字段是实时加密

接下来尝试拦截html标签内容进行加密定位

image-20220803161120319

  • 表单中无密码字段 , 说明是通过点击按钮后生成一个input标签并进行submit操作

image-20220803161238529

image-20220803161447313

  • 拦截后可以清晰看到 745行处进行插入input标签操作
  • 接下来尝试追踪加密函数

分析加密函数调用位置

1
2
3
e = c("DOM").scry(h.loginForm, 'input[id="pass"]')[0]
g = Math.floor(Date.now() / 1e3).toString();
f.encryptPassword(d.keyId, d.publicKey, e.value, g)
d.keyId 147
d.publicKey 38b94d0f9dd8b649c030620e261c583d97618b14aa09bf0ebf52b5b4ddfa5f3d key
e.value ccirE7L1bN 密码
g 1659514608 10位时间戳
  • 初步判断为hmac之类的签名算法
  • 进入encryptPassword函数

image-20220803162452113

  • 一个简单的ast混淆控制流后的代码 , 对比shape与腾讯vm的分析要容易的太多
  • 549行下断 , 确认各变量的内容
f 密码
g 时间戳
j 密码的utf8字节
k 时间戳的utf8字节
  • 进一步深入encrypt函数分析过程

    image-20220803162733651

    • 加密函数的控制流 , key为hex格式 , 从内容来看加密算法基本确认为aes-gcm格式
    • 定位501行代码处参数细节
    • aes-gcm-256算法

    image-20220803163526153

    • 附加数据为前文中的时间戳字节

    • e为密码的字节

    • ```
      h.subtle.encrypt(w, a, e.buffer)
      Promise {}

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10

      * 返回了一个promise对象 , 处于pending状态

      * promise.all去返回处理结果 , 那么基本确认加密细节需要进一步深入

      * 进入`h.subtle.encrypt`函数

      * ```
      h.subtle.encrypt.toString()
      'function encrypt() { [native code] }'
    • 无法进入 , 说明是浏览器自带的加密库 , 那么至此已经完成大部分工作内容

    • 剩余部分手动调用标准库中的AES-GCM-256算法即可

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