diff --git a/2026/insomnihack/forensics/.gitattributes b/2026/insomnihack/forensics/.gitattributes
new file mode 100644
index 0000000..b9ef7fa
--- /dev/null
+++ b/2026/insomnihack/forensics/.gitattributes
@@ -0,0 +1 @@
+INS26_SRV1.zip filter=lfs diff=lfs merge=lfs -text
diff --git a/2026/insomnihack/forensics/INS26_SRV1.zip b/2026/insomnihack/forensics/INS26_SRV1.zip
new file mode 100644
index 0000000..bd83d45
--- /dev/null
+++ b/2026/insomnihack/forensics/INS26_SRV1.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:842e81f35e9ea25f1fda40e7e8558c4559fbfdab4e6cc1c19d6ef0aaaf5b0193
+size 2399149752
diff --git a/2026/insomnihack/forensics/usb_exfiltration/.gitattributes b/2026/insomnihack/forensics/usb_exfiltration/.gitattributes
new file mode 100644
index 0000000..49cb57a
--- /dev/null
+++ b/2026/insomnihack/forensics/usb_exfiltration/.gitattributes
@@ -0,0 +1 @@
+Kape_Acquisition.zip filter=lfs diff=lfs merge=lfs -text
diff --git a/2026/insomnihack/forensics/usb_exfiltration/.gitignore b/2026/insomnihack/forensics/usb_exfiltration/.gitignore
new file mode 100644
index 0000000..8e3e6f9
--- /dev/null
+++ b/2026/insomnihack/forensics/usb_exfiltration/.gitignore
@@ -0,0 +1 @@
+Kape_Acquisition
diff --git a/2026/insomnihack/forensics/usb_exfiltration/.python-version b/2026/insomnihack/forensics/usb_exfiltration/.python-version
new file mode 100644
index 0000000..24ee5b1
--- /dev/null
+++ b/2026/insomnihack/forensics/usb_exfiltration/.python-version
@@ -0,0 +1 @@
+3.13
diff --git a/2026/insomnihack/forensics/usb_exfiltration/Kape_Acquisition.zip b/2026/insomnihack/forensics/usb_exfiltration/Kape_Acquisition.zip
new file mode 100644
index 0000000..2866c73
--- /dev/null
+++ b/2026/insomnihack/forensics/usb_exfiltration/Kape_Acquisition.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2cb738e2dc15bd8acb8a3f78729b655507d01f15b16965c5dcee9f9fc87672f1
+size 103816159
diff --git a/2026/insomnihack/forensics/usb_exfiltration/README.md b/2026/insomnihack/forensics/usb_exfiltration/README.md
new file mode 100644
index 0000000..e69de29
diff --git a/2026/insomnihack/forensics/usb_exfiltration/__MACOSX/._Kape_Acquisition b/2026/insomnihack/forensics/usb_exfiltration/__MACOSX/._Kape_Acquisition
new file mode 100755
index 0000000..88c3508
Binary files /dev/null and b/2026/insomnihack/forensics/usb_exfiltration/__MACOSX/._Kape_Acquisition differ
diff --git a/2026/insomnihack/forensics/usb_exfiltration/main.py b/2026/insomnihack/forensics/usb_exfiltration/main.py
new file mode 100644
index 0000000..86ee64e
--- /dev/null
+++ b/2026/insomnihack/forensics/usb_exfiltration/main.py
@@ -0,0 +1,39 @@
+import LnkParse3
+from hashlib import sha1
+from evtx import PyEvtxParser
+import json
+import glob
+import os
+
+# Look at strange LNK files (USB Exfiltration screams at opened file)
+def parse_link():
+ base = "Kape_Acquisition/C/Users/intern/AppData/Roaming/Microsoft/Windows/Recent/"
+ for f in glob.glob(base + '*.lnk'):
+ with open(f, 'rb') as fp:
+ lnk = LnkParse3.lnk_file(fp)
+ print(f'=== {os.path.basename(f)} ===')
+ print(lnk.get_json())
+
+# Get login time
+def get_login_events():
+ parser = PyEvtxParser("Kape_Acquisition/C/Windows/System32/winevt/logs/Security.evtx")
+ for record in parser.records_json():
+ data = json.loads(record['data'])
+ event = data.get('Event', {})
+ eid = event.get('System', {}).get('EventID')
+ if str(eid) == '4624':
+ ed = event.get('EventData', {})
+ user = ed.get('TargetUserName', '')
+ logon_type = ed.get('LogonType')
+ time = event.get('System', {}).get('TimeCreated', {}).get('#attributes', {}).get('SystemTime')
+ if 'intern' in user.lower():
+ print(f"Time: {time} | User: {user} | LogonType: {logon_type}")
+
+def get_flag():
+ logon_time = "2026-03-08T11:33"
+ filename = "Budgets_2025.txt"
+ usb_label = "MyUSBKey2"
+ format = f"{filename};{usb_label};{logon_time}".encode()
+ print(f"INS{{{sha1(format).hexdigest()}}}")
+
+get_flag()
diff --git a/2026/insomnihack/forensics/usb_exfiltration/pyproject.toml b/2026/insomnihack/forensics/usb_exfiltration/pyproject.toml
new file mode 100644
index 0000000..33a5a4c
--- /dev/null
+++ b/2026/insomnihack/forensics/usb_exfiltration/pyproject.toml
@@ -0,0 +1,13 @@
+[project]
+name = "kape-acquisition"
+version = "0.1.0"
+description = "Add your description here"
+readme = "README.md"
+requires-python = ">=3.13"
+dependencies = [
+ "evtx>=0.11.0",
+ "lnkparse3>=1.6.0",
+ "olefile>=0.47",
+ "python-evtx>=0.8.1",
+ "python-registry>=1.3.1",
+]
diff --git a/2026/insomnihack/forensics/usb_exfiltration/uv.lock b/2026/insomnihack/forensics/usb_exfiltration/uv.lock
new file mode 100644
index 0000000..c5e44a4
--- /dev/null
+++ b/2026/insomnihack/forensics/usb_exfiltration/uv.lock
@@ -0,0 +1,141 @@
+version = 1
+revision = 3
+requires-python = ">=3.13"
+
+[[package]]
+name = "enum-compat"
+version = "0.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/41/46/8ed2368976d934652d8f33f1fdd86f5580fab45e890c90a848e83097a093/enum-compat-0.0.3.tar.gz", hash = "sha256:3677daabed56a6f724451d585662253d8fb4e5569845aafa8bb0da36b1a8751e", size = 1389, upload-time = "2019-10-14T18:48:35.264Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/55/ae/467bc4509246283bb59746e21a1a2f5a8aecbef56b1fa6eaca78cd438c8b/enum_compat-0.0.3-py3-none-any.whl", hash = "sha256:88091b617c7fc3bbbceae50db5958023c48dc40b50520005aa3bf27f8f7ea157", size = 1322, upload-time = "2019-10-14T18:48:37.663Z" },
+]
+
+[[package]]
+name = "evtx"
+version = "0.11.0"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3d/e4/4f037f7d5240895d50298d1999add7745f0611f41994dcb7df153a2e3b5e/evtx-0.11.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:65ff5e669ff177d7d44e09eb8cc01b9954c1376d8649c48b5e068da87f55e2dc", size = 2067188, upload-time = "2026-01-03T19:55:41.135Z" },
+ { url = "https://files.pythonhosted.org/packages/28/9c/dc1f47ae38f5c870dfeafbdf3aae8c6290495970fd36debda630b2fe81e7/evtx-0.11.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:3f4a6b55e08d2c7574fbf795dc89e5d1650398f861352fae52eae31a661c678a", size = 1049986, upload-time = "2026-01-03T19:55:43.014Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/c5/1e870a5f8f0c739290a8b444193afaddfaea265a383e4fd65f7cb4dcdc81/evtx-0.11.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddd5b8cfdf17e499d2567ad4507cb67a4869a08d2d43b3edd59a5a3a078495f6", size = 998295, upload-time = "2026-01-03T19:55:44.377Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/63/ddb76b146b94ed7cd62a02d0bfb3351a946e8bad3bf6ea30ab7df84ffe3a/evtx-0.11.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40cb8df5d46cdd16bde5bf57b30b807d00045685f19a98ba7fd436c8f05873b7", size = 1151401, upload-time = "2026-01-03T19:55:46.029Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/87/9d111a712c10ae9f97a2cfe100e4e13599282e65afa1d7b382dd5a0ff0f0/evtx-0.11.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d4bff9597dab57c654189711d99dd6a0ba1ae8f4fb49983f0174d66e82c8e7b1", size = 996628, upload-time = "2026-01-03T19:55:47.756Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/67/03da43b5ac81da36e853bbffec93503c7f2e8cca218eeb766b278386b8d6/evtx-0.11.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:745d159ef1b78bbb4c6c2a13f431accc707b352d1ceba28c60d4a81230f3588d", size = 1029681, upload-time = "2026-01-03T19:55:49.603Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/c7/5c111df5f5c7b37de79fb0bd0fdf0d589e3514af98ffb10977fc62a533ec/evtx-0.11.0-cp310-abi3-win_amd64.whl", hash = "sha256:9efc9579a1de57b44e5a2371e960056490fae55d898ee3499ebd35b60fbd983c", size = 876197, upload-time = "2026-01-03T19:55:50.984Z" },
+]
+
+[[package]]
+name = "hexdump"
+version = "3.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/55/b3/279b1d57fa3681725d0db8820405cdcb4e62a9239c205e4ceac4391c78e4/hexdump-3.3.zip", hash = "sha256:d781a43b0c16ace3f9366aade73e8ad3a7bd5137d58f0b45ab2d3f54876f20db", size = 12658, upload-time = "2016-01-22T14:40:19.589Z" }
+
+[[package]]
+name = "kape-acquisition"
+version = "0.1.0"
+source = { virtual = "." }
+dependencies = [
+ { name = "evtx" },
+ { name = "lnkparse3" },
+ { name = "olefile" },
+ { name = "python-evtx" },
+ { name = "python-registry" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "evtx", specifier = ">=0.11.0" },
+ { name = "lnkparse3", specifier = ">=1.6.0" },
+ { name = "olefile", specifier = ">=0.47" },
+ { name = "python-evtx", specifier = ">=0.8.1" },
+ { name = "python-registry", specifier = ">=1.3.1" },
+]
+
+[[package]]
+name = "lnkparse3"
+version = "1.6.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/47/08/0ab4666bcc6ce5aa43642cc6c75e1718417911952c0667d6c19eec0fbcd5/lnkparse3-1.6.0.tar.gz", hash = "sha256:519e6af6193b3d1802e1ec118a531ee3ca5a39d31137b507c0f19a0d437bd8ba", size = 35605, upload-time = "2026-02-27T09:54:17.269Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/47/7f/3998a1902e88b556679118cdc052fd87ee180b8782c925585e77a176371a/lnkparse3-1.6.0-py3-none-any.whl", hash = "sha256:7b3b1289e99992a4d3901d80ac9ab87fa8de854b2bffe5c4011453b093038b50", size = 52640, upload-time = "2026-02-27T09:54:15.81Z" },
+]
+
+[[package]]
+name = "olefile"
+version = "0.47"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/69/1b/077b508e3e500e1629d366249c3ccb32f95e50258b231705c09e3c7a4366/olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c", size = 112240, upload-time = "2023-12-01T16:22:53.025Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/17/d3/b64c356a907242d719fc668b71befd73324e47ab46c8ebbbede252c154b2/olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f", size = 114565, upload-time = "2023-12-01T16:22:51.518Z" },
+]
+
+[[package]]
+name = "python-evtx"
+version = "0.8.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "hexdump" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/34/44/e28f31531834b1cd93d14472ec84136dad565e9db0f7abcbae96176c1e65/python_evtx-0.8.1.tar.gz", hash = "sha256:e96cea25536a3de5074af7f1bdbf011084d09c2e00664ab754d979820ed75fea", size = 28324, upload-time = "2025-05-02T08:24:38Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/32/12/f16a7a2f118a07649633b8f72803b932c8d9f0d24a2822cc08a1879ddf6f/python_evtx-0.8.1-py3-none-any.whl", hash = "sha256:46336b854dbe0a1e75873ae30db5f583c9d2262ff1d21bdb6b1e624ecfa18ddb", size = 26725, upload-time = "2025-05-02T08:24:36.279Z" },
+]
+
+[[package]]
+name = "python-registry"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "enum-compat" },
+ { name = "unicodecsv" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a4/82/c9ae8e9764eae863a4d63c05d5f2d767e392b523c2976c16c56f9a3b17b4/python-registry-1.3.1.tar.gz", hash = "sha256:99185f67d5601be3e7843e55902d5769aea1740869b0882f34ff1bd4b43b1eb2", size = 20336, upload-time = "2019-05-08T19:47:00.918Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f1/0f/2605f98bb9c7ef92f926fdf3295583363fe42fc6e8f64cf38b24a029e767/python_registry-1.3.1-py3-none-any.whl", hash = "sha256:b5b8ae07c271dce12dacd24e16af8aa8d56167ebdb360112a4f152b6d04a4ca9", size = 23553, upload-time = "2019-05-08T19:46:59.5Z" },
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" },
+ { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" },
+ { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" },
+ { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" },
+ { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" },
+ { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" },
+ { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
+ { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
+ { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" },
+ { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" },
+ { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" },
+ { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
+]
+
+[[package]]
+name = "unicodecsv"
+version = "0.14.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6f/a4/691ab63b17505a26096608cc309960b5a6bdf39e4ba1a793d5f9b1a53270/unicodecsv-0.14.1.tar.gz", hash = "sha256:018c08037d48649a0412063ff4eda26eaa81eff1546dbffa51fa5293276ff7fc", size = 10267, upload-time = "2015-09-22T22:00:19.516Z" }
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/.gitignore b/2026/insomnihack/mobile/peaky_blinders/exploit/.gitignore
new file mode 100644
index 0000000..aa724b7
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/.gitignore b/2026/insomnihack/mobile/peaky_blinders/exploit/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/build.gradle.kts b/2026/insomnihack/mobile/peaky_blinders/exploit/app/build.gradle.kts
new file mode 100644
index 0000000..39a8cfe
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/build.gradle.kts
@@ -0,0 +1,58 @@
+plugins {
+ alias(libs.plugins.android.application)
+ alias(libs.plugins.kotlin.compose)
+}
+
+android {
+ namespace = "com.example.peakyblindersexploit"
+ compileSdk {
+ version = release(36) {
+ minorApiLevel = 1
+ }
+ }
+
+ defaultConfig {
+ applicationId = "com.example.peakyblindersexploit"
+ minSdk = 24
+ targetSdk = 36
+ versionCode = 1
+ versionName = "1.0"
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_11
+ targetCompatibility = JavaVersion.VERSION_11
+ }
+ buildFeatures {
+ compose = true
+ }
+}
+
+dependencies {
+ implementation(libs.androidx.core.ktx)
+ implementation(libs.androidx.lifecycle.runtime.ktx)
+ implementation(libs.androidx.activity.compose)
+ implementation(platform(libs.androidx.compose.bom))
+ implementation(libs.androidx.compose.ui)
+ implementation(libs.androidx.compose.ui.graphics)
+ implementation(libs.androidx.compose.ui.tooling.preview)
+ implementation(libs.androidx.compose.material3)
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.androidx.junit)
+ androidTestImplementation(libs.androidx.espresso.core)
+ androidTestImplementation(platform(libs.androidx.compose.bom))
+ androidTestImplementation(libs.androidx.compose.ui.test.junit4)
+ debugImplementation(libs.androidx.compose.ui.tooling)
+ debugImplementation(libs.androidx.compose.ui.test.manifest)
+}
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/proguard-rules.pro b/2026/insomnihack/mobile/peaky_blinders/exploit/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/androidTest/java/com/example/peakyblindersexploit/ExampleInstrumentedTest.kt b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/androidTest/java/com/example/peakyblindersexploit/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..53bc443
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/androidTest/java/com/example/peakyblindersexploit/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.example.peakyblindersexploit
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.example.peakyblindersexploit", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/AndroidManifest.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..b894a66
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/AndroidManifest.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/aidl/com/peaky/binders/IPeakyService.aidl b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/aidl/com/peaky/binders/IPeakyService.aidl
new file mode 100644
index 0000000..e69de29
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/AchievementReceiver.kt b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/AchievementReceiver.kt
new file mode 100644
index 0000000..633e365
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/AchievementReceiver.kt
@@ -0,0 +1,4 @@
+package com.example.peakyblindersexploit
+
+class AchievementReceiver {
+}
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/MainActivity.kt b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/MainActivity.kt
new file mode 100644
index 0000000..eb8c430
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/MainActivity.kt
@@ -0,0 +1,47 @@
+package com.example.peakyblindersexploit
+
+import android.os.Bundle
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.activity.enableEdgeToEdge
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.tooling.preview.Preview
+import com.example.peakyblindersexploit.ui.theme.PeakyBlindersExploitTheme
+
+class MainActivity : ComponentActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContent {
+ PeakyBlindersExploitTheme {
+ Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
+ Greeting(
+ name = "Android",
+ modifier = Modifier.padding(innerPadding)
+ )
+ }
+ }
+ }
+ }
+}
+
+@Composable
+fun Greeting(name: String, modifier: Modifier = Modifier) {
+ Text(
+ text = "Hello $name!",
+ modifier = modifier
+ )
+}
+
+@Preview(showBackground = true)
+@Composable
+fun GreetingPreview() {
+ PeakyBlindersExploitTheme {
+ Greeting("Android")
+ }
+}
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/ui/theme/Color.kt b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/ui/theme/Color.kt
new file mode 100644
index 0000000..af8f42f
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/ui/theme/Color.kt
@@ -0,0 +1,11 @@
+package com.example.peakyblindersexploit.ui.theme
+
+import androidx.compose.ui.graphics.Color
+
+val Purple80 = Color(0xFFD0BCFF)
+val PurpleGrey80 = Color(0xFFCCC2DC)
+val Pink80 = Color(0xFFEFB8C8)
+
+val Purple40 = Color(0xFF6650a4)
+val PurpleGrey40 = Color(0xFF625b71)
+val Pink40 = Color(0xFF7D5260)
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/ui/theme/Theme.kt b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/ui/theme/Theme.kt
new file mode 100644
index 0000000..3733fa2
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/ui/theme/Theme.kt
@@ -0,0 +1,58 @@
+package com.example.peakyblindersexploit.ui.theme
+
+import android.app.Activity
+import android.os.Build
+import androidx.compose.foundation.isSystemInDarkTheme
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.darkColorScheme
+import androidx.compose.material3.dynamicDarkColorScheme
+import androidx.compose.material3.dynamicLightColorScheme
+import androidx.compose.material3.lightColorScheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.platform.LocalContext
+
+private val DarkColorScheme = darkColorScheme(
+ primary = Purple80,
+ secondary = PurpleGrey80,
+ tertiary = Pink80
+)
+
+private val LightColorScheme = lightColorScheme(
+ primary = Purple40,
+ secondary = PurpleGrey40,
+ tertiary = Pink40
+
+ /* Other default colors to override
+ background = Color(0xFFFFFBFE),
+ surface = Color(0xFFFFFBFE),
+ onPrimary = Color.White,
+ onSecondary = Color.White,
+ onTertiary = Color.White,
+ onBackground = Color(0xFF1C1B1F),
+ onSurface = Color(0xFF1C1B1F),
+ */
+)
+
+@Composable
+fun PeakyBlindersExploitTheme(
+ darkTheme: Boolean = isSystemInDarkTheme(),
+ // Dynamic color is available on Android 12+
+ dynamicColor: Boolean = true,
+ content: @Composable () -> Unit
+) {
+ val colorScheme = when {
+ dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
+ val context = LocalContext.current
+ if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
+ }
+
+ darkTheme -> DarkColorScheme
+ else -> LightColorScheme
+ }
+
+ MaterialTheme(
+ colorScheme = colorScheme,
+ typography = Typography,
+ content = content
+ )
+}
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/ui/theme/Type.kt b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/ui/theme/Type.kt
new file mode 100644
index 0000000..125e071
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/java/com/example/peakyblindersexploit/ui/theme/Type.kt
@@ -0,0 +1,34 @@
+package com.example.peakyblindersexploit.ui.theme
+
+import androidx.compose.material3.Typography
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.sp
+
+// Set of Material typography styles to start with
+val Typography = Typography(
+ bodyLarge = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 16.sp,
+ lineHeight = 24.sp,
+ letterSpacing = 0.5.sp
+ )
+ /* Other default text styles to override
+ titleLarge = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Normal,
+ fontSize = 22.sp,
+ lineHeight = 28.sp,
+ letterSpacing = 0.sp
+ ),
+ labelSmall = TextStyle(
+ fontFamily = FontFamily.Default,
+ fontWeight = FontWeight.Medium,
+ fontSize = 11.sp,
+ lineHeight = 16.sp,
+ letterSpacing = 0.5.sp
+ )
+ */
+)
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/drawable/ic_launcher_background.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/drawable/ic_launcher_foreground.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..6f3b755
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..6f3b755
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..c209e78
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..b2dfe3d
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..4f0f1d6
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..62b611d
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..948a307
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..1b9a695
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..28d4b77
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9287f50
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..aa7d642
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9126ae3
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/values/colors.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..f8c6127
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/values/strings.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..9e4905c
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ PeakyBlindersExploit
+
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/values/themes.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..7828233
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/values/themes.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/xml/backup_rules.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/xml/backup_rules.xml
new file mode 100644
index 0000000..4df9255
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/xml/data_extraction_rules.xml b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 0000000..9ee9997
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/test/java/com/example/peakyblindersexploit/ExampleUnitTest.kt b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/test/java/com/example/peakyblindersexploit/ExampleUnitTest.kt
new file mode 100644
index 0000000..356dfea
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/app/src/test/java/com/example/peakyblindersexploit/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.example.peakyblindersexploit
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/build.gradle.kts b/2026/insomnihack/mobile/peaky_blinders/exploit/build.gradle.kts
new file mode 100644
index 0000000..18318be
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/build.gradle.kts
@@ -0,0 +1,5 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.kotlin.compose) apply false
+}
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/gradle.properties b/2026/insomnihack/mobile/peaky_blinders/exploit/gradle.properties
new file mode 100644
index 0000000..34c5e9e
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/gradle.properties
@@ -0,0 +1,15 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. For more details, visit
+# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
+# org.gradle.parallel=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
\ No newline at end of file
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/gradle/libs.versions.toml b/2026/insomnihack/mobile/peaky_blinders/exploit/gradle/libs.versions.toml
new file mode 100644
index 0000000..38d6b4f
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/gradle/libs.versions.toml
@@ -0,0 +1,31 @@
+[versions]
+agp = "9.1.0"
+coreKtx = "1.10.1"
+junit = "4.13.2"
+junitVersion = "1.1.5"
+espressoCore = "3.5.1"
+lifecycleRuntimeKtx = "2.6.1"
+activityCompose = "1.8.0"
+kotlin = "2.2.10"
+composeBom = "2024.09.00"
+
+[libraries]
+androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
+junit = { group = "junit", name = "junit", version.ref = "junit" }
+androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
+androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
+androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }
+androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
+androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
+androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" }
+androidx-compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
+androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
+androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
+androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
+androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
+androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
+
+[plugins]
+android-application = { id = "com.android.application", version.ref = "agp" }
+kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
+
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/gradle/wrapper/gradle-wrapper.jar b/2026/insomnihack/mobile/peaky_blinders/exploit/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..8bdaf60
Binary files /dev/null and b/2026/insomnihack/mobile/peaky_blinders/exploit/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/gradle/wrapper/gradle-wrapper.properties b/2026/insomnihack/mobile/peaky_blinders/exploit/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..e730feb
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,9 @@
+#Fri Mar 20 20:01:17 CET 2026
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionSha256Sum=b266d5ff6b90eada6dc3b20cb090e3731302e553a27c5d3e4df1f0d76beaff06
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/gradlew b/2026/insomnihack/mobile/peaky_blinders/exploit/gradlew
new file mode 100755
index 0000000..ef07e01
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/gradlew
@@ -0,0 +1,251 @@
+#!/bin/sh
+
+#
+# Copyright © 2015 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH="\\\"\\\""
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/gradlew.bat b/2026/insomnihack/mobile/peaky_blinders/exploit/gradlew.bat
new file mode 100644
index 0000000..5eed7ee
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/gradlew.bat
@@ -0,0 +1,94 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/2026/insomnihack/mobile/peaky_blinders/exploit/settings.gradle.kts b/2026/insomnihack/mobile/peaky_blinders/exploit/settings.gradle.kts
new file mode 100644
index 0000000..688ab1b
--- /dev/null
+++ b/2026/insomnihack/mobile/peaky_blinders/exploit/settings.gradle.kts
@@ -0,0 +1,26 @@
+pluginManagement {
+ repositories {
+ google {
+ content {
+ includeGroupByRegex("com\\.android.*")
+ includeGroupByRegex("com\\.google.*")
+ includeGroupByRegex("androidx.*")
+ }
+ }
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+plugins {
+ id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.name = "PeakyBlindersExploit"
+include(":app")