diff --git a/Cargo.lock b/Cargo.lock
index c6936f7..06fb395 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -69,6 +69,12 @@ version = "3.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
[[package]]
name = "cc"
version = "1.1.15"
@@ -312,6 +318,7 @@ version = "0.1.0"
dependencies = [
"anyhow",
"base64",
+ "byteorder",
"itertools",
"thiserror",
]
diff --git a/um_crypto/qmc/Cargo.toml b/um_crypto/qmc/Cargo.toml
index 70caf28..a4fd420 100644
--- a/um_crypto/qmc/Cargo.toml
+++ b/um_crypto/qmc/Cargo.toml
@@ -8,3 +8,4 @@ base64 = "0.22.1"
itertools = "0.13.0"
anyhow = "1.0.86"
thiserror = "1.0.63"
+byteorder = "1.5.0"
diff --git a/um_crypto/qmc/src/footer/android_qtag.rs b/um_crypto/qmc/src/footer/android_qtag.rs
new file mode 100644
index 0000000..b759742
--- /dev/null
+++ b/um_crypto/qmc/src/footer/android_qtag.rs
@@ -0,0 +1,51 @@
+use crate::footer::utils::is_base64;
+use crate::footer::{Data, FooterParseError, Metadata, MetadataParser};
+use byteorder::{ByteOrder, BE};
+use itertools::Itertools;
+
+#[derive(Debug, Clone, PartialEq)]
+pub struct QTagMetadata {
+ /// The old, numeric id of the resource.
+ pub resource_id: u64,
+}
+
+impl MetadataParser for QTagMetadata {
+ fn from_byte_slice(buffer: &[u8]) -> anyhow::Result