Research / LAB-0001

Samsung recovery and reset trail

A Samsung phone writes a log of every recovery run. A factory reset leaves a recognisable entry there, linked to a second file by a two-letter code. This article describes the trail, where it lives in a full file system extraction and in a bug report, and what it cannot tell you.

  • Daniel Addai, SectraTEK Lab
  • Version 1.1
  • First published 2026-10-27; this version 2026-11-07
  • CC BY 4.0
  • Early research

Cite as

Addai, D., SectraTEK Lab (2026). Samsung recovery and reset trail. LAB-0001, version 1.1. https://lab.sectratek.com/research/lab-0001/

Citation guide

Methodology note

Drafted with AI assistance and reviewed by the author before publication.

Summary

  • Samsung phones keep a log of every recovery run in two files, efs/recovery/history and efs/recovery/extra_history. Copies of recent runs may also sit in cache/recovery.
  • Each run has a two-letter code. A factory reset confirmed in Settings appears as --wipe_data with --reason=MasterClearConfirm and a --requested_time=. The same code in extra_history shows /data, /cache and /metadata being formatted.
  • A region change after a SIM swap is logged as --just_exit with [SIMBasedChangeCSC]. It is a run through recovery, not a reset.
  • After a wipe the recovery clock can read 1970. On the one device we checked, the gap between two wipe entries matched the gap between their requested times to within a second, so later entries could be given an estimated time. On a second phone with two wipes the same check failed by more than a year, so treat any estimate as unreliable.
  • In our research collection the Samsung efs history files were only in full file system extractions. In seven bug reports, recovery files were present in three, as copies in cache/recovery, and none showed a wipe.

This is early research. Treat each item as an indicator that is consistent with a reset, and read the limits before you rely on it.

Background

Android has no single reset date. Earlier public work looked at how a factory reset can be recognised after the fact. It points to the Samsung recovery history file we describe here [1] [3] [4], and to a boot reason of reboot,factory_reset kept in persistent_properties, where only the last three boots were found to survive on the Pixel tested [1]. The same author published the work again in DFIR Review [2]. An academic study from 2014 asked a different question, what data a factory reset leaves behind [5].

We wanted to know whether the layout is unchanged on a current Samsung build on Android 16, how the records link to each other, whether a time can be recovered when the recovery clock cannot be trusted, and which of these traces survive into a bug report, which is a far more common thing to be handed than a full file system extraction.

Method

We read the recovery files, the boot reason history, the setup flags and the settings of full file system extractions of Android phones, among them a phone whose recovery history holds two wipe requests. No independent record of what was done to that phone is used here, so the entries are read as the device recorded them. Entries were matched between files by run code and counted twice by independent routes. For the bug report side we read seven reports from our research collection and checked which of the same artifacts they hold.

Everything on this page is shown as abstractions: offsets from t0, no model numbers, no real dates. The two phones differ in size of history (five and three history entries). The timeline in Figure 1 comes from the larger one.

Findings

A reset in the recovery log

Every recovery run is written to efs/recovery/history, oldest first. The header carries a two-letter code, the recovery program's own date, and the firmware. The lines below it are the options recovery was started with. Figure 1 shows five runs from one phone.

  • Factory reset
  • SIM region change
  1. t0Factory resetJe
  2. t0 + 3 h 02 m (est.)SIM region changeeW
  3. t0 + 3 h 25 mFactory resetMt
  4. t0 + 4 d 01 h (est.)SIM region changeeZ
  5. t0 + 6 d 18 h (est.)SIM region changeHv

Factory reset Je

Command
--wipe_data
Reason
MasterClearConfirm
Requested time
t0 (real wall clock)
Run code
Je
Recovery clock, as printed
1970/01/01 01:37:21
Storage formatted
/data /cache /metadata
Time basis
Requested time written in the entry
What this entry shows
A factory reset confirmed in Settings. Its requested time is a real clock time, so it anchors the estimates for the entries that follow. The same code in extra_history shows three volumes formatted.

See its records in Figure 2

Select a node to read its attributes. Spacing is not to scale. t0 is the requested time of the first reset. Times marked est. are estimates (see Time).

Show this figure as a table
Recovery runs in the order written, with the same attributes as the timeline
Run codeTypeCommandDetailRecovery clockFormattedTime from t0
JeFactory reset--wipe_dataConfirmed in Settings1970/01/01 01:37:21/data /cache /metadatat0 (requested)
eWSIM region change--just_exitXAA to TMB1970/01/01 04:39:17Nonet0 + 3 h 02 m (estimate)
MtFactory reset--wipe_dataConfirmed in Settings1970/01/01 05:02:53/data /cache /metadatat0 + 3 h 25 m (requested)
eZSIM region change--just_exitTMB to VZW1970/01/05 02:57:58Nonet0 + 4 d 01 h (estimate)
HvSIM region change--just_exitVZW to another region code1970/01/07 19:34:31Nonet0 + 6 d 18 h (estimate)
Figure 1Five recovery runs on one phone, oldest first: two factory resets and three SIM region changes. Switch to the recovery clock to see why the entries cannot be dated directly. Source: efs/recovery/history and extra_history from one full file system extraction, re-expressed as offsets from t0 (synthetic offsets, no real dates).

