Cite as
Addai, D., SectraTEK Lab (2026). Samsung recovery and reset trail. LAB-0001, version 1.1. https://lab.sectratek.com/research/lab-0001/
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/historyandefs/recovery/extra_history. Copies of recent runs may also sit incache/recovery. - Each run has a two-letter code. A factory reset confirmed in Settings appears as
--wipe_datawith--reason=MasterClearConfirmand a--requested_time=. The same code inextra_historyshows/data,/cacheand/metadatabeing formatted. - A region change after a SIM swap is logged as
--just_exitwith[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.
- t0Factory resetJe
- t0 + 3 h 02 m (est.)SIM region changeeW
- t0 + 3 h 25 mFactory resetMt
- t0 + 4 d 01 h (est.)SIM region changeeZ
- 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.
SIM region change eW
- Command
--just_exit- Reason
[SIMBasedChangeCSC] XAA -> TMB- Region change
- XAA to TMB
- Run code
eW- Recovery clock, as printed
1970/01/01 04:39:17- Storage formatted
- None
- Time basis
- Estimate, anchored to Je
- What this entry shows
- Inserting a SIM from another carrier made the phone switch its region software and reboot through recovery. Nothing was formatted. The time is an estimate anchored to Je.
Factory reset Mt
- Command
--wipe_data- Reason
MasterClearConfirm- Requested time
- t0 + 3 h 25 m (real wall clock)
- Run code
Mt- Recovery clock, as printed
1970/01/01 05:02:53- Storage formatted
- /data /cache /metadata
- Time basis
- Requested time written in the entry
- What this entry shows
- A second confirmed factory reset. The recovery clock has moved by 3 h 25 m 32 s since Je, which agrees with the gap between the two requested times. That agreement is the basis for the estimates.
SIM region change eZ
- Command
--just_exit- Reason
[SIMBasedChangeCSC] TMB -> VZW- Region change
- TMB to VZW
- Run code
eZ- Recovery clock, as printed
1970/01/05 02:57:58- Storage formatted
- None
- Time basis
- Estimate, anchored to Mt
- What this entry shows
- A second region change. The recovery clock is 3 d 21 h 55 m 05 s after Mt, so the estimate is Mt's requested time plus that gap.
SIM region change Hv
- Command
--just_exit- Reason
[SIMBasedChangeCSC] VZW -> another region code- Region change
- VZW to another region code
- Run code
Hv- Recovery clock, as printed
1970/01/07 19:34:31- Storage formatted
- None
- Time basis
- Estimate, anchored to Mt
- What this entry shows
- A third region change, to another region code. Same method: the estimate is anchored to Mt, and carries the same limits.
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
| Run code | Type | Command | Detail | Recovery clock | Formatted | Time from t0 |
|---|---|---|---|---|---|---|
Je | Factory reset | --wipe_data | Confirmed in Settings | 1970/01/01 01:37:21 | /data /cache /metadata | t0 (requested) |
eW | SIM region change | --just_exit | XAA to TMB | 1970/01/01 04:39:17 | None | t0 + 3 h 02 m (estimate) |
Mt | Factory reset | --wipe_data | Confirmed in Settings | 1970/01/01 05:02:53 | /data /cache /metadata | t0 + 3 h 25 m (requested) |
eZ | SIM region change | --just_exit | TMB to VZW | 1970/01/05 02:57:58 | None | t0 + 4 d 01 h (estimate) |
Hv | SIM region change | --just_exit | VZW to another region code | 1970/01/07 19:34:31 | None | t0 + 6 d 18 h (estimate) |
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 -
One code links the two files
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.
efs/recovery/history
+ [Je | 1970/01/01 01:37:21 | FIRMWARE] - --wipe_data --requested_time=<t0, wall clock> --reason=MasterClearConfirm NP -
+ [eW | 1970/01/01 04:39:17 | FIRMWARE] - --just_exit --reason=[SIMBasedChangeCSC] XAA -> TMB NP -
+ [Mt | 1970/01/01 05:02:53 | FIRMWARE] - --wipe_data --requested_time=<t0 + 3 h 25 m, wall clock> --reason=MasterClearConfirm NP -
+ [eZ | 1970/01/05 02:57:58 | FIRMWARE] - --just_exit --reason=[SIMBasedChangeCSC] TMB -> VZW NP -
+ [Hv | 1970/01/07 19:34:31 | FIRMWARE] - --just_exit --reason=[SIMBasedChangeCSC] VZW -> another region code NP -
efs/recovery/extra_history
[Je][S] format_volume : /data [Je][E] format_volume : /data [Je][S] format_volume : /cache [Je][E] format_volume : /cache [Je][S] format_volume : /metadata [Je][E] format_volume : /metadata
no lines under eW
[Mt][S] format_volume : /data [Mt][E] format_volume : /data [Mt][S] format_volume : /cache [Mt][E] format_volume : /cache [Mt][S] format_volume : /metadata [Mt][E] format_volume : /metadata
no lines under eZ
no lines under Hv
All five codes shown. Choose a code to follow it from one file to the other.
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.
| Run | Recovery clock | Anchor | Clock gap from anchor | Time from t0 |
|---|---|---|---|---|
Je | 1970/01/01 01:37:21 | own requested time | - | t0 (requested) |
eW | 1970/01/01 04:39:17 | Je | 3 h 01 m 56 s | t0 + 3 h 02 m (estimate) |
Mt | 1970/01/01 05:02:53 | own requested time | - | t0 + 3 h 25 m (requested) |
eZ | 1970/01/05 02:57:58 | Mt | 3 d 21 h 55 m 05 s | t0 + 4 d 01 h (estimate) |
Hv | 1970/01/07 19:34:31 | Mt | 6 d 14 h 31 m 38 s | t0 + 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_propertieskeeps the last few boots asreboot,<epoch>orreboot,<sub>,<epoch>. We read it from both images (two and three entries) and from all seven bug reports. We found nofactory_resetentry in any real image or report we checked, so its absence tells you nothing. - Setup flags.
user_setup_completeanddevice_provisionedchanged 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_historyandlast_extra_historyexist 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.
| Indicator | Full file system | Bug report | Strength | What 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. | Strong | A 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 code | efs/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. | Strong | The 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. | Moderate | The 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. | Weak | Copies 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. | Weak | The 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 alone | Whether setup was complete at capture, and past values. Changed 1 to 0 to 1 around system updates, so a change is not a reset. |
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
- On a test phone you own, write down the time. In Settings, start a factory reset and confirm it.
- After setup, insert a SIM from another carrier and let the phone restart. Write down the time of each step.
- Take a full file system extraction and open
efs/recovery/historyandefs/recovery/extra_history. Look incache/recoverytoo. - List the entries oldest first. For each, read the command and the reason. Look the code up in
extra_history. - For a time, use
--requested_time=when it is there. Otherwise anchor an estimate to the nearest earlier wipe and label it. - 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.
- Download lab-0001-timeline.json
lab-0001-timeline.jsonJSONThe five runs of Figure 1 with every attribute, as offsets from t0.
2e0b39763d1515517da039d5dd0d3d801cb5111a39628511666efff0a5d8247c - Download lab-0001-history-entries.csv
lab-0001-history-entries.csvCSVOne row per history entry: code, command, reason, clock as printed, requested or estimated offset.
1c3bbb6c2993a8fd4e4d4af94cf05a5ad6d3f8ba6274a3e8a19b93e2ece868c0 - Download lab-0001-extra-history-lines.csv
lab-0001-extra-history-lines.csvCSVThe extra_history lines for the same codes (state S or E, text).
aa9e2c7fbc28a79c9f5c5a410f45c42ef20d2278367ead651d494bdc21c787c4 - Download lab-0001-indicators.csv
lab-0001-indicators.csvCSVThe table of Figure 3, one row per indicator.
05c27b1226f160ba485c3b1fac1a744d67f796c32b7d81933dd1f4740e88d8a1
References
- Hickman, J. (The Binary Hick). Wipeout! Detecting Android Factory Resets. Blog post, 19 August 2021. thebinaryhick.blog
- Hickman, J. Wipeout! Detecting Android Factory Resets. DFIR Review, 2022 (a later publication of the same work). dfir.pubpub.org/pub/xmjxofpd
- Forensafe. Samsung Wipe History. Blog post, 20 December 2024. forensafe.com
- Cellphone Forensics (Data Rescue Labs). When Was This Samsung Galaxy Last Factory Reset? Blog post, 19 May 2026. cellphoneforensics.ca
- 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
- 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 | Date | Change |
|---|---|---|
| 1.0 | 2026-10-27 | First publication. |
| 1.1 | 2026-11-07 | Open-source status updated: the readers are merged in ALEAPP (#1834 and #1835). |
| 1.1 | 2026-11-07 | References 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.