Giter Site home page Giter Site logo

ileapp's Introduction

iLEAPP

iOS Logs, Events, And Plists Parser
Details in blog post here: https://abrignoni.blogspot.com/2019/12/ileapp-ios-logs-events-and-properties.html

Supports iOS/iPadOS 11, 12, 13 and 14, 15, 16. Select parsing directly from a compressed .tar/.zip file, or a decompressed directory, or an iTunes/Finder backup folder.

Features

Parses:
⚙️ Mobile Installation Logs
⚙️ iOS 12+ Notifications
⚙️ Build Info (iOS version, etc.)
⚙️ Wireless cellular service info (IMEI, number, etc.)
⚙️ Screen icons list by screen and in grid order.
⚙️ ApplicationState.db support for app bundle ID to data container GUID correlation.
⚙️ User and computer names that the iOS device connected to. Function updated by Jack Farley (@JackFarley248, http://farleyforensics.com/).
etc...

Requirements

Python 3.9 to latest version (older versions of 3.x will also work with the exception of one or two modules) If on macOS (Intel) make sure Xcode is installed and have command line tools updated to be able to use Python 3.11.

Dependencies

Dependencies for your python environment are listed in requirements.txt. Install them using the below command. Ensure the py part is correct for your environment, eg py, python, or python3, etc.

py -m pip install -r requirements.txt
or
pip3 install -r requirements.txt

To run on Linux, you will also need to install tkinter separately like so:

sudo apt-get install python3-tk

To install on Windows follow the guide, courtesy of Hexordia, here: https://www.hexordia.com/s/ILEAPP-Walkthrough.pdf

Windows installation and walkthrough video, by Hexordia, here: https://www.youtube.com/watch?v=7qvVFfBM2NU

Compile to executable

To compile to an executable so you can run this on a system without python installed. If using Python 3.10 and above delete the arguments from the following terminal commands.

Windows OS

To create ileapp.exe, run:

pyinstaller --onefile ileapp.spec

To create ileappGUI.exe, run:

pyinstaller --onefile --noconsole ileappGUI.spec

macOS

To create ileapp, run:

pyinstaller --onefile ileapp_macOS.spec

To create ileappGUI.app, run:

pyinstaller --onefile --windowed ileappGUI_macOS.spec

Usage

CLI

$ python ileapp.py -t <zip | tar | fs | gz> -i <path_to_extraction> -o <path_for_report_output>

GUI

$ python ileappGUI.py 

Help

$ python ileapp.py --help

Contributing artifact plugins

Each plugin is a Python source file which should be added to the scripts/artifacts folder which will be loaded dynamically each time ILEAPP is run.

The plugin source file must contain a dictionary named __artifacts_v2__ at the very beginning of the module, which defines the artifacts that the plugin processes. The keys in the __artifacts_v2__ dictionary should be IDs for the artifact(s) which must be unique within ILEAPP. The values should be dictionaries containing the following keys:

  • name: The name of the artifact as a string.
  • description: A description of the artifact as a string.
  • author: The author of the plugin as a string.
  • version: The version of the artifact as a string.
  • date: The date of the last update to the artifact as a string.
  • requirements: Any requirements for processing the artifact as a string.
  • category: The category of the artifact as a string.
  • notes: Any additional notes as a string.
  • paths: A tuple of strings containing glob search patterns to match the path of the data that the plugin expects for the artifact.
  • function: The name of the function which is the entry point for the artifact's processing as a string.

For example:

__artifacts_v2__ = {
    "cool_artifact_1": {
        "name": "Cool Artifact 1",
        "description": "Extracts cool data from database files",
        "author": "@username",
        "version": "0.1",
        "date": "2022-10-25",
        "requirements": "none",
        "category": "Really cool artifacts",
        "notes": "",
        "paths": ('*/com.android.cooldata/databases/database*.db',),
        "function": "get_cool_data1"
    },
    "cool_artifact_2": {
        "name": "Cool Artifact 2",
        "description": "Extracts cool data from XML files",
        "author": "@username",
        "version": "0.1",
        "date": "2022-10-25",
        "requirements": "none",
        "category": "Really cool artifacts",
        "notes": "",
        "paths": ('*/com.android.cooldata/files/cool.xml',),
        "function": "get_cool_data2"
    }
}

The functions referenced as entry points in the __artifacts__ dictionary must take the following arguments:

  • An iterable of the files found which are to be processed (as strings)
  • The path of ILEAPP's output folder(as a string)
  • The seeker (of type FileSeekerBase) which found the files
  • A Boolean value indicating whether or not the plugin is expected to wrap text

For example:

def get_cool_data1(files_found, report_folder, seeker, wrap_text):
    pass  # do processing here

Plugins are generally expected to provide output in ILEAPP's HTML output format, TSV, and optionally submit records to the timeline. Functions for generating this output can be found in the artifact_report and ilapfuncs modules. At a high level, an example might resemble:

__artifacts_v2__ = {
    "cool_artifact_1": {
        "name": "Cool Artifact 1",
        "description": "Extracts cool data from database files",
        "author": "@username",  # Replace with the actual author's username or name
        "version": "0.1",  # Version number
        "date": "2022-10-25",  # Date of the latest version
        "requirements": "none",
        "category": "Really cool artifacts",
        "notes": "",
        "paths": ('*/com.android.cooldata/databases/database*.db',),
        "function": "get_cool_data1"
    }
}

import datetime
from scripts.artifact_report import ArtifactHtmlReport
import scripts.ilapfuncs

def get_cool_data1(files_found, report_folder, seeker, wrap_text):
    # let's pretend we actually got this data from somewhere:
    rows = [
     (datetime.datetime.now(), "Cool data col 1, value 1", "Cool data col 1, value 2", "Cool data col 1, value 3"),
     (datetime.datetime.now(), "Cool data col 2, value 1", "Cool data col 2, value 2", "Cool data col 2, value 3"),
    ]
    
    headers = ["Timestamp", "Data 1", "Data 2", "Data 3"]
    
    # HTML output:
    report = ArtifactHtmlReport("Cool stuff")
    report_name = "Cool DFIR Data"
    report.start_artifact_report(report_folder, report_name)
    report.add_script()
    report.write_artifact_data_table(headers, rows, files_found[0])  # assuming only the first file was processed
    report.end_artifact_report()
    
    # TSV output:
    scripts.ilapfuncs.tsv(report_folder, headers, rows, report_name, files_found[0])  # assuming first file only
    
    # Timeline:
    scripts.ilapfuncs.timeline(report_folder, report_name, rows, headers)

Acknowledgements

This tool is the result of a collaborative effort of many people in the DFIR community.

ileapp's People

Contributors

abrignoni avatar agamdua avatar any333 avatar bconstanzo avatar cf-eglendye avatar charpy4n6 avatar dabeersboys avatar djangofaiola avatar edward-greybeard avatar flamusdiu avatar gforce4n6 avatar jameshabben avatar jfarley248 avatar jijames avatar johann-plw avatar kefrer avatar krypterry avatar markmckinnon avatar mastenp avatar metadataforensics avatar mwilliamson-magnet avatar scottkjr3347 avatar snoop168 avatar sqlmcgee avatar stark4n6 avatar theatropos4n6 avatar thisislola avatar threeplanetssoftware avatar tobraha avatar ydkhatri avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ileapp's Issues

Phase home screen

Unlike previous issues, you already have a sample. Also do app icons like Android's.

Keyboard lexicon bug

Got an error when running with type fs on windows.

Keyboard Dynamic Lexicon [keyboardLexicon] artifact executing
Reading Keyboard Dynamic Lexicon artifact had errors!
Error was list index out of range
Exception Traceback: Traceback (most recent call last):
  File "C:\Github\iLEAPP\scripts\ilap_artifacts.py", line 261, in process_artifact
    method(files_found, report_folder, seeker)
  File "C:\Github\iLEAPP\scripts\artifacts\keyboardLexicon.py", line 26, in get_keyboardLexicon
    location_file_found = file_found.split("Keyboard/", 1)[1]
IndexError: list index out of range

Any plans to add spotlight db parser?

Hello,

I'm trying to recover some personal data from my iDevice and it looks like spotlight db has plenty of metadata, which can be used in recovery/investigation.
Spotlight_parser works good for me and it was written by one of iLEAPP contributors.

Thanks

Simple tool to generate artifact scripts

Is it possible you make a small tool to generate (x)LEAPP artifact skeletons via the input being a SQLite database, an XML file, a JSON, a CSV file, or a plist, and you pick the database tab and name each column if a database or csv is inserted, and if a xml/plist/json is inserted, the user will require to pick which path in the file to parse, then name each value they’d like to parse. The tool will also give the ability to do basic modifications to values (column or value) (assigning readable values to raw values (ex: status numbers) and timestamp phrasing), and when done you export the artifact, paste it into GitHub, do necessary modifications, and pull. This could make artifact creation much faster

Requirements failure

On a fresh install of Ubuntu with Python 3.10 installed. Clone iLEAPP main.

pip3 install -r requirements.txt

Resulted in:

ERROR: Could not find a version that satisfies the requirement python-magic-bin (from versions: none) ERROR: No matching distribution found for python-magic-bin

Package "python-magic" was installed via pip3. Seems to work instead of python-magic-bin.

iLEAPP fails if output dir is on a network share - sqlite3.OperationalError: database is locked

When setting the output directory to a network share (and using an archive as input) I get a lot of errors like this:

Safari Browser [safariHistory] artifact executing
Reading Safari Browser artifact had errors!
Error was database is locked
Exception Traceback: Traceback (most recent call last):
File "/home/user/Sources/iLEAPP/scripts/ilap_artifacts.py", line 359, in process_artifact
method(files_found, report_folder, seeker)
File "/home/user/Sources/iLEAPP/scripts/artifacts/safariHistory.py", line 58, in get_safariHistory
timeline(report_folder, tlactivity, data_list)
File "/home/user/Sources/iLEAPP/scripts/ilapfuncs.py", line 134, in timeline
cursor.execute('''PRAGMA journal_mode = WAL''')
sqlite3.OperationalError: database is locked

Sqlite has a known issue with database locking when the database is located on a network share (I have also seen this in my own projects)

Maybe you can catch the "sqlite3.OperationalError: database is locked" exception and inform the user that this may be a result of having output path on a network share,

or

use tempfile.TemporaryDirectory() to create the temporary directory. (It even comes with a context-manager that takes care of cleaning up afterwards). This way the temp dir will be created in the default system location for the user, but the result may still be created wherever the user chooses?

python-magic-bin not available for ARM Mac

pip installing requirements stopped with:

ERROR: Could not find a version that satisfies the requirement python-magic-bin==0.4.14 (from versions: none)
ERROR: No matching distribution found for python-magic-bin==0.4.14

I see that the spec does cater to ARM Mac:
python-magic==0.4.24; platform_system == "Linux"
python-magic-bin==0.4.14; platform_system == "Windows"
python-magic-bin==0.4.14; platform_system == "Darwin"
python-magic; platform_system == "Darwin" and platform_machine == "arm64"

So I've no idea why it still stopped with an error. Any idea please? Right now I just comment out the lines with python-magic-bin and it seems to work.

Feature requests

*Chrome tabs data and tab image cache
*Chrome recently closed
*Chrome bookmarks
*Chrome Famicons
*Chrome reading list
*GMail cache
*Google drive, docs, sheets, and slides downloaded data
*Jailbreak status
*Google login
*Minecraft World thumbnails
*Minecraft Text (signs, name tag, book, etc)

Bug in script output misidentifies the REGEX that hit for a file

When iLEAPP has a list of regular expressions, it correctly identifies the ones that have no files, but for every one that has files it mistakenly lists the last pattern. For example, based on this module:

`appleWifiPlist': ('Wifi Connections', ('**/com.apple.wifi.plist', '**/com.apple.wifi-networks.plist.backup', '**/com.apple.wifi.known-networks.plist', '**/com.apple.wifi-private-mac-networks.plist'))

You get the following output.

No files found for appleWifiPlist -> **/com.apple.wifi-networks.plist.backup

No files found for appleWifiPlist -> **/com.apple.wifi-private-mac-networks.plist

Files for **/com.apple.wifi-private-mac-networks.plist located at /home/notta/Library/Preferences/SystemConfiguration/com.apple.wifi.plist

Files for **/com.apple.wifi-private-mac-networks.plist located at /home/notta/private/var/preferences/SystemConfiguration/com.apple.wifi.plist

Files for **/com.apple.wifi-private-mac-networks.plist located at /home/notta/Library/Preferences/SystemConfiguration/com.apple.wifi.known-networks.plist

This is due to a bug in ileapp.py wherein the referenced variable artifact_search_regex is iterated over in the for loop, but referenced after it.

iLEAPP/ileapp.py

Lines 148 to 162 in 2657d4a

for artifact_search_regex in search_regexes:
found = seeker.search(artifact_search_regex)
if not found:
logfunc()
logfunc(f'No files found for {key} -> {artifact_search_regex}')
log.write(f'No files found for {key} -> {artifact_search_regex}<br><br>')
else:
files_found.extend(found)
if files_found:
logfunc()
process_artifact(files_found, key, artifact_pretty_name, seeker, out_params.report_folder_base)
for pathh in files_found:
if pathh.startswith('\\\\?\\'):
pathh = pathh[4:]
log.write(f'Files for {artifact_search_regex} located at {pathh}<br><br>')

The easiest solution is likely to move line 162 up to immediately after line 155, printing the file that was found as soon as it is added to files_found. I will submit a PR when I have time.

Errors when installing

I am getting the following error when I'm setting up iLEAPP. It's happening on all of my computers so I am sure its a user error, but I am so new to this, I have no idea what its saying. Can anyone help, please?

Building wheel for astc_decomp (setup.py) ... error
error: subprocess-exited-with-error

× python setup.py bdist_wheel did not run successfully.
│ exit code: 1
╰─> [9 lines of output]
C:\Python\lib\site-packages\setuptools\dist.py:717: UserWarning: Usage of dash-separated 'description-file' will not be supported in future versions. Please use the underscore name 'description_file' instead
warnings.warn(
C:\Python\lib\site-packages\setuptools\dist.py:717: UserWarning: Usage of dash-separated 'long-description' will not be supported in future versions. Please use the underscore name 'long_description' instead
warnings.warn(
running bdist_wheel
running build
running build_ext
building 'astc_decomp' extension
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for astc_decomp
Running setup.py clean for astc_decomp
Building wheel for pyliblzfse (setup.py) ... error
error: subprocess-exited-with-error

× python setup.py bdist_wheel did not run successfully.
│ exit code: 1
╰─> [5 lines of output]
running bdist_wheel
running build
running build_ext
building 'liblzfse' extension
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for pyliblzfse
Running setup.py clean for pyliblzfse
Failed to build astc_decomp pyliblzfse
Installing collected packages: pyliblzfse, pyasn1, biplist, astc_decomp, python-dateutil, pathlib2, numpy, nska-deserialize, pandas, cryptography, bs4, PGPy
Running setup.py install for pyliblzfse ... error
error: subprocess-exited-with-error

× Running setup.py install for pyliblzfse did not run successfully.
│ exit code: 1
╰─> [5 lines of output]
running install
running build
running build_ext
building 'liblzfse' extension
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure

× Encountered error while trying to install package.
╰─> pyliblzfse

note: This is an issue with the package mentioned above, not pip.
hint: See above for output from the failure.

CSV generations in line with HTML

Inspired by #34.

Currently CSV generation works by parsing the HTML output.

Now that we are moving to a model where one function is going to be used for writing an HTML template write_html_template, we can make something similar for CSV, and not have the hacky report parsing.

There are two ways to approach this:

  1. This is a bit of a refactor because currently, it requires us to change the function signatures of some of the functions of extraction.py as well as signal to the artifact parsing function (the key field of the dictionary tosearch that we have more data than just filefound.

I have been thinking of changing the signature of the functions to accept an optional meta parameter.

  1. An alternative to this would be somewhere we store global state in a file. In this case, we could just write the CSV Output dir during the pre_extract function, and the artifact parsing function in contrib could just check for the presence of that dir and write CSV if so.
    I think this is a better solution in the short-term.

Either way, we'd want to get to a point where #13 is done before this is useful.

Getting an error: File is not a database

Procesing started. Please wait. This may take a few minutes...
--------------------------------------------------------------------------------------
iLEAPP v1.16.9: iLEAPP Logs, Events, and Properties Parser
Objective: Triage iOS Full System Extractions.
By: Alexis Brignoni | @AlexisBrignoni | abrignoni.com
By: Yogesh Khatri | @SwiftForensics | swiftforensics.com
Building files listing...
Error opening Manifest.db from C:/Users/aiden.admin/AppData/Roaming/Apple Computer/MobileSync/Backup/00008030-000239A23691802E, file is not a database
Had an exception in Seeker - see details below. Terminating Program!
Traceback (most recent call last): File "ileapp.py", line 104, in crunch_artifacts File "scripts\search_files.py", line 56, in __init__ File "scripts\search_files.py", line 83, in build_files_list File "scripts\search_files.py", line 64, in build_files_list sqlite3.DatabaseError: file is not a database

I attempted to run iLEAPP on an iTunes backup, but it failed almost immediately. Not sure what the issue is, Manifest.db is a database.

Several plugins depend on lastBuild.py plugin

With the GUI allowing selection of modules, a user could select plugins that have the dependency and not select lastBuild.py, which results in exceptions.
Either the gui code can be changed to always select this plugin (regardless of user input) , or remove it from the plugins altogether and always run it.

iLEAPP GUI Reference to ALEAPP

I haven't dug into the GUI side much, so unsure if this is an issue. Saw it while going through with consistency updates. Are these supposed to reference A stuff?

file_types=(('ALEAPP Profile (*.alprofile)', '*.alprofile'), ('All Files', '*')),

if profile.get("leapp") != "aleapp" or profile.get("format_version") != 1:

iLEAPP/ileappGUI.py

Lines 195 to 196 in 6ff56d1

file_types=(('ALEAPP Profile (*.alprofile)', '*.alprofile'), ('All Files', '*')),
default_extension='.alprofile', no_window=True)

KTX Snapshot errors on macOS

Had this error come up when processing GK extractions (ZIP).

Installed Apps artifact executing
Reading Installed Apps artifact had errors!
Error was [Errno 2] No such file or directory: '/Volumes/My Passport/output/iLEAPP_Reports_2020-08-07_Friday_130900/temp/private/var/mobile/Library/SplashBoard/Snapshots/com.apple.Bridge/sceneID_com.apple.Bridge-default/[email protected]'
Exception Traceback: Traceback (most recent call last): File "/Users/abrignoni/Documents/GitHub/iLEAPP/scripts/ilap_artifacts.py", line 359, in process_artifact method(files_found, report_folder, seeker) File "/Users/abrignoni/Documents/GitHub/iLEAPP/scripts/artifacts/appSnapshots.py", line 41, in get_applicationSnapshots if os.path.getsize(file_found) < 2500: # too small, they are blank File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/genericpath.py", line 50, in getsize return os.stat(filename).st_size FileNotFoundError: [Errno 2] No such file or directory: '/Volumes/My Passport/output/iLEAPP_Reports_2020-08-07_Friday_130900/temp/private/var/mobile/Library/SplashBoard/Snapshots/com.apple.Bridge/sceneID_com.apple.Bridge-default/[email protected]'

On macOS the original path of sceneID_com.apple.Bridge-default is written to the file systems as sceneID/com.apple.Bridge-default hence the script can't find the file even though it has been extracted. See image below.

Screen Shot 2020-08-07 at 1 18 04 PM

Tested it on Windows 10 and found no issues. Worked as expected.

Make slightly faster by merging modules that operate on the same file(s)

Regex on the root directory listing is one of the slowest to execute (especially when input is folder), but it has to execute once per module listing. There are many modules that operate on the same file(s). These can be merged into a single module, to reduce the loop iterations and make this faster. For example:

'aggDictpasscode': ('Aggregate Dictionary', '*/AggregateDictionary/ADDataStore.sqlitedb'),
'aggDictpasscodetype': ('Aggregate Dictionary', '*/AggregateDictionary/ADDataStore.sqlitedb'),
'cloudkitNoteSharing': ('Cloudkit', '*NoteStore.sqlite*'),
'cloudkitParticipants': ('Cloudkit', '*NoteStore.sqlite*'),
'safariHistory': ('Safari Browser', '**/Safari/History.db'),
'safariWebsearch': ('Safari Browser', '**/Safari/History.db'),

There are few others too.

Consider numpy version bump

iLEAPP requirements.txt set numpy == 1.19.3. This numpy version does not appear compatible with python3.10.

Installed numpy-1.21.4 and iLEAPP appears to be working.

Cannot Compile to executable

When I compile to an executable I do not get an executable.

$ pyinstaller --onefile ileapp.spec
36 INFO: PyInstaller: 4.8
36 INFO: Python: 3.9.9
38 INFO: Platform: Linux-5.15.16-100.fc34.x86_64-x86_64-with-glibc2.33
40 INFO: UPX is not available.
41 INFO: Extending PYTHONPATH with paths
['/home/silas/Downloads/LEAPP/iLEAPP']
177 INFO: checking Analysis
177 INFO: Building Analysis because Analysis-00.toc is non existent
177 INFO: Initializing module dependency graph...
178 INFO: Caching module graph hooks...
183 INFO: Analyzing base_library.zip ...
1898 INFO: Processing pre-find module path hook distutils from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/pre_find_module_path/hook-distutils.py'.
1899 INFO: distutils: retargeting to non-venv dir '/usr/lib64/python3.9'
3455 INFO: Caching module dependency graph...
3543 INFO: running Analysis Analysis-00.toc
3557 INFO: Analyzing ileapp.py
/home/silas/.local/lib/python3.9/site-packages/magic/magic.py:209: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if result is -1:
5661 INFO: Processing pre-find module path hook site from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/pre_find_module_path/hook-site.py'.
5661 INFO: site: retargeting to fake-dir '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/fake-modules'
8239 INFO: Processing pre-safe import module hook six.moves from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-six.moves.py'.
10114 INFO: Processing module hooks...
10114 INFO: Loading module hook 'hook-lxml.etree.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10114 INFO: Loading module hook 'hook-magic.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10117 INFO: Loading module hook 'hook-Crypto.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10119 INFO: Loading module hook 'hook-lxml.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10328 INFO: Loading module hook 'hook-cryptography.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10462 INFO: Loading module hook 'hook-pycparser.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10462 INFO: Loading module hook 'hook-distutils.util.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10466 INFO: Loading module hook 'hook-packaging.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10466 INFO: Loading module hook 'hook-lib2to3.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10481 INFO: Loading module hook 'hook-PIL.Image.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10742 INFO: Loading module hook 'hook-sqlite3.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10777 INFO: Loading module hook 'hook-numpy.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10791 INFO: Import to be excluded not found: 'f2py'
10821 INFO: Loading module hook 'hook-pkg_resources.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11191 INFO: Processing pre-safe import module hook win32com from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/pre_safe_import_module/hook-win32com.py'.
11193 WARNING: Hidden import "pkg_resources.py2_warn" not found!
11337 WARNING: Hidden import "pkg_resources.markers" not found!
11340 INFO: Loading module hook 'hook-heapq.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11341 INFO: Loading module hook 'hook-xml.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11341 INFO: Loading module hook 'hook-numpy._pytesttester.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11343 INFO: Loading module hook 'hook-distutils.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11349 INFO: Loading module hook 'hook-sysconfig.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11349 INFO: Loading module hook 'hook-PIL.ImageFilter.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11351 INFO: Loading module hook 'hook-setuptools.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11734 INFO: Loading module hook 'hook-pickle.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11737 INFO: Loading module hook 'hook-difflib.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11738 INFO: Loading module hook 'hook-setuptools.msvc.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11740 INFO: Loading module hook 'hook-encodings.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11778 INFO: Loading module hook 'hook-xml.etree.cElementTree.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11779 INFO: Loading module hook 'hook-multiprocessing.util.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11782 INFO: Loading module hook 'hook-xml.dom.domreg.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11783 INFO: Loading module hook 'hook-PIL.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11783 INFO: Import to be excluded not found: 'PySide2'
11783 INFO: Import to be excluded not found: 'tkinter'
11783 INFO: Import to be excluded not found: 'PyQt5'
11784 INFO: Import to be excluded not found: 'PySide6'
11784 INFO: Import to be excluded not found: 'PyQt6'
11784 INFO: Loading module hook 'hook-lxml.isoschematron.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
11786 INFO: Loading module hook 'hook-lxml.objectify.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
11805 INFO: Looking for ctypes DLLs
11956 INFO: Analyzing run-time hooks ...
11963 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_subprocess.py'
11964 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py'
11966 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py'
11968 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py'
11969 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgres.py'
11983 INFO: Looking for dynamic libraries
12836 INFO: Looking for eggs
12836 INFO: Using Python library /lib64/libpython3.9.so.1.0
12844 INFO: Warnings written to /home/silas/Downloads/LEAPP/iLEAPP/build/ileapp/warn-ileapp.txt
12895 INFO: Graph cross-reference written to /home/silas/Downloads/LEAPP/iLEAPP/build/ileapp/xref-ileapp.html
12909 INFO: Appending 'datas' from .spec
Unable to find ".\scripts\logo.jpg" when adding binary and data files.
$ pyinstaller --onefile --noconsole ileappGUI.spec
35 INFO: PyInstaller: 4.8
35 INFO: Python: 3.9.9
37 INFO: Platform: Linux-5.15.16-100.fc34.x86_64-x86_64-with-glibc2.33
39 INFO: UPX is not available.
40 INFO: Extending PYTHONPATH with paths
['/home/silas/Downloads/LEAPP/iLEAPP']
177 INFO: checking Analysis
177 INFO: Building Analysis because Analysis-00.toc is non existent
177 INFO: Initializing module dependency graph...
178 INFO: Caching module graph hooks...
183 INFO: Analyzing base_library.zip ...
1836 INFO: Processing pre-find module path hook distutils from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/pre_find_module_path/hook-distutils.py'.
1837 INFO: distutils: retargeting to non-venv dir '/usr/lib64/python3.9'
3335 INFO: Caching module dependency graph...
3423 INFO: running Analysis Analysis-00.toc
3436 INFO: Analyzing ileappGUI.py
/home/silas/.local/lib/python3.9/site-packages/magic/magic.py:209: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if result is -1:
5498 INFO: Processing pre-find module path hook site from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/pre_find_module_path/hook-site.py'.
5498 INFO: site: retargeting to fake-dir '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/fake-modules'
8032 INFO: Processing pre-safe import module hook six.moves from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/pre_safe_import_module/hook-six.moves.py'.
10365 INFO: Processing module hooks...
10366 INFO: Loading module hook 'hook-lxml.etree.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10366 INFO: Loading module hook 'hook-magic.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10368 INFO: Loading module hook 'hook-Crypto.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10371 INFO: Loading module hook 'hook-lxml.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10564 INFO: Loading module hook 'hook-cryptography.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10678 INFO: Loading module hook 'hook-pycparser.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
10679 INFO: Loading module hook 'hook-distutils.util.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10682 INFO: Loading module hook 'hook-packaging.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10682 INFO: Loading module hook 'hook-lib2to3.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10696 INFO: Loading module hook 'hook-PIL.Image.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10943 INFO: Loading module hook 'hook-sqlite3.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
10978 INFO: Loading module hook 'hook-_tkinter.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11041 INFO: checking Tree
11041 INFO: Building Tree because Tree-00.toc is non existent
11041 INFO: Building Tree Tree-00.toc
11046 INFO: checking Tree
11046 INFO: Building Tree because Tree-01.toc is non existent
11046 INFO: Building Tree Tree-01.toc
11081 INFO: checking Tree
11081 INFO: Building Tree because Tree-02.toc is non existent
11081 INFO: Building Tree Tree-02.toc
11083 INFO: Loading module hook 'hook-numpy.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11096 INFO: Import to be excluded not found: 'f2py'
11120 INFO: Loading module hook 'hook-pkg_resources.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11487 INFO: Processing pre-safe import module hook win32com from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/pre_safe_import_module/hook-win32com.py'.
11503 WARNING: Hidden import "pkg_resources.py2_warn" not found!
11648 WARNING: Hidden import "pkg_resources.markers" not found!
11650 INFO: Loading module hook 'hook-heapq.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11652 INFO: Loading module hook 'hook-xml.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11652 INFO: Loading module hook 'hook-numpy._pytesttester.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11654 INFO: Loading module hook 'hook-distutils.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11659 INFO: Loading module hook 'hook-sysconfig.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11659 INFO: Loading module hook 'hook-PIL.ImageFilter.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
11661 INFO: Loading module hook 'hook-setuptools.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
12046 INFO: Loading module hook 'hook-pickle.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
12049 INFO: Loading module hook 'hook-difflib.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
12050 INFO: Loading module hook 'hook-setuptools.msvc.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
12052 INFO: Loading module hook 'hook-encodings.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
12089 INFO: Loading module hook 'hook-xml.etree.cElementTree.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
12090 INFO: Loading module hook 'hook-multiprocessing.util.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
12093 INFO: Loading module hook 'hook-xml.dom.domreg.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
12094 INFO: Loading module hook 'hook-PIL.py' from '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks'...
12095 INFO: Import to be excluded not found: 'PySide6'
12095 INFO: Import to be excluded not found: 'PySide2'
12095 INFO: Import to be excluded not found: 'PyQt6'
12097 INFO: Import to be excluded not found: 'PyQt5'
12097 INFO: Loading module hook 'hook-lxml.isoschematron.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
12099 INFO: Loading module hook 'hook-lxml.objectify.py' from '/home/silas/.local/lib/python3.9/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks'...
12120 INFO: Looking for ctypes DLLs
12267 INFO: Analyzing run-time hooks ...
12274 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_subprocess.py'
12275 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py'
12277 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py'
12279 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py'
12280 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgres.py'
12283 INFO: Including run-time hook '/home/silas/.local/lib/python3.9/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py'
12293 INFO: Looking for dynamic libraries
13273 INFO: Looking for eggs
13273 INFO: Using Python library /lib64/libpython3.9.so.1.0
13281 INFO: Warnings written to /home/silas/Downloads/LEAPP/iLEAPP/build/ileappGUI/warn-ileappGUI.txt
13331 INFO: Graph cross-reference written to /home/silas/Downloads/LEAPP/iLEAPP/build/ileappGUI/xref-ileappGUI.html
13348 INFO: Appending 'datas' from .spec
Unable to find ".\scripts\logo.jpg" when adding binary and data files.

After that I have the following files (no executable):

$ tree
.
├── build
│   ├── ileapp
│   │   ├── Analysis-00.toc
│   │   ├── base_library.zip
│   │   ├── warn-ileapp.txt
│   │   └── xref-ileapp.html
│   └── ileappGUI
│       ├── Analysis-00.toc
│       ├── base_library.zip
│       ├── Tree-00.toc
│       ├── Tree-01.toc
│       ├── Tree-02.toc
│       ├── warn-ileappGUI.txt
│       └── xref-ileappGUI.html
├── dist
├── ileappGUI.py
├── ileappGUI.spec
├── ileapp.py
├── ileapp.spec
├── LICENSE
├── README.md
├── requirements.txt
└── scripts
    ├── artifact_report.py
    ├── artifacts
    │   ├── accs.py
    │   ├── addressBook.py
    │   ├── airtags.py
    │   ├── alarms.py
    │   ├── appConduit.py
    │   ├── appGrouplisting.py
    │   ├── appItunesmeta.py
    │   ├── appleMapsApplication.py
    │   ├── appleMapsGroup.py
    │   ├── appleMapsSearchHistory.py
    │   ├── applePodcasts.py
    │   ├── appleWalletCards.py
    │   ├── appleWalletPasses.py
    │   ├── appleWalletTransactions.py
    │   ├── appleWifiPlist.py
    │   ├── applicationstate.py
    │   ├── appSnapshots.py
    │   ├── artGlobals.py
    │   ├── bluetooth.py
    │   ├── cacheRoutesGmap.py
    │   ├── calendarAll.py
    │   ├── callHistory.py
    │   ├── cashApp.py
    │   ├── celWireless.py
    │   ├── cloudkitParticipants.py
    │   ├── cloudkitSharing.py
    │   ├── conDev.py
    │   ├── confaccts.py
    │   ├── deviceActivator.py
    │   ├── dhcphp.py
    │   ├── dhcpl.py
    │   ├── discordAcct.py
    │   ├── discordJson.py
    │   ├── discordManifest.py
    │   ├── FacebookMessenger.py
    │   ├── filesAppsclient.py
    │   ├── filesAppsdb.py
    │   ├── filesAppsm.py
    │   ├── geodApplications.py
    │   ├── geodMapTiles.py
    │   ├── geodPDPlaceCache.py
    │   ├── googleDuo.py
    │   ├── icloudMeta.py
    │   ├── icloudPhotoMeta.py
    │   ├── icloudSharedalbums.py
    │   ├── iCloudWifi.py
    │   ├── iconsScreen.py
    │   ├── imoHD_Chat.py
    │   ├── instagramThreads.py
    │   ├── interactionCcontacts.py
    │   ├── keyboardAppUsage.py
    │   ├── keyboardLexicon.py
    │   ├── kikBplistmeta.py
    │   ├── kikMessages.py
    │   ├── kikPendingUploads.py
    │   ├── lastBuild.py
    │   ├── locServicesconfig.py
    │   ├── mailprotect.py
    │   ├── mediaLibrary.py
    │   ├── medicalID.py
    │   ├── mobileActivationLogs.py
    │   ├── mobileBackup.py
    │   ├── mobileContainerManager.py
    │   ├── mobileInstall.py
    │   ├── notes.py
    │   ├── NotificationParams.txt
    │   ├── notificationsXII.py
    │   ├── notificationsXI.py
    │   ├── ooklaSpeedtestData.py
    │   ├── photosMetadata.py
    │   ├── protonMail.py
    │   ├── queryPredictions.py
    │   ├── quickLook.py
    │   ├── recentApphistory.py
    │   ├── reminders.py
    │   ├── restoreLog.py
    │   ├── safariBookmarks.py
    │   ├── safariFavicons.py
    │   ├── safariRecentWebSearches.py
    │   ├── safariTabs.py
    │   ├── safariWebsearch.py
    │   ├── script.txt
    │   ├── slack.py
    │   ├── tcc.py
    │   ├── teams.py
    │   ├── teamsSegment.py
    │   ├── textinputTyping.py
    │   ├── tikTok.py
    │   ├── tileAppDb.py
    │   ├── tileAppDisc.py
    │   ├── tileAppNetDb.py
    │   ├── tileApp.py
    │   ├── venmo.py
    │   ├── voiceRecordings.py
    │   ├── voiceTriggers.py
    │   ├── walStrings.py
    │   ├── weatherAppLocations.py
    │   ├── webClips.py
    │   ├── whatsappContacts.py
    │   ├── whatsappMessages.py
    │   └── wiLoc.py
    ├── ccl
    │   └── ccl_bplist.py
    ├── chat_rendering.py
    ├── chats.css
    ├── dark-mode.css
    ├── dark-mode-switch.js
    ├── dashboard.css
    ├── feather.min.js
    ├── html_parts.py
    ├── ilap_artifacts.py
    ├── ilapfuncs.py
    ├── keychain
    │   └── readme.txt
    ├── ktx
    │   └── ios_ktx2png.py
    ├── logo.jpg
    ├── MDB-Free_4.13.0
    │   ├── css
    │   │   ├── addons
    │   │   │   ├── datatables.min.css
    │   │   │   ├── datatables-select.min.css
    │   │   │   ├── directives.min.css
    │   │   │   ├── flag.min.css
    │   │   │   ├── jquery.zmd.hierarchical-display.min.css
    │   │   │   └── rating.min.css
    │   │   ├── bootstrap.css
    │   │   ├── bootstrap.min.css
    │   │   ├── mdb.css
    │   │   ├── mdb.lite.css
    │   │   └── mdb.min.css
    │   ├── img
    │   │   ├── overlays
    │   │   │   ├── 01.png
    │   │   │   ├── 02.png
    │   │   │   ├── 03.png
    │   │   │   ├── 04.png
    │   │   │   ├── 05.png
    │   │   │   ├── 06.png
    │   │   │   ├── 07.png
    │   │   │   ├── 08.png
    │   │   │   └── 09.png
    │   │   └── svg
    │   │       ├── arrow_left.svg
    │   │       └── arrow_right.svg
    │   └── js
    │       ├── addons
    │       │   ├── datatables.min.js
    │       │   ├── datatables-select.min.js
    │       │   ├── directives.min.js
    │       │   ├── flag.min.js
    │       │   ├── imagesloaded.pkgd.min.js
    │       │   ├── jquery.zmd.hierarchical-display.min.js
    │       │   ├── masonry.pkgd.min.js
    │       │   └── rating.min.js
    │       ├── bootstrap.js
    │       ├── bootstrap.min.js
    │       ├── jquery.js
    │       ├── jquery.min.js
    │       ├── mdb.js
    │       ├── mdb.min.js
    │       ├── modules
    │       │   ├── animations-extended.min.js
    │       │   ├── forms-free.min.js
    │       │   ├── scrolling-navbar.min.js
    │       │   ├── treeview.min.js
    │       │   └── wow.min.js
    │       ├── popper.js
    │       └── popper.min.js
    ├── parse3.py
    ├── report.py
    ├── search_files.py
    └── version_info.py

18 directories, 180 files

Am I missing something?

Add a debug mode which doesn't swallow exceptions

Usually when debugging, one will just observe a message like this in the execution logs:

Error in Aggregated dictionary Distribution Keys section.

But it swallows the actual exception. This is good for user experience, but not necessarily good for development experience.

The ability to see where the process bombed would be helpful, instead of having to run it with a debugger the next round.

ileappGUI.py won't run...

I installed this on a Win11 laptop via WSL2->Ubuntu->Homebrew->Python3->git clone ileapp->brew install requirements.txt
Runs fine. No issues.

I repeated the exact process on a Windows 10 workstation and have had nothing but issues:

anvil@acme:~/iLEAPP$ python3 ileappGUI.py
Traceback (most recent call last):
  File "/home/vflab/iLEAPP/ileappGUI.py", line 1, in <module>
    import ileapp
  File "/home/vflab/iLEAPP/ileapp.py", line 4, in <module>
    import scripts.report as report
  File "/home/vflab/iLEAPP/scripts/report.py", line 10, in <module>
    from scripts.ilapfuncs import logfunc
  File "/home/vflab/iLEAPP/scripts/ilapfuncs.py", line 16, in <module>
    from bs4 import BeautifulSoup
ModuleNotFoundError: No module named 'bs4'
anvil@acme:~/iLEAPP$ pip3 install bs4
DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621
Collecting bs4
  Using cached bs4-0.0.1-py3-none-any.whl
Collecting beautifulsoup4
  Using cached beautifulsoup4-4.10.0-py3-none-any.whl (97 kB)
Collecting soupsieve>1.2
  Using cached soupsieve-2.3.1-py3-none-any.whl (37 kB)
Installing collected packages: soupsieve, beautifulsoup4, bs4
  DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621
  DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621
  DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621
DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621
Successfully installed beautifulsoup4-4.10.0 bs4-0.0.1 soupsieve-2.3.1
anvil@acme:~/iLEAPP$ python3 ileappGUI.py
Traceback (most recent call last):
  File "/home/vflab/iLEAPP/ileappGUI.py", line 1, in <module>
    import ileapp
  File "/home/vflab/iLEAPP/ileapp.py", line 4, in <module>
    import scripts.report as report
  File "/home/vflab/iLEAPP/scripts/report.py", line 10, in <module>
    from scripts.ilapfuncs import logfunc
  File "/home/vflab/iLEAPP/scripts/ilapfuncs.py", line 17, in <module>
    from PIL import Image
ModuleNotFoundError: No module named 'PIL'

iOS Medical ID

Since so much can be gathered from the Medical ID information in iOS devices. It would be nice to incorporate that as one of the data sources that is parsed. I am unfortunately not strong enough in Python to work with the XML Parsing that is needed. I also have so far not been able to find another iLEAPP data source that comes from XML. The path for the file is \private\var\mobile\Library\MedicalID.

MS Teams

Hi,
getting "argument of type 'NoneType' is not iterable" errors from teams.py artifact when running the script and no data from the Teams DB is added to the report.

Integrating with Autopsy

Would it be possible to turn this into a module for Autopsy?

The standard Android Analyzer module is decent, but they don't have a dedicated iOS Analyzer.

Longitude not consistently spelled, knowCall throws errors

Running the current version of iLEAPP against test data which has knowledgeC information in it leads to this error:

Incepted bplist extractions in KnowledgeC.db completed
Reading KnowledgeC artifact had errors!
Error was 'Longitude'
Exception Traceback: Traceback (most recent call last):
  File "/home/notta/data/programming/python/iLEAPP/scripts/ilap_artifacts.py", line 406, in process_artifact
    method(files_found, report_folder, seeker)
  File "/home/notta/data/programming/python/iLEAPP/scripts/artifacts/knowCall.py", line 1443, in get_knowCall
    kmlgen(report_folder, kmlactivity, data_list, data_headers)
  File "/home/notta/data/programming/python/iLEAPP/scripts/ilapfuncs.py", line 194, in kmlgen
    lon = modifiedDict['Longitude']
KeyError: 'Longitude'

It appears the root cause is in the following line wherein the data headers specify 'Logitude' as the field name, not 'Longitude'. This leads to the keyError. My preferred fix would be to fix the spelling in the below line back to 'Longitude' as that is the name used in the original database, but the choice is yours.

data_headers = ('Timestamp','End','Bundle ID','Coordinates','Name','Display Name','Formatted Address', 'City','State/Province','Country','Postal Code','Subthoroughfare','Thoroughfare','Phone Numebers','URL','Activity Type', 'Content Description','User Activity Required String','Content URL','Unique ID','Latitude','Logitude','Source ID','Activity UUID','Item ID','Source ID','Day of the Week','GMT Offset','Entry Creation','UUID','Zonject Table ID')

Because I believe the exported TSV already had ingest artifacts written for it for other tools, I've made a change to just check for 'Logitude', instead of changing the data headers to 'Longitude'. PR with the fix is incoming.

Artifact Info Structure Update

As I have learned more about the structure of this project and how the modules are being developed, I think another update to the artifact structure might help to better organize and document information about the modules and all the individual artifacts they parse. I noticed that most of these modules are 1:1 in the items they add to the report, but there are a few that add multiple items to the report.

Example: Viber Module

In the code, it produces a potential of 4 items in the report based on the existence of certain data, but the artifact structure of the script doesn't give any indication of that since it has only 1 function entry of get_viber in the dictionary.
https://github.com/abrignoni/iLEAPP/blob/ceff9fb87c7f4b675c989eeb74c0dbda250fbbcd/scripts/artifacts/viber.py

Artifact v2 of Viber Module

__artifacts_v2__ = {
    "viber": {
        "name": "Viber Artifacts",
        "description": "Get Viber settings, contacts, recent calls and messages information. This script queries "
					   "Settings.data and Contacts.data Viber dbs and creates a report of findings including KML "
					   "geolocation data. Settings hold the user's personal data and configurations. Contacts hold "
					   "contacts, calls, messages and more.",
        "author": "Evangelos Dragonas (@theAtropos4n6)",
        "version": "0.0.2",
        "date": "2022-03-15",
        "requirements": "",
        "category": "Viber",
        "notes": "The code is divided into 4 queries-artifacts blocks. The 1st parses settings db, extracts and "
				 "reports on user's available information regarding Viber configuration. The 2nd parses contacts db, "
				 "extracts and reports on user's contacts. Be advised that a contact may not participate in a chat ("
				 "therefore a contact is not a chat 'member') and vice versa. A chat 'member' may not be registered as "
				 "a Viber contact. The 3rd parses contacts db, extracts and reports on user's "
				 "recent calls that have no corresponding message (ZVIBERMESSAGE) entry, indicating these messages "
				 "have been deleted. The 4th parses contacts db, extracts and reports on user's chats, including extra "
				 "columns with each chat's grouped participants and phone numbers. More information is stored within "
				 "the above databases, and this artifact assists in parsing the most out of it. ",
        "paths": (
            '**/com.viber/settings/Settings.data',
            '**/com.viber/database/Contacts.data',
            '**/Containers/Data/Application/*/Documents/Attachments/*.*',
            '**/com.viber/ViberIcons/*.*'
        ),
        "function": "get_viber"
    }
}

Artifacts

Search for ArtifactHtmlReport( and you find 4 hits for the 4 items it adds to the report, but no other way to programmatically determine that in current form.

Update

With an updated artifact structure ( maybe __artifact_v3__ ?), the structure could take on a 1 module to many artifact relationship. What I have in mind would require a little restructuring of the code that runs the artifacts though as the framework currently allows for an author to add as many items to the report within an artifact as they feel. Rather, if the report addition in tied to the artifact function and the artifact function is only allowed one instance of a report object, it forces compliance to the information structure.

Proposed Updated Structure

__artifacts_v3__ = {
    "module_name": "Viber Artifacts",
    "description": "Get Viber settings, contacts, recent calls and messages information. This script queries "
				   "Settings.data and Contacts.data Viber dbs and creates a report of findings including KML "
				   "geolocation data. Settings hold the user's personal data and configurations. Contacts hold "
				   "contacts, calls, messages and more.",
    "author": "Evangelos Dragonas (@theAtropos4n6)",
    "version": "0.0.2",
    "date": "2022-03-15",
    "requirements": "",
    "app_name": "Viber",
    "category": "Viber",
    "category_icon": "message-square",
    "notes": "The code is divided into 4 queries-artifacts blocks. The 1st parses settings db, extracts and "
			 "reports on user's available information regarding Viber configuration. The 2nd parses contacts db, "
			 "extracts and reports on user's contacts. Be advised that a contact may not participate in a chat ("
			 "therefore a contact is not a chat 'member') and vice versa. A chat 'member' may not be registered as "
			 "a Viber contact. The 3rd parses contacts db, extracts and reports on user's "
			 "recent calls that have no corresponding message (ZVIBERMESSAGE) entry, indicating these messages "
			 "have been deleted. The 4th parses contacts db, extracts and reports on user's chats, including extra "
			 "columns with each chat's grouped participants and phone numbers. More information is stored within "
			 "the above databases, and this artifact assists in parsing the most out of it. ",
    "paths": (
        '**/com.viber/settings/Settings.data',
        '**/com.viber/database/Contacts.data',
        '**/Containers/Data/Application/*/Documents/Attachments/*.*',
        '**/com.viber/ViberIcons/*.*'
    ),
    "artifacts": {
        { 
            "artifact_name": "Viber - Settings", # could directly tie to report name
            "function": "get_viber_settings",
            "report_name": "Viber Settings Report", # if you prefer to have this separate from artifact name
            "artifact_icon": "git-commit", # feather icons name
            "report_notes": "Settings pulled from xyz.sqlite file", # to be displayed at the top of the page
            "report_warning": "be careful with the timestamp of this artifact..."
        },
        {
            "artifact_name": "Viber - Contacts",
            "function": "get_viber_contacts",
            "report_name": "Viber Contacts Report",
            "artifact_icon": "user",
            "report_notes": "Settings pulled from xyz.sqlite file"
        },
        {
            "artifact_name": "Viber - Call Remnants",
            "function": "get_viber_calls",
            "report_name": "Viber Calls Report",
            "artifact_icon": "phone-call",
            "report_notes": "Settings pulled from xyz.sqlite file"
        },
        {
            "artifact_name": "Viber - Chats",
            "function": "get_viber_chats",
            "report_name": "Viber Chats Report",
            "artifact_icon": "message-square",
            "report_notes": "Settings pulled from xyz.sqlite file"
        }

    }
}

Module Code Updates

With this updated structure, the module calling function would change slightly. Rather than passing in the report folder path, the calling code can automatically create the report object with the already provided name and pass that object into the artifact function to let it add more to the report.

Artifact Function Call

existing:
def get_viber(files_found, report_folder, seeker, wrap_text, timezone_offset):

updated:
def get_viber(files_found, artifact_report_section, seeker, wrap_text, timezone_offset):

Artifact Report Lines

existing:

		report = ArtifactHtmlReport('Viber - Settings')
		report.start_artifact_report(report_folder, 'Viber - Settings')
		report.add_script()
		data_headers = ('Setting','Value')
		report.write_artifact_data_table(data_headers, data_list, file_found, html_escape=False)
		report.end_artifact_report()

updated:

		report.add_script() # could remove this need with a default
		data_headers = ('Setting','Value')
		report.write_artifact_data_table(data_headers, data_list, file_found, html_escape=False)

Thoughts?

I haven't gain a completely thorough understanding of the LEAPP framework yet, so I don't know the full impact of a change like this. I think it would make creating modules quite a bit less intimidating for folks.

Thoughts?

Datetime Import

Saw a commit to change the use of datetime import in I. i had updated that as part of syncing cross versions. A, R, V use datetime.datetime.now() and I is the only one importing at higher level and using datetime.now(). do you want to move the others to this instead?

I:

now = datetime.now()

A:
https://github.com/abrignoni/ALEAPP/blob/f7243e99c6ccc5ab5148106558461140d7f5dab8/scripts/ilapfuncs.py#L33

R:
https://github.com/abrignoni/RLEAPP/blob/3a62eb369d7203353db4872b6077a6361c07f095/scripts/ilapfuncs.py#L30

V:
https://github.com/abrignoni/VLEAPP/blob/20a066a144c931ccf383a45fb0ce878c9d62ffc6/scripts/ilapfuncs.py#L30

Permission Error when using decompressed folder

Permission error on Windows when supplying iLEAPP with a decompressed folder of an iOS filesystem extraction.

Full error:

Traceback (most recent call last):
  File "ileapp.py", line 36, in <module>
    extracttype = get_filetype(image_fpath)
  File "C:\Users\jfarl\Downloads\iLEAPP-master\extraction.py", line 83, in get_filetype
    raise e
  File "C:\Users\jfarl\Downloads\iLEAPP-master\extraction.py", line 77, in get_filetype
    inferred_filetype = filetype.guess(fpath)
  File "C:\Users\jfarl\AppData\Local\Programs\Python\Python37\lib\site-packages\filetype\filetype.py", line 28, in guess
    return match(obj) if obj else None
  File "C:\Users\jfarl\AppData\Local\Programs\Python\Python37\lib\site-packages\filetype\match.py", line 28, in match
    buf = get_bytes(obj)
  File "C:\Users\jfarl\AppData\Local\Programs\Python\Python37\lib\site-packages\filetype\utils.py", line 64, in get_bytes
    return get_signature_bytes(obj)
  File "C:\Users\jfarl\AppData\Local\Programs\Python\Python37\lib\site-packages\filetype\utils.py", line 17, in get_signature_bytes
    with open(path, 'rb') as fp:
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\iPHONE\\iOS_Filesystem\\'

As far as I can tell this seems to be an issue with the filetype library, as adding a check using os.path.isdir fixes this issue and allows for iLEAPP to function as normal.

Suggest changing the get_filetype function to the following:

def get_filetype(fpath: str) -> str:
    """
    Returns a string with the extension of the library received.

    Raises:
       UnsupportedFileType: if the file type is not supported by iLEAPP
            or cannot be guessed.

    Leverages the `filetype` library:
        https://github.com/h2non/filetype.py
    """
    if not os.path.isdir(fpath):
        try:
            inferred_filetype = filetype.guess(fpath)

        except Exception as e:
            raise e

        if inferred_filetype is None:
            raise UnsupportedFileType(f"Could not detect file type for {fpath}")

        extension = inferred_filetype.extension

        if extension not in SUPPORTED_EXTENSIONS:
            raise UnsupportedFileType(
                f"Detected file type {extension} for file {fpath} not supported"
                f" by iLEAPP.\nFile types supported are: {SUPPORTED_EXTENSIONS}"
            )

        return extension
    else:
        return "fs"

Apple Watch support

Apple Watch devices are everywhere now and they contain evidence such as health data, audio levels, messages, emails, settings, photos, and more synced from a phone or generated by itself. Let’s say either A1, a criminal, or A2, a person who has died in a car crash has their phone but refuse to unlock it with modern encryption breaking tech failing due to the modernity of the device, and in both scenarios, they do not back up their phones to iCloud nor any computers, leaving their phone data either lost or damaged physically. Their watch can hold valuable heart rate and noise level data to determine when “action” happened. A robbery or a car crash has both. Health data on iOS is supported but not WatchOS yet.
There is some information given on where the data is on CheckRainable models.

https://dfir.pubpub.org/pub/xqvcn3hj

However backup analysis of iOS via iTunes and iCloud contain a folder called DeviceRegistry with the Apple Watch backup.

https://subscription.packtpub.com/book/security/9781786464200/6/ch07lvl1sec53/the-apple-watch

Apparently Apple Watch (as well as Apple TV!) dumps can be processed via iLEAPP already, however only by themselves. There should be a way to process Apple Watch backups on iTunes and iCloud backups. I don’t know if we should merge them with iPhone processed data or add them by themselves. Apple Watch can also have multiple backups on one iOS device similar to Time Machine. Apple Watch backups can maybe be provided as a flag to the iLEAPP tool to process Watch backups rather than iPhone backups, or certain watchOS-exclusive data such as watchOS apps, Apple Watch Settings, Apple Watch Photo Sync, Apple Watch Faces, and Apple Watch Battery could be added to the main iLEAPP on default, or an entire category filled with all watchOS data in the bottom of the list called “Apple Watch” could be added.

https://blog.elcomsoft.com/2019/06/apple-watch-forensics-02-analysis/

This is a more in depth analysis in analysis of Apple Watch backups, but anyone with an Apple Watch should donate their backups here. I tried to backup my iPhone twice to get the backups, but long story short, almost lost all of my data to the “low storage respring loop” bug twice, first one solved by a force reboot and second one I had to use control center WiFi settings to offload Keynote.

But a proper example Apple Watch backup should include sample data and sample settings from all built in apps, from heart rate to mail to mindfulness to Memoji to photos. Remember that Timer, Stopwatch, World Clock, Compass, and Alarm data should be added as well, and put a few watch faces including ones that include user photos. Third-party apps including WatchTube (YouTube client for Apple Watch that requires the watchOS App Store to install and includes Search History, Recommendations, (video) Watch History, and Like History), Mu Browser, WatchApp Plus, Nano For Reddit, Tik Watch, and optional investigation of miscellaneous apps that have no iPhone client app and are free: Digital Time, Hangman WatchKit App, HeartRand, Memory Moves, MonthDay, Now Playing+, Pingo Watch, RHR Tracker, SubwayStats, TubeStats, The Habit Trainer WatchKit App, Watch Health Logger, WatchMoji, Weeks, WorkWork Watch, and WristSteps.

This does kind of sound like a “process every piece of software available without providing any sample data” post but the list of apps was just to have a backup filled with said sample data. This post is mainly to provide separate parsing of Apple Watch backups from greater iPhone backups. I have provided detail on which database files are where and have said that most work is already completed, and you may possibly only add small artifacts like compass waypoints for example.

SplashBoard Error

I was using iLEAPP command line and .exe and receiving this message.. Wondered if it was an error...
ios 13.3. I also received the same error when i was running a ios 13.4 image.

iLEAPP13 3

sqlite3 error when searching for ProductBuildVersion

--------------------------------------------------------------------------------------
iLEAPP: iOS Logs, Events, and Preferences Parser
Objective: Triage iOS Full System Extractions.
By: Alexis Brignoni | @AlexisBrignoni | abrignoni.com
Artifact categories to parse: 38
File/Directory selected: /Volumes/davids_iphone

--------------------------------------------------------------------------------------


Mobile Installation Logs function executing
Logs processed: 2
Lines processed: 2171

Total apps: 326
Total installed apps: 326
Total uninstalled apps: 0
Total historical app reports: 326
Total system state events: 5
Mobile Installation Logs function completed.

Iconstate function executing
Screens: 2
Icons in bottom bar: 4
Iconstate function completed.

No files found for webclips -> *WebClips/*.webclip/*.

Lastbuild function executing
Traceback (most recent call last):
  File "./ileapp.py", line 101, in <module>
    globals()[key](filefound)
  File "/Users/hadar0x/Desktop/iLEAPP/ilapfuncs.py", line 2055, in lastbuild
    deviceinfoin(ordes, kas, vas, sources)
  File "/Users/hadar0x/Desktop/iLEAPP/ilapfuncs.py", line 4603, in deviceinfoin
    cursor.execute('INSERT INTO devinf (ord, ka, va, source)  VALUES(?,?,?,?)', datainsert)
sqlite3.InterfaceError: Error binding parameter 3 - probably unsupported type.

Refactor Report Icons

Submitting as a task I will work on.

Related code:

iLEAPP/scripts/report.py

Lines 14 to 38 in c7b6456

def get_icon_name(category, artifact):
''' Returns the icon name from the feathericons collection. To add an icon type for
an artifact, select one of the types from ones listed @ feathericons.com
If no icon is available, the alert triangle is returned as default icon.
'''
category = category.upper()
artifact = artifact.upper()
icon = 'alert-triangle' # default (if not defined!)
## Please keep list below SORTED by category
if category.find('ACCOUNT') >= 0:
if artifact.find('AUTH') >= 0:
icon = 'key'
else:
icon = 'user'
elif category == 'ADDRESS BOOK':
icon = 'book-open'
elif category == 'CACHE DATA':
icon = 'box'
elif category == 'AIRTAGS':
icon = 'map-pin'
elif category == 'SIM INFO':
icon = 'info'
elif category == 'INTENTS':

Refactor to a dictionary:

icon_map = {
    'ACCOUNT': {'AUTH': 'key', 'default': 'user'},
    'ADDRESS BOOK': 'book-open',
    'CACHE DATA': 'box',
    'AIRTAGS': 'map-pin',
    ...

Switch to python-magic-bin breaks Linux support

Commit 10197b6 updated requirements.txt to use python-magic-bin, instead of python-magic. There is no Linux whl file for python-magic-bin, so Linux users will run into this error the next time they attempt to install requirements:

ERROR: Could not find a version that satisfies the requirement python-magic-bin==0.4.14 (from versions: none)
ERROR: No matching distribution found for python-magic-bin==0.4.14

This should be solvable by checking the platform and continuing to include python-magic if the platform is not Windows or Mac. I'll submit a PR.

Need to consolidate 2 wifi plugins

There is
'appleWifiPlist':('Wireless Networks', '**/SystemConfiguration/com.apple.wifi.plist'),
and
'wifi':('Wifi Connections', '**/com.apple.wifi.plist'),

image

Both provide similar data, need to be merged.

SMS and iMessage

Hi!

I had 23092 messages and it took 4 hours and 53 minutes to run iLEAPP with just the sms/iMessages options checked (everything. else unchecked). I was processing it locally in my computer. The image was a 55 GB full file system extraction from GrayKey. I am wondering if the bubble chat function (even though it is super gorgeous) may be causing the slow down. If that is the case, I am wondering if there would be a way of having two options, the bubble chat (and that being deselected by default) and just displaying the sms/iMessages in a table and that way the user can select whatever they want depending on the time they have.

thank you!

PyPi Module

Hi @abrignoni I am reaching out to see how you would feel about making this a PyPi module so it could be installed through pip. I am happy to make the PR if you are interested.

  • Aidan

Program failed parse and died, instead of skip over + continue with next item

$ python ileapp.py /path/to/image
Procesing started. Please wait. This may take a few minutes...
--------------------------------------------------------------------------------------
iLEAPP: iOS Logs, Events, and Preferences Parser
Objective: Triage iOS Full System Extractions.
By: Agam Dua | @loopbackdev | loopback.dev
By: Alexis Brignoni | @AlexisBrignoni | abrignoni.com
Artifact categories to parse: 41
File/Directory selected: /path/to/image
--------------------------------------------------------------------------------------
Mobile Installation Logs function executing
Logs processed: 1
Lines processed: 595
Total apps: 133
Total installed apps: 123
Total uninstalled apps: 10
Total historical app reports: 133
Total system state events: 2
Mobile Installation Logs function completed.
Iconstate function executing
Screens: 2
Icons in bottom bar: 4
Iconstate function completed.
Webclips function executing
Webclips found: 1
Webclips function completed
Lastbuild function executing
iOS version is: 9.3.5
Lastbuild function completed.
iOSNotifications 11 function executing
Total notification directories processed:0
Total exported bplists from notifications:0
No notifications located.
iOS 11 Notifications function completed.
No files found for iOSNotifications12 -> *private/var/mobile/Library/UserNotifications/.
Cellular Wireless files function executing
Cellular Wireless files function completed
Incepted bplist extractions in KnowledgeC.db executing
Unsupported version9.3.5
ApplicationState.db queries executing
Installed app GUIDs and app locations processed: 42
ApplicationState.db queries completed.
Connected devices function executing
Data being interpreted for FRPD is of type: <class 'bytes'>
Found magic bytes in iTunes Prefs FRPD... Finding Usernames and Desktop names now
test - DESKTOP-T00FUVO
test - DESKTOP-T00FUVO
test - DESKTOP-T00FUVO
Connected devices function completed.
Traceback (most recent call last):
  File "ileapp.py", line 37, in <module>
    extract_and_process(image_fpath, extracttype, tosearch, log)
  File "/iLEAPP/extraction.py", line 113, in extract_and_process
    process_file_found(filefound, key, val, log, gui_window)
  File "/iLEAPP/extraction.py", line 169, in process_file_found
    globals()[key](filefound)
  File "/iLEAPP/contrib/call_history/main.py", line 12, in calhist
    cursor.execute(
sqlite3.OperationalError: no such column: ZSERVICE_PROVIDER

No files found for...

Hi Alexis, amazing work!

I cant get the info because it says:

Extraction/Path selected: /Users/j*****/Desktop/1175b82c51eb8e0c31d4e3b2ee6748f96a0d6313

No files found for lastbuild -> *LastBuildInfo.plist

No files found for accs -> **/Accounts3.sqlite

No files found for tileAppDisc -> /private/var/mobile/Containers/Shared/AppGroup//com.thetileapp.tile-DiscoveredTileDB.sqlite*

No files found for tileAppNetDb -> /private/var/mobile/Containers/Shared/AppGroup//com.thetileapp.tile-TileNetworkDB.sqlite*

No files found for confaccts -> **/com.apple.accounts.exists.plist

No files found for addressbook -> */AddressBook.sqlitedb

No files found for airtags -> */Caches/com.apple.findmy.fmipcore/Items.data

No files found for alarms -> *private/var/mobile/Library/Preferences/com.apple.mobiletimerd.plist

No files found for alltrails -> */Documents/AllTrails.sqlite

No files found for appconduit -> */AppConduit.log.

No files found for tcc -> TCC.db

No files found for applepodcasts -> */MTLibrary.sqlite

No files found for applewalletpasses -> */nanopasses.sqlite3

No files found for applewalletpasses -> **/Cards/*.pkpass/pass.json

No files found for applewallettransactions -> **/passes23.sqlite

No files found for applewalletcards -> /private/var/mobile/Containers/Data/Application//Library/Caches/com.apple.Passbook/Cache.db*

No files found for ooklaSpeedtestData -> */speedtest.sqlite

No files found for biomeAppinstall -> /Biome/streams/restricted/_DKEvent.App.Install/local/

No files found for biomeBluetooth -> /Biome/streams/restricted/Device.Wireless.Bluetooth/local/

No files found for biomeBattperc -> /Biome/streams/restricted/_DKEvent.Device.BatteryPercentage/local/

No files found for biomeDevplugin -> /Biome/streams/restricted/_DKEvent.Device.IsPluggedIn/local/

No files found for biomeUseractmeta -> /Biome/streams/restricted/UserActivityMetadata/local

No files found for biomeCarplayisconnected -> /Biome/streams/restricted/_DKEvent.Carplay.IsConnected/local/

No files found for biomeSafari -> /Biome/streams/restricted/_DKEvent.Safari.History/local/

No files found for biomeBacklight -> /Biome/streams/public/Backlight/local/

No files found for biomeWifi -> /Biome/streams/restricted/_DKEvent.Wifi.Connection/local/

No files found for biomeNotificationsPub -> /biome/streams/public/Notification/local/

No files found for biomeHardware -> /Biome/streams/restricted/OSAnalytics.Hardware.Reliability/local/

No files found for biomeLocationactivity -> /Biome/streams/restricted/_DKEvent.App.LocationActivity/local/

No files found for biomeInFocus -> /Biome/streams/restricted/_DKEvent.App.InFocus/local/

No files found for biomeNowplaying -> /Biome/streams/public/NowPlaying/local/

No files found for biomeNotes -> /Biome/streams/restricted/NotesContent/local/

No files found for bluetooth -> */com.apple.MobileBluetooth.

No files found for bumble -> */Library/Caches/Chat.sqlite

No files found for bumble -> */Documents/yap-database.sqlite

No files found for calendarall -> **/Calendar.sqlitedb

No files found for callhistory -> */CallHistory.storedata

No files found for recentApphistory -> */com.apple.CarPlayApp.plist

No files found for cashapp -> **private/var/mobile/Containers/Shared/AppGroup//CCEntitySync-api.squareup.com.sqlite

No files found for cashapp -> **private/var/mobile/Containers/Shared/AppGroup//CCEntitySync-internal.cashappapi.com.sqlite

No files found for celwireless -> wireless/Library/Preferences/com.apple.

No files found for cloudkitparticipants -> NoteStore.sqlite

No files found for cloudkitsharing -> NoteStore.sqlite

No files found for condev -> **/iTunes_Control/iTunes/iTunesPrefs

No files found for controlcenter -> **private/var/mobile/Library/ControlCenter/ModuleConfiguration.plist

No files found for dhcphp -> */private/var/db/dhcpd_leases

No files found for dhcpl -> */private/var/db/dhcpclient/leases/en

No files found for discordacct -> /var/mobile/Containers/Data/Application//Documents/mmkv/mmkv.default

No files found for discordjson -> /com.hammerandchisel.discord/fsCachedData/

No files found for discordmanifest -> /private/var/mobile/Containers/Data/Application//Documents/RCTAsyncLocalStorage_V1/manifest.json

No files found for draftmessage -> /SMS/Drafts//composition.plist

No files found for facebookmessenger -> **/lightspeed-.db

No files found for filesappsclient -> private/var/mobile/Library/Application Support/CloudDocs/session/db/client.db

No files found for filesAppsm -> private/var/mobile/Containers/Shared/AppGroup//smartfolders.db*

No files found for filesappsdb -> private/var/mobile/Library/Application Support/CloudDocs/session/db/server.db

No files found for geodapplications -> */AP.db

No files found for geodmaptiles -> */MapTiles.sqlitedb

No files found for geodpdplacecache -> */PDPlaceCache.db

No files found for mapsSync -> /MapsSync_0.0.1

No files found for gmail -> **/private/var/mobile/Containers/Data/Application//Library/Application Support/data//searchsqlitedb*

No files found for gmail -> **/private/var/mobile/Containers/Data/Application//Library/Application Support/data//sqlitedb*

No files found for googleduo -> /Application Support/DataStore

No files found for googleduo -> /Application Support/ClipsCache/.png

No files found for health -> /Health/healthdb_secure.sqlite

No files found for health -> /Health/healthdb.sqlite

No files found for quickLook -> /Quick Look/cloudthumbnails.db

No files found for icloudmeta -> */iclouddrive/Metadata.txt

No files found for aicloudphotometa -> */cloudphotolibrary/Metadata.txt

No files found for icloudSharedalbums -> /private/var/mobile/Media/PhotoData/PhotoCloudSharingData/

No files found for imoHD_Chat -> */IMODb2.sqlite

No files found for imoHD_Chat -> private/var/mobile/Containers/Data/Application//Library/Caches/videos/.webp

No files found for instagramThreads -> /mobile/Containers/Data/Application//Library/Application Support/DirectSQLiteDatabase/.db

No files found for appgrouplisting -> /Containers/Shared/AppGroup//.com.apple.mobile_container_manager.metadata.plist

No files found for appgrouplisting -> **/PluginKitPlugin/*.metadata.plist

No files found for applicationstate -> **/applicationState.db

No files found for applicationsnapshots -> */Library/Caches/Snapshots/

No files found for applicationsnapshots -> */SplashBoard/Snapshots/

No files found for appitunesmeta -> **/iTunesMetadata.plist

No files found for appitunesmeta -> **/BundleMetadata.plist

No files found for Intents -> /private/var/mobile/Library/Biome/streams/public/AppIntent/local/

No files found for Intents -> /AppIntent/local/

No files found for interactionCcontacts -> */interactionC.db

No files found for deviceactivator -> *private/var/mobile/Library/Logs/mobileactivationd/ucrt_oob_request.txt

No files found for mailprotect -> /private/var/mobile/Library/Mail/ Index

No files found for iconsScreen -> **/SpringBoard/IconState.plist

No files found for webClips -> WebClips/.webclip/*

No files found for keyboardLexicon -> /private/var/mobile/Library/Keyboard/-dynamic.lm/dynamic-lexicon.dat

No files found for keyboardAppUsage -> */private/var/mobile/Library/Keyboard/app_usage_database.plist

No files found for kijijiConversations -> */Library/Caches/conversation_cache

No files found for kikBplistmeta -> /mobile/Containers/Shared/AppGroup//cores/private//attachments/

No files found for kikLocaladmin -> /kik.sqlite

No files found for kikUsersgroups -> /kik.sqlite

No files found for kikPendingUploads -> /mobile/Containers/Shared/AppGroup//cores/private/*/chunked_upload_storage/pending_uploads

No files found for kikPendingUploads -> /mobile/Containers/Shared/AppGroup//cores/private//chunked_upload_storage/data_cache/

No files found for kikMessages -> */kik.sqlite

No files found for kikMessages -> /mobile/Containers/Shared/AppGroup//cores/private//content_manager/data_cache/

No files found for kikGroupadmins -> /kik.sqlite

No files found for locServicesconfig -> */Library/Preferences/com.apple.locationd.plist

No files found for locServicesconfig -> */Library/Caches/locationd/clients.plist

No files found for locServicesconfig -> */Library/Preferences/com.apple.routined.plist

No files found for tileApp -> private/var/mobile/Containers/Data/Application//Library/log/com.thetileapp.tile*

No files found for weatherAppLocations -> /private/var/mobile/Containers/Shared/AppGroup//Library/Preferences/group.com.apple.weather.plist

No files found for applemapsgroup -> **/Shared/AppGroup/*/Library/Preferences/group.com.apple.Maps.plist

No files found for cacheroutesgmap -> **/Library/Application Support/CachedRoutes/*.plist

No files found for tileAppDb -> private/var/mobile/Containers/Shared/AppGroup//com.thetileapp.tile-TileNetworkDB.sqlite*

No files found for applemapssearchhistory -> private/var/mobile/Containers/Data/Application//Library/Maps/GeoHistory.mapsdata

No files found for applemapssearchhistory -> */GeoHistory.mapsdata

No files found for applemapsapplication -> **/Data/Application/*/Library/Preferences/com.apple.Maps.plist

No files found for mediaLibrary -> **/Medialibrary.sqlitedb

No files found for medicalID -> */private/var/mobile/Library/MedicalID/MedicalIDData.archive

No files found for teams -> /var/mobile/Containers/Shared/AppGroup//SkypeSpacesDogfood//Skype.sqlite*

No files found for teams -> /var/mobile/Containers/Shared/AppGroup//SkypeSpacesDogfood/Downloads//Images/

No files found for teamsSegment -> /var/mobile/Containers/Data/Application//Library/DriveIQ/segments/current/.

No files found for mobileActivationLogs -> */mobileactivationd.log

No files found for mobileBackup -> */Preferences/com.apple.MobileBackup.plist

No files found for mobileContainerManager -> */containermanagerd.log.

No files found for mobileInstall -> */mobile_installation.log.

No files found for restoreLog -> **/private/var/mobile/MobileSoftwareUpdate/restore.log

No files found for notes -> /NoteStore.sqlite

No files found for notificationsXII -> private/var/mobile/Library/UserNotifications

No files found for notificationsDuet -> /DuetExpertCenter/streams/userNotificationEvents/local/

No files found for notificationsDuet -> /userNotificationEvents/local/

No files found for notificationsXI -> PushStore

No files found for reminders -> **/Reminders/Container_v1/Stores/.sqlite

No files found for safariFavicons -> /Containers/Data/Application//Library/Image Cache/Favicons/Favicons.db*

No files found for safariTabs -> */Safari/BrowserState.db

No files found for safariBookmarks -> */Safari/Bookmarks.db

No files found for safariWebsearch -> */Safari/History.db

No files found for safariRecentWebSearches -> **/Library/Preferences/com.apple.mobilesafari.plist

No files found for slack -> /var/mobile/Containers/Data/Application//Library/Application Support/Slack//Database/main_db

No files found for queryPredictions -> **/query_predictions.db

No files found for textinputTyping -> /DES/Records/com.apple.TextInput.TypingDESPlugin/.desdata

No files found for tikTok -> /Application//Library/Application Support/ChatFiles//db.sqlite

No files found for tikTok -> AwemeIM.db

No files found for venmo -> *PrivateFeed

No files found for venmo -> *PublicFeed

No files found for venmo -> *FriendsFeed

No files found for viber -> **/com.viber/settings/Settings.data

No files found for viber -> **/com.viber/database/Contacts.data

No files found for viber -> **/Containers/Data/Application//Documents/Attachments/.*

No files found for viber -> **/com.viber/ViberIcons/.

No files found for vippsContacts -> /Vipps.sqlite

No files found for vipps -> /Vipps.sqlite

No files found for voiceRecordings -> **/Recordings/*.composition/manifest.plist

No files found for voiceRecordings -> **/Recordings/*.m4a

No files found for voiceTriggers -> **/td/audio/*.json

No files found for voiceTriggers -> **/td/audio/*.wav

No files found for whatsappMessages -> /var/mobile/Containers/Shared/AppGroup//ChatStorage.sqlite*

No files found for whatsappMessages -> /var/mobile/Containers/Shared/AppGroup//Message/Media////.*

No files found for whatsappContacts -> /var/mobile/Containers/Shared/AppGroup//ContactsV2.sqlite*

No files found for iCloudWifi -> **/com.apple.wifid.plist

No files found for applewifiplist -> **/com.apple.wifi.plist

No files found for applewifiplist -> **/com.apple.wifi-networks.plist.backup

No files found for applewifiplist -> **/com.apple.wifi.known-networks.plist

No files found for applewifiplist -> **/com.apple.wifi-private-mac-networks.plist

No files found for wifiNetworkStoreModel -> */private/var/root/Library/Application Support/WiFiNetworkStoreModel.sqlite

No files found for wiloc ->

Any idea to slve this?

Best!

Jonathan

iLEAPP GUI Error in Latest Commit

I receiving the following error when attempting to analyze a GrayKey full filesystem extraction with the latest commits. I ran an analysis a couple of days ago with a previous version and it completed without error. Here's the traceback:

Traceback (most recent call last):
  File "ileappGUI.py", line 115, in <module>
    extract_and_process(pathto, extracttype, tosearch, log, gui_window=window)
  File "[redacted]\extraction.py", line 71, in extract_and_process
    process_file_found(filefound, key, val, log, gui_window)
  File "[redacted]\extraction.py", line 127, in process_file_found
    globals()[key](filefound)
  File "[redacted]\ilapfuncs.py", line 1124, in mib
    file = open(filename, "r", encoding="utf8")
FileNotFoundError: [Errno 2] No such file or directory: '\\private\\var\\installd\\Library\\Logs\\MobileInstallation\\moile_installation.log.0'

Not sure if something changed but it shuts down the GUI and stops parsing.

tkinter required

Hi! Was helping a friend get this running and I noticed that the GUI would not run on my machine (Fedora 30). I was able to discern from the error that I did not have tkinter installed. I was able to grab that and get things working, but I thought that others may find it helpful to have this called out in the README.

I wasn't able to find tkinter via pip, or I would have just submitted a PR with an updated requirements.txt.

Cheers!

Comments in ilap_artifacts.py with no corresponding script

Recommend for deletion. They don't seem to point to anything anymore.

         'appUpdates':('App Updates', '**/AppUpdates.sqlitedb'),
         'systemVersion':('Device Info', '**/SystemVersion.plist'),

Artifacts take long to run. Useful in specific situations only.
'aggDict':('Aggregate Dictionary', '*/AggregateDictionary/ADDataStore.sqlitedb')

'aggDictScalars':('Aggregate Dictionary', '*/AggregateDictionary/ADDataStore.sqlitedb')

Feature requests

This section is to receive feature requests from the community. Please leave them as a comment below.

Trace back error

Good morning Alexis. While using the GUI, I noticed a trace back error. The html report was created without an issues (I think). The only thing I can think of is that an issue was encountered when creating the CSV report. I don't see it anywhere in the directory containing the html report. Here is the error:

C:\Tools\iLEAPP-master>python ileapp.py --gui
Traceback (most recent call last):
  File "ileapp.py", line 31, in <module>
    gui_event_loop(window)
  File "C:\Tools\iLEAPP-master\ileappGUI.py", line 89, in gui_event_loop
    html2csv(report_folder_base)
  File "C:\Tools\iLEAPP-master\ilapfuncs.py", line 5197, in html2csv
    soup = BeautifulSoup(data, "html.parser")
  File "C:\Program Files\Python37\lib\site-packages\bs4\__init__.py", line 286, in __init__
    markup = markup.read()
  File "C:\Program Files\Python37\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x94 in position 1403: invalid start byte

Tar/zip copy of iOS device

Hi

This is less of an issue and more of a n00b question - so apologies ahead.

iLEAPP GUI doesn't recognise my iPad via USB when I browse to add files/directories. I imagine this is the intended way.

So any pointers to how do I make a tar/zip copy of my device so I can extract it via scp to my computer and throw it at iLEAPP?

Thanks in advance

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.