A factory reset confirmed in Settings shows --wipe_data and --reason=MasterClearConfirm, plus --requested_time=, the wall-clock time the request was made. The three formatted volumes are in the second file.

+ [Je | <recovery clock> | FIRMWARE] -
--wipe_data
--requested_time=<t0, wall clock>
--reason=MasterClearConfirm
NP -

The file efs/recovery/extra_history repeats the run code on each line, followed by [S] or [E] for the start and end of a step, as in [Je][S] format_volume : /data. For a wipe, the code in the history entry also appears on lines that format /data, /cache and /metadata. That link is what separates a real wipe from a run that only carries the option. Figure 2 shows the link for all five runs.

Run code

All five codes shown. Choose a code to follow it from one file to the other.

Figure 2The two files are linked by the two-letter code. A wipe entry in history has format lines under the same code in extra_history. A SIM region change has none. Source: synthetic rewrite of the file layout; other lines in the real files are left out.

SIM region changes are not resets

When a SIM from another carrier is inserted, many Samsung phones switch their region and carrier software (CSC) and reboot into recovery. The run is logged with --just_exit and a reason such as [SIMBasedChangeCSC] XAA -> TMB. In our images, XAA is the unbranded, unlocked US software, TMB is T-Mobile US and VZW is Verizon. A fourth code appears as another region code. No format lines follow, which is the difference from a wipe.

A region change matters for a reset question in two ways. It must not be counted as a reset, and it can still be dated, because it sits in the same log.

Time: the recovery clock and an estimate

The date in a history header is the recovery program's own clock. After a wipe it can read 1970 (and 2010 in one bug report we looked at), so on its own it dates nothing. --requested_time= is different: the program that asked for the reset wrote it, and it is a real wall-clock time.

On the one device we could check, the gap between the recovery clocks of two wipe entries matched the gap between their requested times to within a second. The recovery clock was wrong in absolute terms and right in elapsed terms on that device. A cautious rule would give a later entry an estimated time by anchoring it to the nearest earlier wipe, using the anchor's requested time plus the clock gap. We then tested a second phone with two wipes: the clock gap and the requested-time gap differed by 526 days. The rule is therefore not safe to apply without a check against the requested times, and we do not recommend using it on its own.

Table 1. Worked example with synthetic offsets
RunRecovery clockAnchorClock gap from anchorTime from t0
Je1970/01/01 01:37:21own requested time-t0 (requested)
eW1970/01/01 04:39:17Je3 h 01 m 56 st0 + 3 h 02 m (estimate)
Mt1970/01/01 05:02:53own requested time-t0 + 3 h 25 m (requested)
eZ1970/01/05 02:57:58Mt3 d 21 h 55 m 05 st0 + 4 d 01 h (estimate)
Hv1970/01/07 19:34:31Mt6 d 14 h 31 m 38 st0 + 6 d 18 h (estimate)

What the estimate does not prove

It was verified on one device only. It does not account for the delay between the request and the start of recovery. Always label it as an estimate, and give the anchor.

Other artifacts we examined

  • Boot reason history. persistent_properties keeps the last few boots as reboot,<epoch> or reboot,<sub>,<epoch>. We read it from both images (two and three entries) and from all seven bug reports. We found no factory_reset entry in any real image or report we checked, so its absence tells you nothing.
  • Setup flags. user_setup_complete and device_provisioned changed from 1 to 0 to 1 around system updates. A change in these flags alone is not a reset indicator.
  • Settings storage. On Android 16 the settings are Android Binary XML, so a plain text search will not find them. A parser must decode them first.
  • cache/recovery copies. The names last_history, last_all_history and last_extra_history exist for recent runs. In both full file system images we examined the folder was empty.

Where each indicator lives

The same trail looks different in a full file system extraction and in a bug report. The Samsung efs history was only in the full file system extraction. In seven bug reports, recovery files were present in three and none showed a wipe. The boot reason history was present in all seven.

Where each reset-related indicator lives, in a full file system extraction and in a bug report, with its strength
IndicatorFull file systemBug reportStrengthWhat it shows, and its limit
Recovery run with  and efs/recovery/history. Read from both images examined.Only if recovery copies were collected. Recovery files were in 3 of 7 reports; none showed a wipe.StrongA factory reset was confirmed in Settings and recovery was started for it. Does not show that the reset finished, or who confirmed it.
Format lines under the same run codeefs/recovery/extra_history. Same code as the history entry.Only in the recovery copies (last_extra_history), if collected.Strong/data, /cache and /metadata were formatted by that run. The code links the two files; it is not a time.
Inside the history entry of a wipe.Only inside a recovery copy, if collected.StrongThe wall-clock time the reset was requested. The time of the request, not of the first boot after the reset.
SIM region change (, )efs/recovery/history.Only inside a recovery copy, if collected.ModerateThe phone switched region or carrier software after a SIM change and rebooted through recovery. Not a reset. Nothing is formatted.
cache/recovery copies (, , )Folder was empty in both images examined.Recovery files in 3 of 7 reports; none showed a wipe.WeakCopies of recent recovery runs, when present. Often empty. An empty folder says nothing about earlier runs.
Boot reason history (persistent_properties)persistent_properties. Read from both images; two and three entries.In all 7 reports, as a property history.WeakThe last few boots, each with a reason and a time (reboot,epoch or reboot,sub,epoch). Only the last few boots survive. No factory_reset entry in any real image or report we checked.
Setup flags (, )Settings files. Android Binary XML on Android 16.Settings dump and its history.Not an indicator aloneWhether setup was complete at capture, and past values. Changed 1 to 0 to 1 around system updates, so a change is not a reset.
Figure 3Where each indicator lives. Strength is our reading of how far an indicator, when present, supports the statement that a reset was requested. It says nothing about what a missing indicator means. Source: two full file system images and seven bug reports from our research collection. Counts are of this sample, not a statistic.

