1
mirror of https://github.com/mvt-project/mvt synced 2025-11-13 01:37:36 +01:00

Compare commits

..

6 Commits

Author SHA1 Message Date
Rory Flynn
dbb80d6320 Mark release 2.6.0 (#601) 2025-01-27 15:41:41 +01:00
Rory Flynn
a2493baead Documentation tweaks (#599)
* Adds link in install instructions to the command completion docs added in #597
* Small visual tweaks
2025-01-14 13:12:10 +01:00
Nim
0dc6228a59 Add command completion docs (#410) (#597)
Co-authored-by: Rory Flynn <75283103+roaree@users.noreply.github.com>
2025-01-14 12:04:07 +01:00
Rory Flynn
6e230bdb6a Autofix for ruff (#598) 2025-01-14 12:02:10 +01:00
Tek
2aa76c8a1c Fixes a bug on recent phones not having WIFI column in net usage (#580)
Co-authored-by: Donncha Ó Cearbhaill <donncha.ocearbhaill@amnesty.org>
Co-authored-by: Rory Flynn <75283103+roaree@users.noreply.github.com>
2025-01-07 12:48:35 +01:00
github-actions[bot]
7d6dc9e6dc Add new iOS versions and build numbers (#595)
Co-authored-by: DonnchaC <DonnchaC@users.noreply.github.com>
2025-01-07 12:07:57 +01:00
5 changed files with 86 additions and 46 deletions

View File

@@ -8,7 +8,7 @@ To enable it, you need to manually register a special function with your shell,
The following describes how to generate the command completion scripts and add them to your shell configuration. The following describes how to generate the command completion scripts and add them to your shell configuration.
`You will need to start a new shell for the changes to take effect.` > **Note: You will need to start a new shell for the changes to take effect.**
### For Bash ### For Bash
@@ -16,8 +16,11 @@ The following describes how to generate the command completion scripts and add t
# Generates bash completion scripts # Generates bash completion scripts
echo "$(_MVT_IOS_COMPLETE=bash_source mvt-ios)" > ~/.mvt-ios-complete.bash && echo "$(_MVT_IOS_COMPLETE=bash_source mvt-ios)" > ~/.mvt-ios-complete.bash &&
echo "$(_MVT_ANDROID_COMPLETE=bash_source mvt-android)" > ~/.mvt-android-complete.bash echo "$(_MVT_ANDROID_COMPLETE=bash_source mvt-android)" > ~/.mvt-android-complete.bash
```
# Sources the scripts in ~/.bashrc. Add the following to `~/.bashrc`:
```bash
# source mvt completion scripts
. ~/.mvt-ios-complete.bash && . ~/.mvt-android-complete.bash . ~/.mvt-ios-complete.bash && . ~/.mvt-android-complete.bash
``` ```
@@ -27,8 +30,11 @@ echo "$(_MVT_ANDROID_COMPLETE=bash_source mvt-android)" > ~/.mvt-android-complet
# Generates zsh completion scripts # Generates zsh completion scripts
echo "$(_MVT_IOS_COMPLETE=zsh_source mvt-ios)" > ~/.mvt-ios-complete.zsh && echo "$(_MVT_IOS_COMPLETE=zsh_source mvt-ios)" > ~/.mvt-ios-complete.zsh &&
echo "$(_MVT_ANDROID_COMPLETE=zsh_source mvt-android)" > ~/.mvt-android-complete.zsh echo "$(_MVT_ANDROID_COMPLETE=zsh_source mvt-android)" > ~/.mvt-android-complete.zsh
```
# Sources the scripts in ~/.zshrc. Add the following to `~/.zshrc`:
```bash
# source mvt completion scripts
. ~/.mvt-ios-complete.zsh && . ~/.mvt-android-complete.zsh . ~/.mvt-ios-complete.zsh && . ~/.mvt-android-complete.zsh
``` ```

View File

@@ -98,3 +98,7 @@ You now should have the `mvt-ios` and `mvt-android` utilities installed.
**Notes:** **Notes:**
1. The `--force` flag is necessary to force the reinstallation of the package. 1. The `--force` flag is necessary to force the reinstallation of the package.
2. To revert to using a PyPI version, it will be necessary to `pipx uninstall mvt` first. 2. To revert to using a PyPI version, it will be necessary to `pipx uninstall mvt` first.
## Setting up command completions
See ["Command completions"](command_completion.md)

View File

@@ -3,4 +3,4 @@
# Use of this software is governed by the MVT License 1.1 that can be found at # Use of this software is governed by the MVT License 1.1 that can be found at
# https://license.mvt.re/1.1/ # https://license.mvt.re/1.1/
MVT_VERSION = "2.5.4" MVT_VERSION = "2.6.0"

View File

@@ -1095,5 +1095,9 @@
{ {
"version": "18.2", "version": "18.2",
"build": "22C152" "build": "22C152"
},
{
"version": "18.2.1",
"build": "22C161"
} }
] ]

View File

@@ -38,44 +38,70 @@ class NetBase(IOSExtraction):
def _extract_net_data(self): def _extract_net_data(self):
conn = sqlite3.connect(self.file_path) conn = sqlite3.connect(self.file_path)
conn.row_factory = sqlite3.Row
cur = conn.cursor() cur = conn.cursor()
cur.execute( try:
cur.execute(
"""
SELECT
ZPROCESS.ZFIRSTTIMESTAMP,
ZPROCESS.ZTIMESTAMP,
ZPROCESS.ZPROCNAME,
ZPROCESS.ZBUNDLENAME,
ZPROCESS.Z_PK AS ZPROCESS_PK,
ZLIVEUSAGE.ZWIFIIN,
ZLIVEUSAGE.ZWIFIOUT,
ZLIVEUSAGE.ZWWANIN,
ZLIVEUSAGE.ZWWANOUT,
ZLIVEUSAGE.Z_PK AS ZLIVEUSAGE_PK,
ZLIVEUSAGE.ZHASPROCESS,
ZLIVEUSAGE.ZTIMESTAMP AS ZL_TIMESTAMP
FROM ZLIVEUSAGE
LEFT JOIN ZPROCESS ON ZLIVEUSAGE.ZHASPROCESS = ZPROCESS.Z_PK
UNION
SELECT ZFIRSTTIMESTAMP, ZTIMESTAMP, ZPROCNAME, ZBUNDLENAME, Z_PK,
NULL, NULL, NULL, NULL, NULL, NULL, NULL
FROM ZPROCESS WHERE Z_PK NOT IN
(SELECT ZHASPROCESS FROM ZLIVEUSAGE);
""" """
SELECT )
ZPROCESS.ZFIRSTTIMESTAMP, except sqlite3.OperationalError:
ZPROCESS.ZTIMESTAMP, # Recent phones don't have ZWIFIIN and ZWIFIOUT columns
ZPROCESS.ZPROCNAME, cur.execute(
ZPROCESS.ZBUNDLENAME, """
ZPROCESS.Z_PK, SELECT
ZLIVEUSAGE.ZWIFIIN, ZPROCESS.ZFIRSTTIMESTAMP,
ZLIVEUSAGE.ZWIFIOUT, ZPROCESS.ZTIMESTAMP,
ZLIVEUSAGE.ZWWANIN, ZPROCESS.ZPROCNAME,
ZLIVEUSAGE.ZWWANOUT, ZPROCESS.ZBUNDLENAME,
ZLIVEUSAGE.Z_PK, ZPROCESS.Z_PK AS ZPROCESS_PK,
ZLIVEUSAGE.ZHASPROCESS, ZLIVEUSAGE.ZWWANIN,
ZLIVEUSAGE.ZTIMESTAMP ZLIVEUSAGE.ZWWANOUT,
FROM ZLIVEUSAGE ZLIVEUSAGE.Z_PK AS ZLIVEUSAGE_PK,
LEFT JOIN ZPROCESS ON ZLIVEUSAGE.ZHASPROCESS = ZPROCESS.Z_PK ZLIVEUSAGE.ZHASPROCESS,
UNION ZLIVEUSAGE.ZTIMESTAMP AS ZL_TIMESTAMP
SELECT ZFIRSTTIMESTAMP, ZTIMESTAMP, ZPROCNAME, ZBUNDLENAME, Z_PK, FROM ZLIVEUSAGE
NULL, NULL, NULL, NULL, NULL, NULL, NULL LEFT JOIN ZPROCESS ON ZLIVEUSAGE.ZHASPROCESS = ZPROCESS.Z_PK
FROM ZPROCESS WHERE Z_PK NOT IN UNION
(SELECT ZHASPROCESS FROM ZLIVEUSAGE); SELECT ZFIRSTTIMESTAMP, ZTIMESTAMP, ZPROCNAME, ZBUNDLENAME, Z_PK,
""" NULL, NULL, NULL, NULL, NULL
) FROM ZPROCESS WHERE Z_PK NOT IN
(SELECT ZHASPROCESS FROM ZLIVEUSAGE);
"""
)
for row in cur: for row in cur:
# ZPROCESS records can be missing after the JOIN. # ZPROCESS records can be missing after the JOIN.
# Handle NULL timestamps. # Handle NULL timestamps.
if row[0] and row[1]: if row["ZFIRSTTIMESTAMP"] and row["ZTIMESTAMP"]:
first_isodate = convert_mactime_to_iso(row[0]) first_isodate = convert_mactime_to_iso(row["ZFIRSTTIMESTAMP"])
isodate = convert_mactime_to_iso(row[1]) isodate = convert_mactime_to_iso(row["ZTIMESTAMP"])
else: else:
first_isodate = row[0] first_isodate = row["ZFIRSTTIMESTAMP"]
isodate = row[1] isodate = row["ZTIMESTAMP"]
if row[11]: if row["ZL_TIMESTAMP"]:
live_timestamp = convert_mactime_to_iso(row[11]) live_timestamp = convert_mactime_to_iso(row["ZL_TIMESTAMP"])
else: else:
live_timestamp = "" live_timestamp = ""
@@ -83,16 +109,18 @@ class NetBase(IOSExtraction):
{ {
"first_isodate": first_isodate, "first_isodate": first_isodate,
"isodate": isodate, "isodate": isodate,
"proc_name": row[2], "proc_name": row["ZPROCNAME"],
"bundle_id": row[3], "bundle_id": row["ZBUNDLENAME"],
"proc_id": row[4], "proc_id": row["ZPROCESS_PK"],
"wifi_in": row[5], "wifi_in": row["ZWIFIIN"] if "ZWIFIIN" in row.keys() else None,
"wifi_out": row[6], "wifi_out": row["ZWIFIOUT"] if "ZWIFIOUT" in row.keys() else None,
"wwan_in": row[7], "wwan_in": row["ZWWANIN"],
"wwan_out": row[8], "wwan_out": row["ZWWANOUT"],
"live_id": row[9], "live_id": row["ZLIVEUSAGE_PK"],
"live_proc_id": row[10], "live_proc_id": row["ZHASPROCESS"],
"live_isodate": live_timestamp if row[11] else first_isodate, "live_isodate": live_timestamp
if row["ZL_TIMESTAMP"]
else first_isodate,
} }
) )
@@ -108,8 +136,6 @@ class NetBase(IOSExtraction):
) )
record_data_usage = ( record_data_usage = (
record_data + " " record_data + " "
f"WIFI IN: {record['wifi_in']}, "
f"WIFI OUT: {record['wifi_out']} - "
f"WWAN IN: {record['wwan_in']}, " f"WWAN IN: {record['wwan_in']}, "
f"WWAN OUT: {record['wwan_out']}" f"WWAN OUT: {record['wwan_out']}"
) )