Fingerprint Pro Internals
Collector s97

iOS app probe

probes app specific paths to infer which apps are installed on iOS

Group: Media and DRM · signal map · run it live

// s97 — sig_s97_dataTransfer
// module cm, stage2, codes 0 -1 -2 -3
//
// measures
//   window.DataTransfer window.File window.RegExp document.createElement()
//   document.removeEventListener("visibilitychange") document.addEventListener("visibilitychange")
//   document.hidden TextEncoder clearTimeout() setTimeout()
// engine
//   Promise.all() ArrayBuffer Object.getOwnPropertyNames() Object.getPrototypeOf() Promise.race()
//   Uint32Array Uint8Array Promise
// reported value
//   call null
// probes
//   "/1" "96375" "TypeError" "br.gov.meugovbr" "co.visualsupply.cam" "com.airbnb.app"
//   "com.alipay.iphoneclient" "com.apple.MobileSMS" "com.apple.Preferences"
//   "com.apple.ScreenshotServicesService" "com.apple.mediaanalysisd" "com.apple.mobilephone"
//   "com.atebits.Tweetie2" "com.badoo.Badoo" "com.burbn.barcelona" "com.burbn.instagram"
//   "com.canva.canvaeditor" "com.cardify.tinder" "com.einnovation.temu" "com.facebook.Facebook"
//   "com.facebook.Messenger" "com.google.Drive" "com.google.Gmail" "com.google.GoogleMobile"
//   "com.google.Maps.WatchKitApp" "com.google.Translate" "com.google.chrome.ios"
//   "com.google.ios.youtube" "com.google.photos" "com.grabtaxi.iphone" "com.grubhub.search"
//   "com.hammerandchisel.discord" "com.iwilab.KakaoTalk" "com.lemon.lvoverseas"
//   "com.linkedin.LinkedIn" "com.microsoft.skype.teams" "com.moxco.bumble" "com.openai.chat"
//   "com.reddit.Reddit" "com.revolut.revolut" "com.ss.iphone.ugc.Ame" "com.ss.iphone.ugc.Aweme"
//   "com.strava.stravaride" "com.tencent.xin" "com.tenten.app" "com.tinyspeck.chatlyio"
//   "com.toyopagroup.picaboo" "com.ubercab.UberEats" "com.viber" "com.vk.vkclient"
//   "com.woltapp.wolt" "com.zhiliaoapp.musically" "doordash.DoorDashConsumer" "ee.mtakso.client"
//   "jp.naver.line" "net.whatsapp.WhatsApp" "net.whatsapp.WhatsAppSMB" "org.whispersystems.signal"
//   "ph.telegra.Telegraph" "pinterest" "ru.yandex.ytaxi" "tv.twitch"
// compares against
//   !== 0 === "TypeError" in "DataTransfer"
// decides on
//   h_s97_fn2()
//   fn99()
//   fn142: !((v957 = arg822.cancel) == null)
//   fn99: !("DataTransfer" in window)
//   fn99: v756 instanceof Error && v756.name === "TypeError"
//   visibilitychange: !(v869 || v868)
//   visibilitychange: !v869 && v868
//   h_s97_fn: v598 !== 0
//
// 3 owned helpers inlined below.
// shared with other collectors, see agent.clean.js:
//   asUint8Array:6496 crc32OfBytes:4943 fn103:5670 fn142:7227 fn158:8266 fn48:3370 fn66:3854
//   fn99:5449 resolveNameByHash:7015 stringToBytes:7901 visibilitychange:6423

// agent.clean.js:1562
async function sig_s97_dataTransfer() {
  return await fn142(fn66(500, { s: -2, v: null }), async () => {
    if (h_s97_fn2()) {
      if (fn99()) {
        return { s: 0, v: await h_s97_fn3() };
      }
      return { s: -1, v: null };
    }
    return { s: -3, v: null };
  });
}

// agent.clean.js:4130
function h_s97_fn(arg515) {
  return new Promise((arg516) => {
    const v597 = "/private/var/mobile/Media/PhotoData/external/" + arg515 + "/1";
    try {
      const [, v598, v599] = fn103(v597);
      if (v598 !== 0) {
        return void arg516(v598);
      }
      v599.getParent(
        () => arg516(0),
        () => arg516(-1),
      );
    } catch (v600) {
      arg516(-2);
    }
  });
}

// agent.clean.js:6655
function h_s97_fn2() {
  return [
    "br.gov.meugovbr",
    "co.visualsupply.cam",
    "com.airbnb.app",
    "com.alipay.iphoneclient",
    "com.apple.MobileSMS",
    "com.apple.Preferences",
    "com.apple.ScreenshotServicesService",
    "com.apple.mediaanalysisd",
    "com.apple.mobilephone",
    "com.atebits.Tweetie2",
    "com.badoo.Badoo",
    "com.burbn.barcelona",
    "com.burbn.instagram",
    "com.canva.canvaeditor",
    "com.cardify.tinder",
    "com.einnovation.temu",
    "com.facebook.Facebook",
    "com.facebook.Messenger",
    "com.google.Drive",
    "com.google.Gmail",
    "com.google.GoogleMobile",
    "com.google.Maps.WatchKitApp",
    "com.google.Translate",
    "com.google.chrome.ios",
    "com.google.ios.youtube",
    "com.google.photos",
    "com.grabtaxi.iphone",
    "com.grubhub.search",
    "com.hammerandchisel.discord",
    "com.iwilab.KakaoTalk",
    "com.lemon.lvoverseas",
    "com.linkedin.LinkedIn",
    "com.microsoft.skype.teams",
    "com.moxco.bumble",
    "com.openai.chat",
    "com.reddit.Reddit",
    "com.revolut.revolut",
    "com.ss.iphone.ugc.Ame",
    "com.ss.iphone.ugc.Aweme",
    "com.strava.stravaride",
    "com.tencent.xin",
    "com.tenten.app",
    "com.tinyspeck.chatlyio",
    "com.toyopagroup.picaboo",
    "com.ubercab.UberEats",
    "com.viber",
    "com.vk.vkclient",
    "com.woltapp.wolt",
    "com.zhiliaoapp.musically",
    "doordash.DoorDashConsumer",
    "ee.mtakso.client",
    "jp.naver.line",
    "net.whatsapp.WhatsApp",
    "net.whatsapp.WhatsAppSMB",
    "org.whispersystems.signal",
    "ph.telegra.Telegraph",
    "pinterest",
    "ru.yandex.ytaxi",
    "tv.twitch",
  ];
}

// agent.clean.js:8753
async function h_s97_fn3() {
  const v1094 = h_s97_fn2(),
    v1095 = await Promise.all(v1094.map(h_s97_fn)),
    v1096 = {};
  v1094.forEach((arg964, arg965) => {
    const v1097 = fn48(arg964).toString(16);
    v1096[v1097] = v1095[arg965];
  });
  return v1096;
}