What this does not prove

Read these before you report a finding

  • A missing entry does not prove that no reset happened. Entries roll off, volumes can be formatted, and the file may not have been collected.
  • An entry does not say who did it or why.
  • An entry shows that recovery was started with these options. It does not show that the work finished.
  • Estimated times held on one device and failed on a second, and are never a time the device recorded.
  • Two full file system images and seven bug reports are a small sample from one manufacturer. Other builds may differ.

Reproduce

  1. On a test phone you own, write down the time. In Settings, start a factory reset and confirm it.
  2. After setup, insert a SIM from another carrier and let the phone restart. Write down the time of each step.
  3. Take a full file system extraction and open efs/recovery/history and efs/recovery/extra_history. Look in cache/recovery too.
  4. List the entries oldest first. For each, read the command and the reason. Look the code up in extra_history.
  5. For a time, use --requested_time= when it is there. Otherwise anchor an estimate to the nearest earlier wipe and label it.
  6. Write down what is missing and why that does not prove anything.

For a bug report, generate one on the device and look for the same files and for the boot reason history. Expect the recovery files to be absent.

Open-source parsers

Merged Readers for these artifacts are merged in the open-source parser ALEAPP: recovery history entries, including the copy of the log inside a bug report kept in an extraction (ALEAPP #1834), and boot reason history and setup flags (ALEAPP #1835). The files are plain text, so you do not need them to repeat this work. See Open Source for status.

Appendix: downloads

Small synthetic files that reproduce the figures. They contain offsets from t0 and no real dates or identifiers. Licence: CC BY 4.0.

  • lab-0001-timeline.json JSON

    The five runs of Figure 1 with every attribute, as offsets from t0.

    3.3 KB. SHA-256:

    2e0b39763d1515517da039d5dd0d3d801cb5111a39628511666efff0a5d8247c
    Download lab-0001-timeline.json
  • lab-0001-history-entries.csv CSV

    One row per history entry: code, command, reason, clock as printed, requested or estimated offset.

    573 bytes. SHA-256:

    1c3bbb6c2993a8fd4e4d4af94cf05a5ad6d3f8ba6274a3e8a19b93e2ece868c0
    Download lab-0001-history-entries.csv
  • lab-0001-extra-history-lines.csv CSV

    The extra_history lines for the same codes (state S or E, text).

    364 bytes. SHA-256:

    aa9e2c7fbc28a79c9f5c5a410f45c42ef20d2278367ead651d494bdc21c787c4
    Download lab-0001-extra-history-lines.csv
  • lab-0001-indicators.csv CSV

    The table of Figure 3, one row per indicator.

    2.1 KB. SHA-256:

    05c27b1226f160ba485c3b1fac1a744d67f796c32b7d81933dd1f4740e88d8a1
    Download lab-0001-indicators.csv

References

  1. Hickman, J. (The Binary Hick). Wipeout! Detecting Android Factory Resets. Blog post, 19 August 2021. thebinaryhick.blog
  2. Hickman, J. Wipeout! Detecting Android Factory Resets. DFIR Review, 2022 (a later publication of the same work). dfir.pubpub.org/pub/xmjxofpd
  3. Forensafe. Samsung Wipe History. Blog post, 20 December 2024. forensafe.com
  4. Cellphone Forensics (Data Rescue Labs). When Was This Samsung Galaxy Last Factory Reset? Blog post, 19 May 2026. cellphoneforensics.ca
  5. Schwamm, R. and Rowe, N. C. Effects of the Factory Reset on Mobile Devices. Proceedings of the 6th International Conference on Digital Forensics and Computer Crime (ICDF2C), 2014. faculty.nps.edu
  6. ALEAPP, Android Logs Events And Protobuf Parser (open source). github.com/abrignoni/ALEAPP

Titles, authors and dates of these sources were checked against each page on 7 November 2026.

Version history and corrections

Version history
VersionDateChange
1.02026-10-27First publication.
1.12026-11-07Open-source status updated: the readers are merged in ALEAPP (#1834 and #1835).
1.12026-11-07References re-checked: titles, authors and dates were checked against each page on 7 November 2026.

Corrections log

No corrections have been published for this article. Corrections to any article are listed on Corrections, with the version they apply to.