CasperSecurity

Current Path : /usr/share/ModemManager/fcc-unlock.available.d/
Upload File :
Current File : //usr/share/ModemManager/fcc-unlock.available.d/105b:e0ab

#!/bin/sh

# SPDX-License-Identifier: CC0-1.0
# 2021 Aleksander Morgado <aleksander@aleksander.es>
# 2022 Thilo-Alexander Ginkel <thilo@ginkel.com>
# 2022 Bjørn Mork <bjorn@mork.no>
#
# Foxconn SDX55 (Lenovo T99W175) FCC unlock operation
#
# The script will first try to unlock the WWAN modem using the new (hash-based)
# v2 method and fall back to the old (v1) method if that fails
#

# require program name and at least 2 arguments
[ $# -lt 2 ] && exit 1

# first argument is DBus path, not needed here
shift

# second and next arguments are control port names
for PORT in "$@"; do
  # match port type in Linux 5.14 and newer
  grep -q MBIM "/sys/class/wwan/$PORT/type" 2>/dev/null && {
    MBIM_PORT=$PORT
    break
  }
  # match port name in Linux 5.13
  echo "$PORT" | grep -q MBIM && {
    MBIM_PORT=$PORT
    break
  }
done

# fail if no MBIM port exposed
[ -n "$MBIM_PORT" ] || exit 2

log_v2_failure() {
    echo "$1. Falling back to old unlock method" >&2
}

FIRMWARE_VERSION=$(qmicli --device-open-proxy --device="/dev/$MBIM_PORT" \
  --dms-foxconn-get-firmware-version=firmware-mcfg \
  | grep "Version:" \
  | grep -o "'.*'" \
  | sed "s/'//g" \
  | sed -e 's/\.[^.]*\.[^.]*$//')

if [ -n "${FIRMWARE_VERSION}" ]; then
  FIRMWARE_APPS_VERSION=$(qmicli --device-open-proxy --device="/dev/$MBIM_PORT" \
    --dms-foxconn-get-firmware-version=apps \
    | grep "Version:" \
    | grep -o "'.*'" \
    | sed "s/'//g")

  if [ -n "${FIRMWARE_APPS_VERSION}" ]; then
    IMEI=$(qmicli --device-open-proxy --device="/dev/$MBIM_PORT" --dms-get-ids \
      | grep "IMEI:" \
      | grep -o "'.*'" \
      | sed "s/'//g")

    if [ -n "${IMEI}" ]; then
      SALT="salt" # use a static salt for now
      MAGIC="foxc"
      HASH="${SALT}$(printf "%s%s%s%s%s" "${FIRMWARE_VERSION}" \
        "${FIRMWARE_APPS_VERSION}" "${IMEI}" "${SALT}" "${MAGIC}" \
        | md5sum \
        | head -c 32)"
    else
      log_v2_failure "Could not determine SDX55 IMEI"
    fi
  else
    log_v2_failure "Could not determine SDX55 firmware apps version"
  fi
else
  log_v2_failure "Could not determine SDX55 firmware version"
fi

UNLOCK_RESULT=1
if [ -n "${HASH}" ]; then
  qmicli --device-open-proxy --device="/dev/$MBIM_PORT" \
    --dms-foxconn-set-fcc-authentication-v2="${HASH},48"
  UNLOCK_RESULT=$?

  if [ $UNLOCK_RESULT -ne 0 ]; then
    log_v2_failure "SDX55 FCC unlock v2 failed"
  fi
fi

if [ $UNLOCK_RESULT -ne 0 ]; then
  qmicli --device-open-proxy --device="/dev/$MBIM_PORT" \
    --dms-foxconn-set-fcc-authentication=0
  UNLOCK_RESULT=$?

  if [ $UNLOCK_RESULT -ne 0 ]; then
    echo "SDX55 FCC unlock v1 failed" >&2
  fi
fi

exit $UNLOCK_RESULT
Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY