Post

iPhone's "forgotten" Wi-Fi networks

Do you remember that Wi-Fi network you removed from your iPhone's Known Networks? Your iPhone does.

iPhone's "forgotten" Wi-Fi networks

When investigation the scanning of Wi-Fi networks by an iPhone I acquired a Partially Restored Filesystem Backup to search for traces of scanned Wi-Fi networks. While searching the data for the SSID of a test network, I found a reference in a file named removed networks. To find out more about this file, I examined it further.

Logging

With UFADE I created another Partially Restored Filesystem Backup (PRFS) from the iPhone 12 running iOS 26.1. From this backup I extracted the file com.apple.wifi.removed-networks.plist from \private\var\mobile\Library\Preferences\. Inside this .plist I found several SSIDs of networks I had previously connected my iPhone to and later removed from the Known Networks of the iPhone.

Script

Using the iOS_sysdiagnose_forensic_scripts by cheeky4n6monkey as reference, I created a Python script to parse the com.apple.wifi.removed-networks.plist file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#! /usr/bin/env python
import sys
from optparse import OptionParser
import plistlib


if sys.version_info[0] < 3:
    print("Must be using Python 3! Exiting.")
    exit(-1)

usage = "\n%prog -i inputfile\n"

parser = OptionParser(usage=usage)
parser.add_option("-i", dest="inputfile", 
                  action="store", type="string",
                  help="\private\var\mobile\Library\Preferences\com.apple.wifi.removed-networks.plist")             
(options, args) = parser.parse_args()

if len(sys.argv) == 1:
    parser.print_help()
    exit(-1)

with open(options.inputfile, 'rb', ) as fp:
    pl = plistlib.load(fp, dict_type=dict)
    if pl.items():
        for key, list1 in pl.items():
            print("==================================")
            print(key)
            for item, list1 in pl[key].items():
                if item == "CaptiveProfile":
                    print("CaptiveProfile:")
                    for item2 in list1:
                        print("  - " + item2 + ": " + str(list1[item2]))
                else:
                    print(item + " : " + str(list1))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
> python3 removed-wifi-plist.py -i com.apple.wifi.removed-networks.plist

=============================
wifi.network.ssid.TestingNetwork
SSID : b'TestingNetwork'
SupportedSecurityTypes : WPA2 Personal
CaptiveProfile:
  - CaptiveNetwork: False
RemovedAt : 2025-09-26 09:49:58.266271
=============================
wifi.network.ssid.ANewNetwork
RemovedAt : 2025-09-29 10:50:31.770377
SupportedSecurityTypes : WPA2 Personal
CaptiveProfile:
  - CaptiveNetwork: False
SSID : b'ANewNetwork'
=============================
wifi.network.ssid.SomeHotelWiFi
SSID : b'SomeHotelWiFi'
SupportedSecurityTypes : OWE Transition
RemovedAt : 2025-09-19 08:52:01.437784
CaptiveProfile:
  - WhitelistedCaptiveNetworkProbeDate: 2022-12-01 10:11:54.910794
  - CaptiveNetwork: False
  - IsWhitelistedCaptiveNetwork: False
  - NetworkWasCaptive: True
  - CaptiveWebSheetLoginDate: 2022-11-21 16:39:56.171760
=============================
[...]

The networks and timestamps match networks the iPhone was once connected to.

Testing

To confirm this, I removed several other Wi Fi networks, rebooted the iPhone and created a new Partially Restored Filesystem Backup and parsed the file again.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> python3 removed-wifi-plist.py -i com.apple.wifi.removed-networks.plist

[...]
=============================
wifi.network.ssid.Ziggo1234567890
SSID : b'Ziggo1234567890'
SupportedSecurityTypes : WPA Personal
RemovedAt : 2025-12-03 16:44:52.159261
=============================
wifi.network.ssid.Restaurant_Guest
SSID : b'Restaurant_Guest'
SupportedSecurityTypes : WPA2 Personal
CaptiveProfile:
  - CaptiveNetwork: False
RemovedAt : 2025-12-01 18:18:35.246726
=============================
[...]

The timestamps are listed in UTC and match the moments I removed these networks.

Finally, I removed another Wi Fi network and created a new Partially Restored Filesystem Backup almost immediately, without rebooting the device. The network appeared in the plist:

1
2
3
4
5
6
7
8
9
> python3 removed-wifi-plist.py -i com.apple.wifi.removed-networks.plist

[...]
=============================
wifi.network.ssid.Ziggo92742
SSID : b'Ziggo92742'
SupportedSecurityTypes : WPA2 Personal
RemovedAt : 2025-12-05 18:12:49.985504
=============================

Conclusion

This plist is a valuable source for identifying Wi Fi networks that have been removed. Even when a network is deleted from Known Networks, the SSID remains stored in this file. While I can confirm the timestamps listed in the testing paragraph, it is unclear how long this plist retains entries or whether the timestamps remain accurate over longer periods. I am almost certain that some networks were removed earlier than the dates currently listed, such as the SomeHotelWiFi entry. Further testing is needed to confirm this.

This post is licensed under CC BY 4.0 by the author.