From f6a11d10b5d1b8796e1067ad2b322a2c043eaee2 Mon Sep 17 00:00:00 2001 From: sideup66 <47700565+sideup66@users.noreply.github.com> Date: Tue, 10 Sep 2024 00:05:09 -0400 Subject: [PATCH 1/7] Update S09dnsmasq Added logic to use the newly included dnsmasq process from Wyze on newer firmwares. First, the script will detect the newer dnsmasq process if present and kill it, next, it will determine if the newer dnsmasq binary IS present and start dnsmasq back up using our config from wz_mini. If not, it will simply launch wz_mini's build of dnsmasq. This effectively fixes the script for newer versions of the Wyze firmware. --- SD_ROOT/wz_mini/etc/network.d/S09dnsmasq | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq b/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq index b416c398..9703b7c2 100644 --- a/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq +++ b/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq @@ -17,7 +17,17 @@ dnsmasq_launch() { if [[ "$ENABLE_LOCAL_DNS" == "true" ]]; then echo "wait for resolv.conf creation from iCamera" sleep 5 - dnsmasq -C /opt/wz_mini/etc/dnsmasq.conf + #kill the system dnsmasq if present + dmon_pid=$(pgrep -f "dmon.*dnsmasq") + if [ -n "$dmon_pid" ]; then + kill $dmon_pid + fi + #figure out if there is a system dnsmasq bin present and use that if so, otherwise use wz_mini's binary + if [ -f /system/bin/dnsmasq ]; then + /system/bin/dnsmasq -C /opt/wz_mini/etc/dnsmasq.conf & + else + /opt/wz_mini/bin/dnsmasq -C /opt/wz_mini/etc/dnsmasq.conf + fi rm -f /tmp/resolv.conf cp /opt/wz_mini/etc/resolv.conf /tmp/resolv.conf echo "dnsmasq enabled" From a0c6ed537064a43e55e8abf0716ec36b996a4236 Mon Sep 17 00:00:00 2001 From: sideup66 <47700565+sideup66@users.noreply.github.com> Date: Fri, 13 Sep 2024 22:55:19 -0400 Subject: [PATCH 2/7] Update S09dnsmasq small delay, noticed that somtimes on startup the resolv.conf doesnt copy right... --- SD_ROOT/wz_mini/etc/network.d/S09dnsmasq | 1 + 1 file changed, 1 insertion(+) diff --git a/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq b/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq index 9703b7c2..dc981657 100644 --- a/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq +++ b/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq @@ -28,6 +28,7 @@ dnsmasq_launch() { else /opt/wz_mini/bin/dnsmasq -C /opt/wz_mini/etc/dnsmasq.conf fi + sleep 3 rm -f /tmp/resolv.conf cp /opt/wz_mini/etc/resolv.conf /tmp/resolv.conf echo "dnsmasq enabled" From e1db89084387f82c14e147acaba373c5d945c809 Mon Sep 17 00:00:00 2001 From: sideup66 <47700565+sideup66@users.noreply.github.com> Date: Wed, 16 Oct 2024 22:41:07 -0400 Subject: [PATCH 3/7] Update S09dnsmasq Fixes to DnsMasq as something (Icamera, maybe?) would keep overwriting the file with a simple copy. This will remount it and make the resolv.conf read only. --- SD_ROOT/wz_mini/etc/network.d/S09dnsmasq | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq b/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq index dc981657..1c72a312 100644 --- a/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq +++ b/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq @@ -28,9 +28,10 @@ dnsmasq_launch() { else /opt/wz_mini/bin/dnsmasq -C /opt/wz_mini/etc/dnsmasq.conf fi - sleep 3 - rm -f /tmp/resolv.conf - cp /opt/wz_mini/etc/resolv.conf /tmp/resolv.conf + sleep 5 + #mount the resolv.conf file as read only. Something (ICamera?) randomly seems to change it. + mount --bind /opt/wz_mini/etc/resolv.conf /tmp/resolv.conf + mount -o bind,remount,ro /tmp/resolv.conf echo "dnsmasq enabled" fi } From 547b2d5d5644ada24bc1d5f87f27aa16a380c2d7 Mon Sep 17 00:00:00 2001 From: sideup66 <47700565+sideup66@users.noreply.github.com> Date: Wed, 16 Oct 2024 22:47:44 -0400 Subject: [PATCH 4/7] Update wz_mini.conf Add option for spoofing firmware version --- SD_ROOT/wz_mini/wz_mini.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/SD_ROOT/wz_mini/wz_mini.conf b/SD_ROOT/wz_mini/wz_mini.conf index 33b5e98c..f5b7b5b1 100644 --- a/SD_ROOT/wz_mini/wz_mini.conf +++ b/SD_ROOT/wz_mini/wz_mini.conf @@ -103,6 +103,7 @@ ENABLE_USB_STORAGE="false" ENABLE_EXT4="false" ENABLE_CIFS="false" DISABLE_FW_UPGRADE="true" +SPOOF_FW_VER="true" AUDIO_PROMPT_VOLUME="50" ENABLE_MP4_WRITE="false" NIGHT_DROP_DISABLE="false" From 8765c2e194d1f531041f59bce9623b3d0a57c6dc Mon Sep 17 00:00:00 2001 From: sideup66 <47700565+sideup66@users.noreply.github.com> Date: Wed, 16 Oct 2024 23:05:10 -0400 Subject: [PATCH 5/7] Breaking firmware spoofing out into its own setting, rather than enabling with blocking. --- .vs/ProjectSettings.json | 3 ++ .vs/VSWorkspaceState.json | 7 ++++ .vs/slnx.sqlite | Bin 0 -> 139264 bytes ...ba48046c-cca0-4c55-8e1b-417e1e7082c0.vsidx | Bin 0 -> 4135 bytes .vs/wz_mini_hacks/FileContentIndex/read.lock | 0 .vs/wz_mini_hacks/v17/.wsuo | Bin 0 -> 28672 bytes SD_ROOT/wz_mini/etc/rc.d/S10firmware | 17 --------- SD_ROOT/wz_mini/etc/rc.d/S11spoofing | 36 ++++++++++++++++++ SD_ROOT/wz_mini/etc/wz_mini.conf.dist | 1 + 9 files changed, 47 insertions(+), 17 deletions(-) create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite create mode 100644 .vs/wz_mini_hacks/FileContentIndex/ba48046c-cca0-4c55-8e1b-417e1e7082c0.vsidx create mode 100644 .vs/wz_mini_hacks/FileContentIndex/read.lock create mode 100644 .vs/wz_mini_hacks/v17/.wsuo create mode 100644 SD_ROOT/wz_mini/etc/rc.d/S11spoofing diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 00000000..f8b48885 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 00000000..2971e618 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\C:\\Users\\Vincent\\Source\\Repos\\wz_mini_hacks", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..b7cce894f074edfb2d8256aad848dfd7cab30920 GIT binary patch literal 139264 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 literal 0 HcmV?d00001 diff --git a/.vs/wz_mini_hacks/FileContentIndex/ba48046c-cca0-4c55-8e1b-417e1e7082c0.vsidx b/.vs/wz_mini_hacks/FileContentIndex/ba48046c-cca0-4c55-8e1b-417e1e7082c0.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..000fd7aa4f42719d6c58f0b5019492a1aa6059e6 GIT binary patch literal 4135 zcmZwJcYGto6$fx1y(FO?B@noi44eV&N|sK+1_zH;BWrZt*M1{`%FImpwHcW=gpgW^H%oW=e+93`aL~8 zUvH!b{aLF^&phqNYjlG(H4EKJCY#Ol<}$hQm>c_UyOYoK<(+|izML-=^5w<(a#F}Oy7dZro;La$wW5=-?@^FZUjE4~q$9Xi!BgP|-FBLrXY9g#Pqgp$yrL_@0I3i@7SLTf6} z6^m66DCH>CQlU_x-tOuaR7*c%CLAh-LYig29R{s15@FmI#s&u!?5j9z#;Y<-o@vUs88LlTOH|t| zY>#!?owS{{mWo)P9_#Q9_c}c7r2euNPh=*MY&?5;zKdC}98<+zW;){RXMtBpv8QubK zg}1@m;T`Z!co)1I-UIK2_rd$&1Mork5PTRu0w0Bs!N=hf@HgTFjpM}rC z=iv+RMfehY8NLEvg|ETa;T!OG@b~ad_!fK{z60Nd@4@%s2k;N@kMK|M&+sqsL--N= z82%Oh4SoXu4*vl^g`dHH!hgZf;TQ1V@IUas@PF`2_!WF*Ej`hnwY$*2Y2E)LQ)1XG z(_q7SX02%kno*)^LYmDPhE0NoISCt5mP*lVV|}29nPGD?*aU_47v_^yd zBIqm)_70laHQG!CsPddPXdfkLpw0FK9pm~5{_hbeYs=G&)~K?bQG(jF4N+)MP-wfN zi)>{&MjgC&^#n%&94aJvn=@i#uSg>3); literal 0 HcmV?d00001 diff --git a/.vs/wz_mini_hacks/FileContentIndex/read.lock b/.vs/wz_mini_hacks/FileContentIndex/read.lock new file mode 100644 index 00000000..e69de29b diff --git a/.vs/wz_mini_hacks/v17/.wsuo b/.vs/wz_mini_hacks/v17/.wsuo new file mode 100644 index 0000000000000000000000000000000000000000..e721101f9c7cec3c4e20da240a05ebc2a3b4391d GIT binary patch literal 28672 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 /opt/wz_mini/tmp/.storage/hosts #mount --bind /opt/wz_mini/tmp/.storage/hosts /etc/hosts /opt/wz_mini/bin/busybox inotifyd /opt/wz_mini/usr/bin/watch_up.sh /tmp:n > /dev/null 2>&1 & - - if [ -f /opt/wz_mini/tmp/.WYZE_CAKP2JFUS ]; then - # v3 - printf "[VER]\nappver=4.36.13.0416\n" > /opt/wz_mini/tmp/patched_app.ver - elif [ -f /opt/wz_mini/tmp/.WYZEC1-JZ ]; then - # v2 - printf "[VER]\nappver=4.9.9.3006\n" > /opt/wz_mini/tmp/patched_app.ver - elif [ -f /opt/wz_mini/tmp/.WYZECP1_JEF ]; then - # pan v1 - printf "[VER]\nappver=4.10.9.3006\n" > /opt/wz_mini/tmp/patched_app.ver - elif [ -f /opt/wz_mini/tmp/.HL_PAN2 ]; then - # pan v2 - printf "[VER]\nappver=4.49.13.0653\n" > /opt/wz_mini/tmp/patched_app.ver - fi - - mount --bind /opt/wz_mini/tmp/patched_app.ver /system/bin/app.ver - echo "Firmware updates disabled" else echo "Firmwware updates enabled, monitor script running" diff --git a/SD_ROOT/wz_mini/etc/rc.d/S11spoofing b/SD_ROOT/wz_mini/etc/rc.d/S11spoofing new file mode 100644 index 00000000..8be46aa7 --- /dev/null +++ b/SD_ROOT/wz_mini/etc/rc.d/S11spoofing @@ -0,0 +1,36 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: +# Short-Description: FW Version Spoof +# Description: Spoofs firmware version of ICamera +### END INIT INFO + +. /opt/wz_mini/wz_mini.conf + +case "$1" in + start) + echo "#####$(basename "$0")#####" + + if [[ "$SPOOF_FW_VER="true" ]]; then + if [ -f /opt/wz_mini/tmp/.WYZE_CAKP2JFUS ]; then + # v3 + printf "[VER]\nappver=4.36.13.0416\n" > /opt/wz_mini/tmp/patched_app.ver + elif [ -f /opt/wz_mini/tmp/.WYZEC1-JZ ]; then + # v2 + printf "[VER]\nappver=4.9.9.3006\n" > /opt/wz_mini/tmp/patched_app.ver + elif [ -f /opt/wz_mini/tmp/.WYZECP1_JEF ]; then + # pan v1 + printf "[VER]\nappver=4.10.9.3006\n" > /opt/wz_mini/tmp/patched_app.ver + elif [ -f /opt/wz_mini/tmp/.HL_PAN2 ]; then + # pan v2 + printf "[VER]\nappver=4.49.13.0653\n" > /opt/wz_mini/tmp/patched_app.ver + fi + mount --bind /opt/wz_mini/tmp/patched_app.ver /system/bin/app.ver + fi + + ;; + *) + echo "Usage: $0 {start}" + exit 1 + ;; +esac diff --git a/SD_ROOT/wz_mini/etc/wz_mini.conf.dist b/SD_ROOT/wz_mini/etc/wz_mini.conf.dist index 33b5e98c..f5b7b5b1 100644 --- a/SD_ROOT/wz_mini/etc/wz_mini.conf.dist +++ b/SD_ROOT/wz_mini/etc/wz_mini.conf.dist @@ -103,6 +103,7 @@ ENABLE_USB_STORAGE="false" ENABLE_EXT4="false" ENABLE_CIFS="false" DISABLE_FW_UPGRADE="true" +SPOOF_FW_VER="true" AUDIO_PROMPT_VOLUME="50" ENABLE_MP4_WRITE="false" NIGHT_DROP_DISABLE="false" From 32dcd217b9c7f1cb2f0552fe55faddb802f8933d Mon Sep 17 00:00:00 2001 From: sideup66 <47700565+sideup66@users.noreply.github.com> Date: Wed, 16 Oct 2024 23:07:20 -0400 Subject: [PATCH 6/7] Update S11spoofing forgot output. --- SD_ROOT/wz_mini/etc/rc.d/S11spoofing | 1 + 1 file changed, 1 insertion(+) diff --git a/SD_ROOT/wz_mini/etc/rc.d/S11spoofing b/SD_ROOT/wz_mini/etc/rc.d/S11spoofing index 8be46aa7..f26405e1 100644 --- a/SD_ROOT/wz_mini/etc/rc.d/S11spoofing +++ b/SD_ROOT/wz_mini/etc/rc.d/S11spoofing @@ -26,6 +26,7 @@ case "$1" in printf "[VER]\nappver=4.49.13.0653\n" > /opt/wz_mini/tmp/patched_app.ver fi mount --bind /opt/wz_mini/tmp/patched_app.ver /system/bin/app.ver + echo "Firmware version spoofed" fi ;; From c396f7b4c618c1c0bb8679bb15cfe8790c3bdb30 Mon Sep 17 00:00:00 2001 From: sideup66 <47700565+sideup66@users.noreply.github.com> Date: Thu, 24 Oct 2024 02:24:31 -0400 Subject: [PATCH 7/7] Update S09dnsmasq Smarter way to detect resolv.conf rather than waiting on a sleep function and HOPING its there... --- SD_ROOT/wz_mini/etc/network.d/S09dnsmasq | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq b/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq index 1c72a312..41991de6 100644 --- a/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq +++ b/SD_ROOT/wz_mini/etc/network.d/S09dnsmasq @@ -16,7 +16,10 @@ dnsmasq_launch() { if [[ "$ENABLE_LOCAL_DNS" == "true" ]]; then echo "wait for resolv.conf creation from iCamera" - sleep 5 + while [ ! -f /tmp/resolv.conf ] + do + sleep .2 + done #kill the system dnsmasq if present dmon_pid=$(pgrep -f "dmon.*dnsmasq") if [ -n "$dmon_pid" ]; then @@ -28,7 +31,6 @@ dnsmasq_launch() { else /opt/wz_mini/bin/dnsmasq -C /opt/wz_mini/etc/dnsmasq.conf fi - sleep 5 #mount the resolv.conf file as read only. Something (ICamera?) randomly seems to change it. mount --bind /opt/wz_mini/etc/resolv.conf /tmp/resolv.conf mount -o bind,remount,ro /tmp/resolv.conf