Files
JiboAutoMod/__pycache__/jibo_automod.cpython-313.pyc

269 lines
48 KiB
Plaintext
Raw Normal View History

2026-03-15 20:24:40 +02:00
<EFBFBD>
<17><>i|<7C><00> <00><><00>SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK r SSK
J r SSK J r JrJr SSKJr \ "\5R&R)5r\S- r\S- rSrS r"S
S 5r\R6"5S :XaAS \R8;a1\"\5H%r\R?S5(aM\ "\\S5 M' \"SS55r!Sr"S\#S\#S\$4Sjr%S\$4Sjr&S\$4Sjr'S\$4Sjr(S\$4Sjr)SIS\\$S\ \ S\*S\*S\*S \RV4 S!jjr,S \-4S"jr.S \*4S#jr/S \*4S$jr0S \\*\\$\\$44S%jr1S \\*\\$\\$44S&jr2SJS'\$S(\\$S)\\$4S*jjr3S \*4S+jr4S \\*\\$44S,jr5SKS-\*S \*4S.jjr6S \*4S/jr7SLS0\#S \*4S1jjr8S2\ S \\!4S3jr9S2\ S \\!4S4jr:S5\\!S \ \!4S6jr;S2\ S7\!S8\ S \*4S9jr<S:\ S \*4S;jr=S:\ S \*4S<jr>S:\ S \*4S=jr?S \ 4S>jr@S\4S8\ S?\#S@\#S \*4SAjjrAS:\ S?\#S \*4SBjrBS:\ S?\#S@\#S \*4SCjrCS \*4SDjrDS \*4SEjrES \*4SFjrFSGrG\HSH:Xa\G"5 gg)Ma
Jibo Auto-Mod Tool
==================
Automatically mods a Jibo robot by:
1. Building the Shofel exploit (if needed)
2. Dumping the eMMC
3. Extracting and modifying the /var partition
4. Writing the modified partition back
Supports: Linux and Windows (with WSL or MinGW)
<EFBFBD>N)<01>Path)<03>Optional<61>Tuple<6C>List)<01> dataclass<73>Shofel<65> jibo_worki<00><01>c<00>4<00>\rSrSrSrSrSrSrSrSr Sr
S r S
r g ) <0C>Colors<72>(zzzzzzzz<31>N) <0A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>RED<45>GREEN<45>YELLOW<4F>BLUE<55>MAGENTA<54>CYAN<41>RESET<45>BOLD<4C>__static_attributes__r<00><00>jibo_automod.pyr r (s*<00><00>
<14>C<EFBFBD> <16>E<EFBFBD> <17>F<EFBFBD> <15>D<EFBFBD><18>G<EFBFBD> <15>D<EFBFBD> <15>E<EFBFBD> <14>Drr <00>Windows<77>
WT_SESSION<EFBFBD>_<>c<00>L<00>\rSrSr%Sr\\S'\\S'\\S'\\S'\\S'Srg )
<EFBFBD> PartitionInfo<66>9zGPT partition information<6F>number<65> start_sector<6F>
end_sector<EFBFBD> size_sectors<72>namerN) rrrr<00>__doc__<5F>int<6E>__annotations__<5F>strrrrrr#r#9s <00><00>#<23> <0F>K<EFBFBD><15><15><13>O<EFBFBD><15><15>
<0A>Irr#c <00><><00>[S[RS[RS[R[RS[RS3
5 g)zPrint the tool banner<65>
u<EFBFBD>╔═══════════════════════════════════════════════════════════════════╗
║ zJIBO AUTO-MOD TOOLuA
║ Automatic Developer Mode Enabler for Jibo Robots ║
╚═══════════════════════════════════════════════════════════════════╝N)<05>printr rrrrrr<00> print_bannerr1Gsg<00><00> <09><01><07><1B><1B> <0A><0F><15>{<7B>{<7B>m<EFBFBD>-<2D>f<EFBFBD>l<EFBFBD>l<EFBFBD>^<5E>F<EFBFBD>K<EFBFBD>K<EFBFBD>=<3D>IP<03>QW<03>Q]<03>Q]<03>P^<03>^<01>  <04>r<00>step<65>total<61>messagec<00><><00>[S[RSUSUS[RS[RU[R3 5 g)zPrint a step indicatorr/<00>[<5B>/<2F>]<5D> N)r0r rrr)r2r3r4s r<00>
print_stepr:QsE<00><00> <09>B<EFBFBD>v<EFBFBD>{<7B>{<7B>m<EFBFBD>1<EFBFBD>T<EFBFBD>F<EFBFBD>!<21>E<EFBFBD>7<EFBFBD>!<21>F<EFBFBD>L<EFBFBD>L<EFBFBD>><3E><11>6<EFBFBD>;<3B>;<3B>-<2D><07>y<EFBFBD>QW<51>Q]<5D>Q]<5D>P^<5E>
_<EFBFBD>`rc<00>`<00>[[RSU[R35 g)zPrint a success messageu✓ N)r0r rr<00>r4s r<00> print_successr=Vs!<00><00> <09>V<EFBFBD>\<5C>\<5C>N<EFBFBD>$<24>w<EFBFBD>i<EFBFBD><06> <0C> <0C>~<7E>
6<EFBFBD>7rc<00>`<00>[[RSU[R35 g)zPrint a warning messageu⚠ N)r0r rrr<s r<00> print_warningr?[s!<00><00> <09>V<EFBFBD>]<5D>]<5D>O<EFBFBD>4<EFBFBD><07>y<EFBFBD><16><1C><1C><0E>
7<EFBFBD>8rc<00>`<00>[[RSU[R35 g)zPrint an error messageu✗ N)r0r rrr<s r<00> print_errorrA`s!<00><00> <09>V<EFBFBD>Z<EFBFBD>Z<EFBFBD>L<EFBFBD><04>W<EFBFBD>I<EFBFBD>f<EFBFBD>l<EFBFBD>l<EFBFBD>^<5E>
4<EFBFBD>5rc<00>`<00>[[RSU[R35 g)zPrint an info messageu N)r0r rrr<s r<00>
print_inforCes!<00><00> <09>V<EFBFBD>[<5B>[<5B>M<EFBFBD><14>g<EFBFBD>Y<EFBFBD>v<EFBFBD>|<7C>|<7C>n<EFBFBD>
5<EFBFBD>6r<00>cmd<6D>cwd<77>capture_output<75>check<63>sudo<64>returnc<00>D<00>U(a[R"5S:XaS/U-n[R"UUUSUS9nU$![RaIn[ SSR U535 UR(a[UR5 eSnAff=f)zRun a command and handle errors<72>LinuxrHT)rErF<00>textrGzCommand failed: r9N) <09>platform<72>system<65>
subprocess<EFBFBD>run<75>CalledProcessErrorrA<00>join<69>stderrr0)rDrErFrGrH<00>result<6C>es r<00> run_commandrVjs<><00><00> <0C><08><0F><0F>!<21>W<EFBFBD>,<2C><15>h<EFBFBD><13>n<EFBFBD><03> <0E><1B><1E><1E> <0F><13>)<29><15><17> 
<EFBFBD><06><16> <0A><> <15> (<28> (<28><0E><13>&<26>s<EFBFBD>x<EFBFBD>x<EFBFBD><03>}<7D>o<EFBFBD>6<>7<> <0C>8<EFBFBD>8<EFBFBD> <11>!<21>(<28>(<28>O<EFBFBD> <0A><> <0E>s<00>A<00>B<03>AB<03>Bc<00><00>[R"5[R"5[R"5[R"5S:Xa(S[R"5R 5;S.$SS.$)zGet system informationrK<00> microsoftF)<04>os<6F>arch<63>python_version<6F>is_wsl)rMrN<00>machiner[<00>release<73>lowerrrr<00>get_system_infor`<00>sj<00><00><17>o<EFBFBD>o<EFBFBD><1F><18> <20> <20>"<22>"<22>1<>1<>3<>?G<><EFBFBD><EFBFBD>?P<>T[<5B>?[<5B>+<2B><18>!1<>!1<>!3<>!9<>!9<>!;<3B>;<3B>  <06><06>bg<01>  <06>rc<00><><00>[R"5S:Xa+SSKnURRR 5S:g$[ R"5S:H=(d [R"S5SL$)z0Check if running as root or with sudo capabilityrrNrH)
rMrN<00>ctypes<65>windll<6C>shell32<33> IsUserAnAdminrY<00>geteuid<69>shutil<69>which)rbs r<00>check_root_or_sudori<00>sV<00><00><0F><EFBFBD><EFBFBD><18>I<EFBFBD>%<25><15><15>}<7D>}<7D>$<24>$<24>2<>2<>4<><01>9<>9<><11>z<EFBFBD>z<EFBFBD>|<7C>q<EFBFBD> <20>D<>F<EFBFBD>L<EFBFBD>L<EFBFBD><16>$8<><04>$D<>Drc<00>,<00>S/n[SU55$)zHQuick check if critical payload binaries exist (for dependency checking)<29>emmc_server.binc3<00>P# <00>UHn[U- R5v<00> M g7f<01>N)<02>
SHOFEL_DIR<EFBFBD>exists)<02>.0<EFBFBD>ps r<00> <genexpr><3E>(_check_payloads_exist.<locals>.<genexpr><3E>s"<00><00><00>D<>2C<32>Q<EFBFBD>
<EFBFBD>Q<EFBFBD><0E>&<26>&<26>(<28>(<28>2C<32>s<00>$&)<01>all)<01>critical_payloadss r<00>_check_payloads_existrv<00>s<00><00>*<2A>+<2B><15> <0E>D<>2C<32>D<> D<>Drc<00><00>/n/nSSS.nSSS.nUR5H9upE[R"U5(aM"URUSUS35 M; UR5H9upE[R"U5(aM"URUSUS35 M; [ 5(d,[R"S5(dURS 5 [
R "/S
QS S 9nURS :waURS5 [U5S :HX4$![aP [S5R5(d/[S5R5(dURS5 Nif=f)z%Check for required Linux dependencieszbuild-essential or base-devel)<02>gcc<63>makez.usbutils (optional, used for device detection)z*util-linux (optional, has Python fallback))<02>lsusb<73>fdisk<73> (<28>)<29>arm-none-eabi-gccz@arm-none-eabi-gcc (arm-none-eabi-gcc or arm-none-eabi-toolchain))z
pkg-configz--existsz
libusb-1.0T<EFBFBD>rFrzlibusb-1.0-dev or libusb1-develz/usr/include/libusb-1.0z/usr/local/include/libusb-1.0) <0C>itemsrgrh<00>appendrvrOrP<00>
returncode<EFBFBD>FileNotFoundErrorrro<00>len)<07>missing<6E>warnings<67>required_tools<6C>optional_tools<6C>tool<6F>packagerTs r<00>check_linux_dependenciesr<73><00>sf<00><00><10>G<EFBFBD><11>H<EFBFBD>/<2F>/<2F><06>N<EFBFBD>B<01>=<3D><06>N<EFBFBD>
(<28>-<2D>-<2D>/<2F> <0A><04><15>|<7C>|<7C>D<EFBFBD>!<21>!<21> <13>N<EFBFBD>N<EFBFBD>d<EFBFBD>V<EFBFBD>2<EFBFBD>g<EFBFBD>Y<EFBFBD>a<EFBFBD>0<> 1<>0<>(<28>-<2D>-<2D>/<2F> <0A><04><15>|<7C>|<7C>D<EFBFBD>!<21>!<21> <14>O<EFBFBD>O<EFBFBD>t<EFBFBD>f<EFBFBD>B<EFBFBD>w<EFBFBD>i<EFBFBD>q<EFBFBD>1<> 2<>0<>
!<21> "<22> "<22><15>|<7C>|<7C>/<2F>0<>0<> <13>N<EFBFBD>N<EFBFBD>]<5D> ^<5E> ><3E><1B><1E><1E> 4<><1F>
<EFBFBD><06> <12> <1C> <1C><01> !<21> <13>N<EFBFBD>N<EFBFBD><<3C> =<3D> <0F>w<EFBFBD><<3C>1<EFBFBD> <1C>g<EFBFBD> /<2F>/<2F><> <1D>><3E><13>-<2D>.<2E>5<>5<>7<>7<><13>3<>4<>;<3B>;<3B>=<3D>=<3D> <13>N<EFBFBD>N<EFBFBD><<3C> =<3D><> ><3E>s<00>%8D-<00>-AF<03>Fc<00><><00>/n/n[R"S5(d,[R"S5(dURS5 [5(d,[R"S5(dURS5 [R"S5(d,[R"S5(dURS5 [ U5S :HX4$)
z'Check for required Windows dependenciesrxzx86_64-w64-mingw32-gcczMinGW-w64 or MSYS2r~z%ARM GNU Toolchain (arm-none-eabi-gcc)ryz mingw32-makezGNU Maker)rgrhr<>rvr<>)r<>r<>s r<00>check_windows_dependenciesr<73><00>s<><00><00><10>G<EFBFBD><11>H<EFBFBD> <12><<3C><<3C><05> <1E> <1E>v<EFBFBD>|<7C>|<7C>4L<34>'M<>'M<><0F><0E><0E>+<2B>,<2C> !<21> "<22> "<22><15>|<7C>|<7C>/<2F>0<>0<> <13>N<EFBFBD>N<EFBFBD>B<> C<> <12><<3C><<3C><06> <1F> <1F><06> <0C> <0C>^<5E>(D<>(D<><0F><0E><0E>z<EFBFBD>"<22> <0E>w<EFBFBD><<3C>1<EFBFBD> <1C>g<EFBFBD> /<2F>/rrNr<>r<>c <00>0<00>U(a"[S5 UHn[SU35 M U(a"[S5 UHn[SU35 M U(Gae[S[RS[R
35 US:XaDSn[ S5R5(aS nOA[ S
5R5(aS nO [ S 5R5(aS nWS :Xa/[S[RS[R
S35 gUS :Xa/[S[RS[R
S35 gUS :Xa/[S[RS[R
S35 g[S[RS[R
S35 gUS:XaQ[S[RS[R
S[RS[R
S3 5 gg)z8Print installation instructions for missing dependencieszMissing dependencies:z - z'Optional dependencies (have fallbacks):r/zInstallation instructions:rK<00>unknown<77>/etc/arch-releaserZ<00>/etc/debian_version<6F>debian<61>/etc/fedora-release<73>fedoraz
z# Arch/CachyOS/Manjaro:zX
sudo pacman -S --needed base-devel libusb git arm-none-eabi-gcc arm-none-eabi-newlib
z# Ubuntu/Debian:zu
sudo apt update
sudo apt install build-essential libusb-1.0-0-dev git gcc-arm-none-eabi libnewlib-arm-none-eabi
z # Fedora:zx
sudo dnf groupinstall "Development Tools"
sudo dnf install libusb1-devel arm-none-eabi-gcc-cs arm-none-eabi-newlib
z
# Generic:zD
Install: build-essential, libusb-1.0-dev, git, arm-none-eabi-gcc
rzOption 1 - MSYS2 (Recommended):z<>
1. Download MSYS2 from https://www.msys2.org/
2. Open MSYS2 MINGW64 terminal and run:
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-libusb make
pacman -S mingw-w64-x86_64-arm-none-eabi-gcc
z-Option 2 - WSL (Windows Subsystem for Linux):zX
1. Install WSL2: wsl --install
2. Run this tool inside WSL with Linux dependencies
N) rAr0r?r rrrror)rNr<>r<><00>dep<65>warn<72>distros r<00>print_install_instructionsr<73><00>s<><00><00><0E><13>+<2B>,<2C><1A>C<EFBFBD> <11>D<EFBFBD><13><05>,<2C> <1F><1B><10><15>?<3F>@<40><1C>D<EFBFBD> <11>D<EFBFBD><14><06>-<2D> <20><1D><0F> <0A><02>6<EFBFBD>;<3B>;<3B>-<2D>9<>&<26>,<2C>,<2C><1E>H<>I<> <11>W<EFBFBD> <1C><1E>F<EFBFBD><13>'<27>(<28>/<2F>/<2F>1<>1<><1F><06><15>+<2B>,<2C>3<>3<>5<>5<>!<21><06><> <11>'<27> (<28> /<2F> /<2F> 1<> 1<><1D>F<EFBFBD> <11>V<EFBFBD> <1B> <11><03> <09>;<3B>;<3B>-<2D>&<26>v<EFBFBD>|<7C>|<7C>n<EFBFBD>5<01><04> <05><14>x<EFBFBD> <1F> <11><03> <09>;<3B>;<3B>-<2D><1F><06> <0C> <0C>~<7E>.<01><04> <05>
<14>x<EFBFBD> <1F> <11><03> <09>;<3B>;<3B>-<2D>y<EFBFBD><16><1C><1C><0E>'<01><04> <05> <12><03> <09>;<3B>;<3B>-<2D>z<EFBFBD>&<26>,<2C>,<2C><1E>(<01><04> <05>
<10>9<EFBFBD> <1C> <0A><03> <09>;<3B>;<3B>-<2D>.<2E>v<EFBFBD>|<7C>|<7C>n<EFBFBD>=<03> 
<EFBFBD>;<3B>;<3B>-<2D><<3C>V<EFBFBD>\<5C>\<5C>N<EFBFBD>K<01>
<04>
<05>
rc<00>x<00>[S- n[R"5S:Xa [S- nUR5$)z&Check if shofel2_t124 is already built<6C> shofel2_t124r<00>shofel2_t124.exe)rnrMrNro)<01>
shofel_exes r<00>check_shofel_builtr<74>$s5<00><00><1B>n<EFBFBD>,<2C>J<EFBFBD><0F><EFBFBD><EFBFBD><18>I<EFBFBD>%<25><1F>"4<>4<>
<EFBFBD> <15> <1C> <1C> <1E>rc<00><00>S/n/SQn/n/nUH2n[U- R5(aM!URU5 M4 UH2n[U- R5(aM!URU5 M4 [U5S:HX#-4$)z#Check if ARM payload binaries existrk)z boot_bct.binzmem_dumper_usb_server.binzintermezzo.binr)rnror<>r<>)<05>required_payloads<64>optional_payloads<64>missing_required<65>missing_optional<61>payloads r<00>check_payloads_builtr<74>,s<><00><00>*<2A>+<2B><15>W<><15><19><14><19><14>$<24><07><1A>W<EFBFBD>$<24>,<2C>,<2C>.<2E>.<2E> <1C> #<23> #<23>G<EFBFBD> ,<2C>%<25>%<25><07><1A>W<EFBFBD>$<24>,<2C>,<2C>.<2E>.<2E> <1C> #<23> #<23>G<EFBFBD> ,<2C>%<25> <0F><1F> <20>A<EFBFBD> %<25>'7<>'J<> J<>Jr<00> force_rebuildc<00><><00>[SSS5 [5up[5(aU(aU(d [S5 g[ S5 U(a[ SS/[ SS S
9 [ S/[ SS S
9n[5(Ga<>[S 5 [5upU(Gdp[S 5 [ S SRU5-5 [5 [[RS[R35 [5 [S5R5(a/[S[RS[RS35 O<>[S5R5(a/[S[RS[RS35 OX[S5R5(a/[S[RS[RS35 O [S5 [5 [S5 g [S5 g[S5 UR (a[UR 5 g !["an[SU35 SnAg SnAff=f) z#Build the shofel2_t124 exploit tool<6F><00>zBuilding Shofel exploit toolz!Shofel already built, skipping...TzCompiling shofel2_t124...ry<00>cleanF)rErFrGz,Host tool (shofel2_t124) built successfully!z!ARM payload binaries are missing!zMissing files: z, zDThe ARM toolchain (arm-none-eabi-gcc) is required to build payloads.r<><00> z Arch/CachyOS:z6 sudo pacman -S arm-none-eabi-gcc arm-none-eabi-newlibr<62>zUbuntu/Debian:z; sudo apt install gcc-arm-none-eabi libnewlib-arm-none-eabir<69>zFedora:z; sudo dnf install arm-none-eabi-gcc-cs arm-none-eabi-newlibz1 Install arm-none-eabi-gcc for your distributionz%After installing, run: make -C ShofelzAll payload binaries present!zShofel build failedzBuild failed: N)r:r<>r<>r=rCrVrnrArRr0r rrrrorrS<00> Exception)r<><00> payloads_ok<6F>missing_payloadsrTrUs r<00> build_shofelr<6C>?s<><00><00><0E>q<EFBFBD>!<21>3<>4<>$8<>$:<3A>!<21>K<EFBFBD><19><1B><1B> <0B>M<EFBFBD><15>9<>:<3A><13><0E>*<2A>+<2B>.<15> <18> <17><16><17>)<29>z<EFBFBD>$<24>V[<5B> \<5C><1D>f<EFBFBD>X<EFBFBD>:<3A>d<EFBFBD>RW<52>X<><06> <1E> <1F> <1F> <19>H<> I<>-A<01>,B<> )<29>K<EFBFBD><1E><1B>?<3F>@<40><1A>,<2C>t<EFBFBD>y<EFBFBD>y<EFBFBD>9I<39>/J<>J<>K<><15><07><15><16><1D><1D><0F>'k<>lr<6C>lx<6C>lx<6C>ky<6B>z<>{<7B><15><07><18>+<2B>,<2C>3<>3<>5<>5<><19>B<EFBFBD>v<EFBFBD>{<7B>{<7B>m<EFBFBD>=<3D><16><1C><1C><0E>F|<7C>}<7D>~<7E><19>/<2F>0<>7<>7<>9<>9<><19>B<EFBFBD>v<EFBFBD>{<7B>{<7B>m<EFBFBD>><3E>&<26>,<2C>,<2C><1E>HC<02>D<02>E<02><19>/<2F>0<>7<>7<>9<>9<><19>B<EFBFBD>v<EFBFBD>{<7B>{<7B>m<EFBFBD>7<EFBFBD>6<EFBFBD><<3C><<3C>.<2E>@{<7B>|<7C>}<7D><19>M<>O<><15><07><15>=<3D>><3E><1C><1D>=<3D>><3E><17> <17>-<2D> .<2E><15>}<7D>}<7D><15>f<EFBFBD>m<EFBFBD>m<EFBFBD>$<24><18><> <14><15><13>n<EFBFBD>Q<EFBFBD>C<EFBFBD>(<28>)<29><14><><15>s%<00>GI<00> I<00>$1I<00>
I8<03> I3<03>3I8c<00><><00>[S5 [R"5S:XGaY[R"S5(a`[ S/SS9nSUR ;a [S5 g[S5 [S 5 [S
5 [S 5 [S 5 g [S5nUR5(a<>UR5H<>nUS- nUS- nUR5(dM$UR5(dM;UR5R!5nUR5R!5nUS:XdMUS:XdM<>[S5 g [S5 [S5 g[R"5S:Xa[S5 [S5 gg ![an[SU35 SnAGN-SnAff=f![a Nzf=f)z'Detect if Jibo is connected in RCM modez3Looking for Jibo in RCM mode (NVIDIA APX device)...rKrzTrz 0955:7740zFound Jibo in RCM mode!zJibo not found in RCM modez Make sure to:z6 1. Hold the RCM button (small button under the base)z! 2. Press the reset/power buttonz5 3. Release after seeing red LED (no boot animation)Fzlsusb failed: Nz/sys/bus/usb/devices<65>idVendor<6F> idProduct<63>0955<35>7740z#Found Jibo in RCM mode! (via sysfs)z=Cannot detect USB devices. Please ensure Jibo is in RCM mode.z(The tool will attempt to connect anyway.rzAWindows USB detection - please ensure Zadig drivers are installedz4Run Zadig and install WinUSB driver for 'APX' device)rCrMrNrgrhrV<00>stdoutr=r?r0r<>rArro<00>iterdir<69> read_text<78>strip)rTrU<00> usb_devices<65>device<63> vendor_file<6C> product_file<6C>vendor<6F>products r<00>detect_jibo_rcmr<6D><00>s<><00><00><0E>D<>E<><0F><EFBFBD><EFBFBD><18>G<EFBFBD>#<23> <11><<3C><<3C><07> <20> <20> 2<>$<24>g<EFBFBD>Y<EFBFBD>t<EFBFBD>D<><06><1E>&<26>-<2D>-<2D>/<2F>!<21>";<3B><<3C><1F>!<21>"><3E>?<3F><1E><EFBFBD>/<2F><19>R<>S<><19>=<3D>><3E><19>Q<>R<> <20>
<11><1E>5<>6<>K<EFBFBD><1A>!<21>!<21>#<23>#<23>)<29>1<>1<>3<>F<EFBFBD>"(<28>:<3A>"5<>K<EFBFBD>#)<29>K<EFBFBD>#7<>L<EFBFBD>"<22>)<29>)<29>+<2B>+<2B> <0C>0C<30>0C<30>0E<30>0E<30>!,<2C>!6<>!6<>!8<>!><3E>!><3E>!@<40><06>".<2E>"8<>"8<>":<3A>"@<40>"@<40>"B<><07>!<21>V<EFBFBD>+<2B><07>6<EFBFBD>0A<30>)<29>*O<>P<>#'<27>4<> <16>U<>V<><12>=<3D>><3E><13> <11><1F><1F> <1A>i<EFBFBD> '<27><15>Y<>Z<><12>I<>J<><13> <10><>?<1D> 2<><1B>n<EFBFBD>Q<EFBFBD>C<EFBFBD>0<>1<>1<><31> 2<><32> <19> <11> <10> <11>sP<00>&F0<00>)7F0<00>"AG<00>6G<00> AG<00>G<00> G<00>&G<00>0
G<03>:G<03>G<03>
G#<03>"G#<03>timeoutc<00><><00>SSKn[SUS35 [S5 UR5nUR5U-
U:aw[5(agURS5 [R
R S5 [R
R5 UR5U-
U:aMw[5 [S 5 g
) z)Wait for Jibo to be connected in RCM moderNz'Waiting for Jibo in RCM mode (timeout: zs)...z5Hold RCM button + press reset/power to enter RCM modeTr<54><00>.zTimeout waiting for JiboF)
<EFBFBD>timerCr<><00>sleep<65>sysr<73><00>write<74>flushr0rA)r<>r<><00>
start_times r<00>wait_for_jibo_rcmr<6D><00>s<><00><00><0F><0E>8<><17> <09><15>G<>H<><0E>F<>G<><15><19><19><1B>J<EFBFBD>
<0E>)<29>)<29>+<2B>
<EFBFBD>
"<22>W<EFBFBD>
,<2C> <1A> <1C> <1C><17> <0C>
<EFBFBD>
<EFBFBD>1<EFBFBD> <0A> <0B>
<EFBFBD>
<EFBFBD><18><18><13><1D> <0B>
<EFBFBD>
<EFBFBD><18><18><1A> <0F>)<29>)<29>+<2B>
<EFBFBD>
"<22>W<EFBFBD>
,<2C>
<EFBFBD>G<EFBFBD><0F>*<2A>+<2B> r<00> dump_pathc <00>n<00>/n[US5nURS5 URS5nUSSnUS:wa[S5 [ U5sSSS5 $[
R "SUSS 5S
n[
R "S US S 5S
n[
R "S US S 5S
nURUS-5 [U5H<>nURU5n [U 5S:a O<>U SSn
U
S:XaM2[
R "SU SS5S
n [
R "SU SS5S
n U SSn U RS5RS5nUR[US-U U X<>-
S-US95 M<> SSS5 U$! SUS-3nN>=f!,(df  U$=f)z(Parse GPT partition table from dump file<6C>rbr
N<>sEFI PARTz0GPT signature not found, trying fdisk parsing...z<Q<>H<00>Prz<I<>T<00>X<00><><00>s<00> r <00>0<00>8zutf-16le<6C><00> partitionr<6E><00>r%r&r'r(r)) <0A>open<65>seek<65>readr?<00>parse_partitions_fdisk<73>struct<63>unpack<63>ranger<65><00>decode<64>rstripr<70>r#)r<><00>
partitions<EFBFBD>f<>
gpt_header<EFBFBD> signature<72>partition_entries_lba<62> num_entries<65>
entry_size<EFBFBD>i<>entry<72> type_guid<69> first_lba<62>last_lba<62>
name_bytesr)s r<00>parse_gpt_partitionsr<73><00>s<><00><00><13>J<EFBFBD> <0A>i<EFBFBD><14> <1E>!<21> <09><06><06>s<EFBFBD> <0B><17>V<EFBFBD>V<EFBFBD>C<EFBFBD>[<5B>
<EFBFBD><1F>r<EFBFBD><01>N<EFBFBD> <09> <14> <0B> #<23> <19>L<> M<>)<29>)<29>4<>
<1F> <1E>"!'<27> <0A> <0A>d<EFBFBD>J<EFBFBD>r<EFBFBD>"<22>4E<34> F<>q<EFBFBD> I<><1D><1C>m<EFBFBD>m<EFBFBD>D<EFBFBD>*<2A>R<EFBFBD><02>*;<3B><<3C>Q<EFBFBD>?<3F> <0B><1B>]<5D>]<5D>4<EFBFBD><1A>B<EFBFBD>r<EFBFBD>):<3A>;<3B>A<EFBFBD>><3E>
<EFBFBD>
<EFBFBD><06><06>$<24>s<EFBFBD>*<2A>+<2B><16>{<7B>#<23>A<EFBFBD><15>F<EFBFBD>F<EFBFBD>:<3A>&<26>E<EFBFBD><12>5<EFBFBD>z<EFBFBD>C<EFBFBD><1F><15><1E>c<EFBFBD>r<EFBFBD>
<EFBFBD>I<EFBFBD><18>L<EFBFBD>(<28><18><1E> <0A> <0A>d<EFBFBD>E<EFBFBD>"<22>R<EFBFBD>L<EFBFBD>9<>!<21><<3C>I<EFBFBD><1D>}<7D>}<7D>T<EFBFBD>5<EFBFBD><12>B<EFBFBD><<3C>8<><11>;<3B>H<EFBFBD><1F>r<EFBFBD>#<23><1D>J<EFBFBD> )<29>!<21>(<28>(<28><1A>4<>;<3B>;<3B>F<EFBFBD>C<><04> <17> <1D> <1D>m<EFBFBD><18>1<EFBFBD>u<EFBFBD>&<26>#<23>%<25>1<>A<EFBFBD>5<><19> <0E> <0F>3$<24>1
<1F>r <16><15><> )<29>"<22>1<EFBFBD>Q<EFBFBD>3<EFBFBD>%<25>(<28><04><>_
<1F> <1E>r <16><15>s+<00>AF%<03>C'F%<03> F<04>$(F%<03>
F"<07> F%<03>%
F4c <00>n<00>/n[SS[U5/SSS9nURRS5H<>nURU;dMUR S5(aM-UR5n[ U5S:<3A>dMNUS n[S
RS U55=(d S 5n[US 5n[US5nUR[UUUX<>-
S -SU3S95 M<> U$![[4a M<>f=f![an [SU 35 Sn A U$Sn A ff=f)z-Parse partitions using fdisk (Linux fallback)r{z-lTF)rFrGr/<00>Disk<73>rr!c3<00>R# <00>UHoR5(dMUv<00> M g7frm)<01>isdigit)rp<00>cs rrr<00>)parse_partitions_fdisk.<locals>.<genexpr>"s<00><00><00>.S<>)<29>Q<EFBFBD>y<EFBFBD>y<EFBFBD>{<7B>q<EFBFBD>q<EFBFBD>)<29>s<00>'<01> '<01>0r<30><00>r<>r<>zfdisk parsing failed: N)rVr-r<><00>splitr)<00>
startswithr<EFBFBD>r+rRr<>r#<00>
ValueError<EFBFBD>
IndexErrorr<EFBFBD>rA)
r<EFBFBD>r<>rT<00>line<6E>parts<74> part_name<6D>part_num<75>start<72>endrUs
rr<>r<>s8<00><00><13>J<EFBFBD> 2<><1C> <14>d<EFBFBD>C<EFBFBD> <09>N<EFBFBD> +<2B><1F><17>
<EFBFBD><06><1B>M<EFBFBD>M<EFBFBD>'<27>'<27><04>-<2D>D<EFBFBD><18>~<7E>~<7E><14>%<25>d<EFBFBD>o<EFBFBD>o<EFBFBD>f<EFBFBD>.E<>.E<><1C>
<EFBFBD>
<EFBFBD> <0C><05><16>u<EFBFBD>:<3A><11>?<3F>!<21>$)<29>!<21>H<EFBFBD> <09>#&<26>r<EFBFBD>w<EFBFBD>w<EFBFBD>.S<>)<29>.S<>'S<>'Z<>WZ<57>#[<5B><08> #<23>E<EFBFBD>!<21>H<EFBFBD> <0A><05>!<21>%<25><01>(<28>m<EFBFBD><03>"<22>)<29>)<29>-<2D>#+<2B>).<2E>'*<2A>),<2C><1B>q<EFBFBD><1F>#,<2C>X<EFBFBD>J<EFBFBD>!7<> +<1A><1B>.<2E>4 <16><15><> '<27>
<EFBFBD>3<>!<21> <20>!<21><> <15>2<><13>,<2C>Q<EFBFBD>C<EFBFBD>0<>1<>1<> <15><15><>2<>sI<00>AD<00> D<00>#D<00>A/C:<02>4D<00>:D<05>
D<00> D<05>D<00>
D4<03>D/<03>/D4r<>c<00>*<00>UH@nURS:XdMUR[-S- nSUs=:a S:dM:Us $ MB UHGnUR[-S- nSUs=:aS:dM(O M,[SURS35 Us $ g )
z-Find the /var partition (partition 5, ~500MB)<29><00>i<>iXi<>i&zUsing partition z as var (size matches)N)r%r(<00>EMMC_SECTOR_SIZEr?)r<><00>part<72>size_mbs r<00>find_var_partitionr 7s<><00><00><1B><04> <0F>;<3B>;<3B>!<21> <1B><1B>(<28>(<28>+;<3B>;<3B> <0B>L<>G<EFBFBD><12>W<EFBFBD>"<22>s<EFBFBD>"<22><1B> <0B>#<23> <1B><1B><04><17>$<24>$<24>'7<>7<>K<EFBFBD>H<><07> <0E><17> <1E>3<EFBFBD> <1E> <1E> <19>,<2C>T<EFBFBD>[<5B>[<5B>M<EFBFBD>9O<39>P<> Q<><17>K<EFBFBD> <1B> rr<><00> output_pathc<00><><00>[SURSURS35 [US5nUR UR
[ -5 URUR[ -5nSSS5 [US5nURW5 SSS5 [SU35 g!,(df  NC=f!,(df  N.=f![an[S U35 SnAg
SnAff=f) z!Extract a partition from the dumpzExtracting partition r|z sectors)...r<>N<>wbzPartition extracted to TzExtraction failed: F) rCr%r(r<>r<>r&rr<>r<>r=r<>rA)r<>r<>r
<00>src<72>data<74>dstrUs r<00>extract_partitionrOs<><00><00><0E>&<26>y<EFBFBD>'7<>'7<>&8<><02>9<EFBFBD>;Q<>;Q<>:R<>R^<5E>_<>`<60> <15> <11>)<29>T<EFBFBD> "<22>c<EFBFBD> <0F>H<EFBFBD>H<EFBFBD>Y<EFBFBD>+<2B>+<2B>.><3E>><3E> ?<3F><16>8<EFBFBD>8<EFBFBD>I<EFBFBD>2<>2<>5E<35>E<>F<>D<EFBFBD>#<23><12>+<2B>t<EFBFBD> $<24><03> <0F>I<EFBFBD>I<EFBFBD>d<EFBFBD>O<EFBFBD>%<25> <16>/<2F> <0B>}<7D>=<3D>><3E><13>#<23> "<22><>%<25> $<24><> <15><15><13>)<29>!<21><13>-<2D>.<2E><14><><15>sG<00> C<00>AB6<03>9C<00> C<03>C<00>6
C<07>C<00>
C<07>C<00>
C:<03>"C5<03>5C:<03>partition_pathc <00><><00>[S5 [US5nUR5n/SQnSnSnUH`nXb;dM
[U5[U5-
nUS:<3A>a USU--nO
US:aM8UnUR U5n [SU S U S
S 35 S n O U(d<>/S Qn
U
H<>up<>X<EFBFBD>;dM UR U 5n [SU S U S
S 35 U [U 5-n [U 5[U 5-
nUS:<3A>aCX-X<>-n[ SU55(aUSU U -X-U-S-nO+[ S5 SSS5 gSU*-nUSU U -U-X-S-nURS5 URU5 [S5 SSS5 g [ S5 SSS5 g!,(df  g=f![an[SU35 SnAgSnAff=f)z<>
Modify mode.json directly in the partition image by searching for the pattern.
This works on both Linux and Windows without mounting.
z'Searching for mode.json in partition...zr+b)s"mode": "normal"s"mode":"normal"s"mode" : "normal"s"mode": "int-developer"Fr<00> zFound pattern at offset z (0x<30>xr}T))s{"mode":"normal"}<7D>{"mode":"int-developer"})s{"mode": "normal"}s{"mode": "int-developer"})s{ "mode": "normal" }rzFound mode.json at offset c3<00>Z# <00>UH!oS:H=(d US:H=(d US:Hv<00> M# g7f)rr<><00>
Nr)rp<00>bs rrr<00>*modify_mode_json_direct.<locals>.<genexpr><3E>s'<00><00><00>"]<5D>_<EFBFBD><01><01>6<EFBFBD>#C<>Q<EFBFBD>$<24>Y<EFBFBD>#C<>!<21>t<EFBFBD>)<29>#C<>_<EFBFBD>s<00>)+Nz5Cannot safely modify in-place, using filesystem mount<6E>z mode.json modified successfully!z7mode.json pattern not found, trying filesystem mount...zDirect modification failed: ) rCr<>r<>r<><00>findrtr?r<>r<>r=r<>rA)rr<>r<00>patterns_to_find<6E> replacement<6E>modified<65>pattern<72>pad_len<65>replacement_padded<65>offset<65> json_patterns<6E>old_json<6F>new_json<6F>
end_offset<EFBFBD> size_diff<66>following_bytes<65>new_data<74>paddingrUs r<00>modify_mode_json_directr+cs)<00><00>
<0F>8<>9<>W<15> <11>.<2E>%<25> (<28>A<EFBFBD><14>6<EFBFBD>6<EFBFBD>8<EFBFBD>D<EFBFBD> <0E> <1C> 5<>K<EFBFBD><1C>H<EFBFBD>+<2B><07><1A>?<3F>!<21>'<27>l<EFBFBD>S<EFBFBD><1B>-=<3D>=<3D>G<EFBFBD><1E><11>{<7B>.9<EFBFBD>4<EFBFBD>'<27>><3E>-I<>*<2A> <20>1<EFBFBD><1B> !<21>-8<>*<2A>"<22>Y<EFBFBD>Y<EFBFBD>w<EFBFBD>/<2F>F<EFBFBD><1E>!9<>&<26><18><14>f<EFBFBD>Q<EFBFBD>Z<EFBFBD>q<EFBFBD>Q<>R<> $<24>H<EFBFBD><19>3,<2C>6<1C>!<12> <0A> +8<>&<26>H<EFBFBD><1F>'<27>!%<25><19><19>8<EFBFBD>!4<><06>"<22>%?<3F><06>x<EFBFBD>t<EFBFBD>F<EFBFBD>ST<53>:<3A>UV<55>#W<>X<>&,<2C>c<EFBFBD>(<28>m<EFBFBD>%;<3B>
<EFBFBD>%(<28><08>M<EFBFBD>C<EFBFBD><08>M<EFBFBD>$A<> <09>$<24>q<EFBFBD>=<3D>.2<EFBFBD>j<EFBFBD>>T<>.U<>O<EFBFBD>"<22>"]<5D>_<EFBFBD>"]<5D>]<5D>]<5D>+/<2F><07><16>=<3D>8<EFBFBD>+C<>d<EFBFBD>Xa<58>Ka<4B>Kb<4B>Fc<46>+c<><08>!.<2E>.e<> f<>',<2C>K)<29> (<28>P'.<2E>)<29><1A>&<<3C>G<EFBFBD>'+<2B>G<EFBFBD>V<EFBFBD>}<7D>x<EFBFBD>'?<3F>'<27>'I<>D<EFBFBD>Q\<5C>L]<5D>']<5D>H<EFBFBD><1A><06><06>q<EFBFBD> <09><19><07><07><08>)<29>%<25>&H<>I<>#<23>_)<29> (<28>b+8<>@ <1A>S<> T<><18>e)<29> (<28> (<28><>h <15><15><13>2<>1<EFBFBD>#<23>6<>7<><14><><15>sZ<00> F8<00>!F'<03>A/F'<03>1B F'<03>:F8<00>AF'<03>F8<00>F'<03>F8<00>'
F5<07>1F8<00>5F8<00>8
G<03>G<03>Gc <00><00>[R"5S:wa [S5 g[S- nUR SSS9 [ SUS35 [ S S
S [U5[U5/SS 9 US - S- nUR5(d0US- US- S - S- 4HnUR5(dMUn O UR5(a<>[ SU35 [US5n[R"U5nSSS5 [ SWRSS535 SUS'[S- n[US5n[R"XT5 SSS5 [ S[U5[U5/SS 9 [S5 OE[S5 [ S5 [ SS[U5/SS 9 [ S[U5/SSS 9 g[ S[U5/SSS 9 g!,(df  N<>=f!,(df  N<>=f! g=f! g=f![a6n[S!U35 SnA[ S[U5/SSS 9 g! g=fSnAff=f![ S[U5/SSS 9 f! f=f=f)"z7Modify mode.json by mounting the partition (Linux only)rKz+Filesystem mounting only supported on LinuxF<78>jibo_var_mountT<74><02>parents<74>exist_okzMounting partition at <20>...<2E>mount<6E>-o<>loop)rH<00>jiboz mode.json<6F>etczFound mode.json at <20>rNzCurrent mode: <20>moder<65>z int-developerzmode_temp.json<6F>w<>cpz%mode.json modified to 'int-developer'z(mode.json not found in mounted partitionzListing mount contents:<3A>lsz-la<6C>umount)rHrGzMount/modify failed: )rMrNrA<00>WORK_DIR<49>mkdirrCrVr-ror<><00>json<6F>load<61>get<65>dumpr=r<>)r<00> mount_point<6E>mode_json_path<74>alt_pathr<68><00>content<6E> temp_jsonrUs r<00>modify_partition_mountedrH<00>s<><00><00><0F><EFBFBD><EFBFBD><18>G<EFBFBD>#<23><13>A<>B<><14><1A>-<2D>-<2D>K<EFBFBD><0F><15><15>d<EFBFBD>T<EFBFBD><15>2<>><11><12>+<2B>K<EFBFBD>=<3D><03><<3C>=<3D><13> <14>d<EFBFBD>F<EFBFBD>C<EFBFBD><0E>$7<><13>[<5B>9I<39> J<><15>
<EFBFBD> %<25>v<EFBFBD>-<2D> <0B>;<3B><0E><1D>$<24>$<24>&<26>&<26><1C>k<EFBFBD>)<29><1B>e<EFBFBD>#<23>f<EFBFBD>,<2C>{<7B>:<3A><0E><08><1C>?<3F>?<3F>$<24>$<24>%-<2D>N<EFBFBD><19> <0E> <1A> <20> <20> "<22> "<22> <16>,<2C>^<5E>,<<3C>=<3D> ><3E><16>n<EFBFBD>c<EFBFBD>*<2A>a<EFBFBD><1E>)<29>)<29>A<EFBFBD>,<2C><07>+<2B> <17><1E><07> <0B> <0B>F<EFBFBD>I<EFBFBD>(F<>'G<>H<> I<>.<2E>G<EFBFBD>F<EFBFBD>O<EFBFBD>!<21>#3<>3<>I<EFBFBD><15>i<EFBFBD><13>%<25><11><14> <09> <09>'<27>%<25>&<26> <18><15>s<EFBFBD>9<EFBFBD>~<7E>s<EFBFBD>><3E>':<3A>;<3B><19> <0E>
<1A>A<> B<> <18>B<> D<> <16>0<> 1<> <17><14>u<EFBFBD>c<EFBFBD>+<2B>&6<>7<>d<EFBFBD> C<><18> <11> <17><18>3<EFBFBD>{<7B>#3<>4<>4<EFBFBD>u<EFBFBD> M<><14> <11> <17><18>3<EFBFBD>{<7B>#3<>4<>4<EFBFBD>u<EFBFBD> M<>G+<2B>*<2A><>&<26>%<25><>4 <11> <10><> <11> <10><> <15><15><13>+<2B>A<EFBFBD>3<EFBFBD>/<2F>0<><14> <11> <17><18>3<EFBFBD>{<7B>#3<>4<>4<EFBFBD>u<EFBFBD> M<><4D> <11> <10><><15><>  <11> <17><18>3<EFBFBD>{<7B>#3<>4<>4<EFBFBD>u<EFBFBD> M<><4D> <11> <10>s<EFBFBD><00>A3H<00>75H<00>,G+<03>AH<00>G<<03>AH<00>;H <00>H<00>+
G9<07>5H<00><
H
<07>H<00> H<03>H<03>
I<03>%I<03>3I<00>8I<00>I<03>I<03>I<00>I><03> I7<04>6I><03>7I;<07>9I>c<00><><00>[SSS5 [U5(ag[R"5S:Xa [ U5$[ S5 g)z1Modify the var partition to enable developer moder<65>r<>zModifying var partitionTrKzCould not modify partitionF)r:r+rMrNrHrA)rs r<00>modify_var_partitionrJsG<00><00><0E>q<EFBFBD>!<21>.<2E>/<2F><1F>~<7E>.<2E>.<2E><13><10><EFBFBD><EFBFBD><18>G<EFBFBD>#<23>'<27><0E>7<>7<><0F>,<2C>-<2D> rc<00>X<00>[R"5S:Xa [S- $[S- $)z'Get the path to shofel2_t124 executablerr<>r<>)rMrNrnrrr<00>get_shofel_pathrL"s(<00><00><0F><EFBFBD><EFBFBD><18>I<EFBFBD>%<25><19>.<2E>.<2E>.<2E> <15><0E> &<26>&rr&<00> num_sectorsc<00><><00>[SSS5 [5nUR5(d [S5 g[ SUSUS-S - S - S - S
S 35 [ S 5 [ S 5 [ U5SSUS3SUS3[ U5/n[R"5S:XaS/U-n[R"U[SS9 UR5(a1UR5RS- n[SUSUSS35 g[S5 g![Ran[SU35 SnAgSnAf[ a [ S5 gf=f)zDump the Jibo eMMC to a filer<65>r<>zDumping Jibo eMMCz.shofel2_t124 not found. Please build it first.FzDumping z
sectors (r
i<00>.1fz GB)...z:This will take approximately 2-4 hours. Please be patient.<2E>+DO NOT disconnect Jibo during this process!<21> EMMC_READ<41>0xrrKrHT<>rErGi@zeMMC dump complete: r|z.2fz GB)zDump file not createdzeMMC dump failed: NzDump interrupted by user)r:rLrorArCr?r-rMrNrOrPrn<00>stat<61>st_sizer=rQ<00>KeyboardInterrupt)r
r&rM<00>shofelrD<00>size_gbrUs r<00> dump_emmcrY)sc<00><00><0E>q<EFBFBD>!<21>(<28>)<29> <1C> <1E>F<EFBFBD> <11>=<3D>=<3D>?<3F>?<3F><13>D<>E<><14><0E><18>+<2B><1D>j<EFBFBD><1B>s<EFBFBD>1B<31>T<EFBFBD>1I<31>D<EFBFBD>1P<31>SW<53>1W<31>X[<5B>0\<5C>\c<>d<>e<><0E>K<>L<><11>?<3F>@<40><15> <0F><06>K<EFBFBD> <17><10><1C>a<EFBFBD> <20> !<21><10><1B>Q<EFBFBD><0F> <20> <0F> <0B> <1C> 
<EFBFBD><03> <14>?<3F>?<3F> <1C><07> '<27><19>(<28>S<EFBFBD>.<2E>C<EFBFBD><12><0E><0E>s<EFBFBD>
<EFBFBD>$<24>7<> <16> <1D> <1D> <1F> <1F>!<21>&<26>&<26>(<28>0<>0<>4F<34>G<>G<EFBFBD> <19>0<><1B> <0A>R<EFBFBD><07><03>}<7D>D<EFBFBD>Q<> R<><17> <17>/<2F> 0<><18><> <15> (<28> (<28><15><13>(<28><11><03>,<2C>-<2D><14><> <1C><15><15>0<>1<><14><15>s%<00>/BD<00> D<00>E<03>/E<03>E<03>Ec<00><><00>[SSS5 [5nUR5(d [S5 g[ SUSS35 [ S 5 [ U5S
S US3[ U5/n[R"5S :XaS /U-n[R"U[SS9 [S5 g![Ran[SU35 SnAgSnAff=f)z'Write a partition back to the Jibo eMMCrr<>z"Writing modified partition to Jibozshofel2_t124 not foundFzWriting to sector 0xrr1rP<00>
EMMC_WRITErRrKrHTrSzPartition written successfully!zWrite failed: N)r:rLrorArCr?r-rMrNrOrPrnr=rQ)rr&rWrDrUs r<00>write_partition_to_emmcr\Us<><00><00><0E>q<EFBFBD>!<21>9<>:<3A> <1C> <1E>F<EFBFBD> <11>=<3D>=<3D>?<3F>?<3F><13>,<2C>-<2D><14><0E>%<25>l<EFBFBD>1<EFBFBD>%5<>S<EFBFBD>9<>:<3A><11>?<3F>@<40><15> <0F><06>K<EFBFBD> <18><10><1C>a<EFBFBD> <20> !<21> <0F><0E> <1F> 
<EFBFBD><03> <14>?<3F>?<3F> <1C><07> '<27><19>(<28>S<EFBFBD>.<2E>C<EFBFBD><12><0E><0E>s<EFBFBD>
<EFBFBD>$<24>7<><15>7<>8<><13><> <15> (<28> (<28><15><13>n<EFBFBD>Q<EFBFBD>C<EFBFBD>(<28>)<29><14><><15>s<00>A B6<00>6C"<03>
C<03>C"c<00>2<00>[SSS5 [5n[S- n[S5 [ U5SSUS3SUS3[ U5/n[
R "5S:XaS /U-n[R"U[S
S 9 [US 5n[R"UR55R5nS S S 5 [US 5n[R"UR55R5nS S S 5 WW:Xa[SU35 g
[!S5 [#SU35 [#SU35 g!,(df  N<>=f!,(df  N\=f![$an [!SU 35 S n A gS n A ff=f)z5Verify the write by reading back and comparing hashesr<73>zVerifying writezverify_partition.binz*Reading back partition for verification...rQrRrrKrHTrSr<>NzVerification passed! Hash: z)Verification FAILED - hashes don't match!z Original: z Readback: FzVerification failed: )r:rLr=rCr-rMrNrOrPrnr<><00>hashlib<69>md5r<35><00> hexdigestr=rAr0r<>)
rr&rMrW<00> verify_pathrDr<><00> original_hash<73> verify_hashrUs
r<00> verify_writerdvsk<00><00><0E>q<EFBFBD>!<21>&<26>'<27> <1C> <1E>F<EFBFBD><1A>3<>3<>K<EFBFBD><0E>;<3B><<3C> <15> <0F><06>K<EFBFBD> <17><10><1C>a<EFBFBD> <20> !<21><10><1B>Q<EFBFBD><0F> <20> <0F> <0B> <1C> 
<EFBFBD><03> <14>?<3F>?<3F> <1C><07> '<27><19>(<28>S<EFBFBD>.<2E>C<EFBFBD><12><0E><0E>s<EFBFBD>
<EFBFBD>$<24>7<><12>.<2E>$<24> '<27>1<EFBFBD>#<23>K<EFBFBD>K<EFBFBD><01><06><06><08>1<>;<3B>;<3B>=<3D>M<EFBFBD>(<28><12>+<2B>t<EFBFBD> $<24><01>!<21>+<2B>+<2B>a<EFBFBD>f<EFBFBD>f<EFBFBD>h<EFBFBD>/<2F>9<>9<>;<3B>K<EFBFBD>%<25> <19>K<EFBFBD> '<27> <19>7<> <0A><EFBFBD>G<> H<><17> <17>C<> D<> <11>L<EFBFBD><1D><0F>0<> 1<> <11>L<EFBFBD><1B> <0A>.<2E> /<2F><18>(<28> '<27><>%<25> $<24><> <15><15><13>+<2B>A<EFBFBD>3<EFBFBD>/<2F>0<><14><><15>sN<00>A&E4<00>3E<03>E4<00>3E#<03> E4<00>*'E4<00>
E <07>E4<00>#
E1<07>-E4<00>4
F<03>>F<03>Fc <00><> <00>[5 [5n[SUSSUSS35 US(a [S5 [SS S
5 USS :Xa[ 5up#nO [ 5up#nU(d[ USX45 g U(aUHn[S U35 M [S5 [RSSS9 [URS9(dg UR(d[5(d[SS9(dg [S- n[S- n[S- nUR (aH[#UR 5nUR%5(d['SU35 g [SU35 OQUR%5(a+UR((d[SU35 [S5 O[+U5(dg [SS S5 [-U5n U (d ['S5 g [S5 U H\n
U
R.[0-S- n [3SU
R4S U
R6S!U
R8SU S"S#U
R:3
5 M^ [=U 5n U (d ['S$5 g [S%U R435 [?XlU5(dg [@RB"Xx5 [S&U35 [EU5(dg UR(d/[S'5 [S(5 [S)S9(d [S*5 [GX|R65(dg URH(a0[KX|R6U R.5(d [S+5 [3S,RM/S-P[NRPPS.P[NRRPS/P[NRTP[NRPPS0P[NRTPS1P[NRRPS2P[NRTPS3P[NRVPS4P[NRTPS5P[NRXPS6P[NRTPS1P[NRRPS7P[NRTPS-PUPS1P[NRXPS8P[NRTPS-P55 g)9z!Run the complete modding workflowzSystem: rYr|rZr}r\z=Running in WSL - USB passthrough may require additional setuprr<>zChecking dependenciesrKFz
Optional: z All required dependencies found!Tr.<00>r<><00>x<00>r<><00>jibo_full_dump.binzvar_partition.binzvar_partition_backup.binzSpecified dump file not found: zUsing existing dump: zUse --force-dump to re-dump<6D>zAnalyzing partition tablezNo partitions found in dumpzPartitions found:rr<>z
: sectors <20>-rOz MB) - z!Could not identify /var partitionz%Identified /var partition: partition zBackup created: z'Please ensure Jibo is still in RCM modez'If Jibo rebooted, re-enter RCM mode now<6F><zContinuing anyway...z6Verification failed, but write may still be successfulr!r/u<>╔═══════════════════════════════════════════════════════════════════╗
║ zMODDING COMPLETE!u<>
╚═══════════════════════════════════════════════════════════════════╝z
z Next steps:z<>
1. Unplug Jibo from USB
2. Hold power button until red LED goes off
3. Power on Jibo normally
4. Wait for boot - you should see a checkmark instead of the eye
5. SSH into Jibo:
zssh root@<jibo-ip>z
Password: r5zYour backup is saved at:zAKeep this backup safe - it contains your Jibo's calibration data!)-r1r`rCr:r<>r<>r<>r?r=r=r>r<><00>rebuild_shofel<65>skip_detectionr<6E>r<>r<>rrorA<00>
force_dumprYr<>r(rr0r%r&r'r)r rrg<00>copyrJr\<00>verifyrdrRr rrrrr) <0A>args<67>sys_info<66>deps_okr<6B>r<>r<>r<><00>var_partition_path<74>backup_var_pathr<68>rr<00> var_partitions r<00> run_full_modrx<00>s<><00><00><10>N<EFBFBD><1F> <20>H<EFBFBD><0E><18>(<28>4<EFBFBD>.<2E>)<29><12>H<EFBFBD>V<EFBFBD>,<<3C>+=<3D>Q<EFBFBD>?<3F>@<40><0F><08><19><12>R<>S<><0F>q<EFBFBD>!<21>,<2C>-<2D><0F><04>~<7E><17> <20>%=<3D>%?<3F>"<22><07>(<28>%?<3F>%A<>"<22><07>(<28> <12>"<22>8<EFBFBD>D<EFBFBD>><3E>7<EFBFBD>E<><14><0F><1C>D<EFBFBD> <19>J<EFBFBD>t<EFBFBD>f<EFBFBD>-<2D> .<2E><1D><12>4<>5<> <0A>N<EFBFBD>N<EFBFBD>4<EFBFBD>$<24>N<EFBFBD>/<2F> <18>d<EFBFBD>&9<>&9<> :<3A><14> <10> <1E> <1E><1E> <20> <20>$<24>S<EFBFBD>1<><1C><19>/<2F>/<2F>I<EFBFBD>!<21>$7<>7<><16><1E>!;<3B>;<3B>O<EFBFBD> <0C>~<7E>~<7E><18><14><1E><1E>(<28> <09><18><1F><1F>!<21>!<21> <17>9<>)<29><1B>E<> F<><18><12>*<2A>9<EFBFBD>+<2B>6<>7<> <12> <19> <19> <1B> <1B>D<EFBFBD>O<EFBFBD>O<EFBFBD><12>*<2A>9<EFBFBD>+<2B>6<>7<><12>0<>1<><18><19>#<23>#<23><18><0F>q<EFBFBD>!<21>0<>1<>%<25>i<EFBFBD>0<>J<EFBFBD> <15><13>1<>2<><14><0E>"<22>#<23><1A><04><17>$<24>$<24>'7<>7<>K<EFBFBD>H<><07> <0A><02>4<EFBFBD>;<3B>;<3B>-<2D>z<EFBFBD>$<24>*;<3B>*;<3B>)<<3C>A<EFBFBD>d<EFBFBD>o<EFBFBD>o<EFBFBD>=N<>b<EFBFBD>QX<51>Y\<5C>P]<5D>]d<>ei<65>en<65>en<65>do<64>p<>q<><1B>
'<27>z<EFBFBD>2<>M<EFBFBD> <18><13>7<>8<><14><11>9<>-<2D>:N<>:N<>9O<39>P<>Q<> <1D>Y<EFBFBD>7I<37> J<> J<><14> <0B>K<EFBFBD>K<EFBFBD>"<22>4<><0E>!<21>/<2F>!2<>3<>4<> <20> 2<> 3<> 3<><14> <10> <1E> <1E><12><<3C>=<3D><12><<3C>=<3D> <20><12>,<2C> <19>0<> 1<> #<23>#5<>7Q<37>7Q<37> R<> R<><14> <0C>{<7B>{<7B><1B>.<2E>0J<30>0J<30>M<EFBFBD>Lf<4C>Lf<4C>g<>g<> <19>R<> S<>
<EFBFBD> <04> <04><01> <04><07><1C><1C><0E> <04><19> <04><1F><1B><1B> <0A> <04>%6<> <04>7=<3D>|<7C>|<7C>n<EFBFBD> <04>EK<45>\<5C>\<5C>N<EFBFBD> <04>SP<03> <04>QW<03>Q]<03>Q]<03>P^<03> <04>^<01> <04>
<08><1B><1B> <0A>  <04>
<19>  <04>
 <20><1C><1C><0E>  <04>
'<04>  <04> <0B>K<EFBFBD>K<EFBFBD>=<3D> <04>#<23> <04>$*<2A><<3C><<3C>.<2E> <04>1<0E> <04><15>m<EFBFBD>m<EFBFBD>_<EFBFBD> <04>!<21> <04>"(<28><1C><1C><0E> <04>/<01> <04><08><1B><1B> <0A> <04>&<26> <04>'-<2D>l<EFBFBD>l<EFBFBD>^<5E> <04>4<01> <04><11><11> <04><01> <04>"<08><1D><1D><0F># <04>"Q<01># <04>"RX<01>Q]<5D>Q]<5D>P^<5E># <04>"_<01># <04><05>( rc<00>:<00>[5 [S5 [RSSS9 [ UR
S9(dgUR (d[SS9(dgUR(a[UR5O[S- n[U5$) z"Only dump the eMMC without moddingzRunning in dump-only modeTr.rfFrgrhri) r1rCr=r>r<>rmrnr<><00>outputrrY)rrr
s r<00> run_dump_onlyr{,sp<00><00><10>N<EFBFBD><0E>*<2A>+<2B> <0C>N<EFBFBD>N<EFBFBD>4<EFBFBD>$<24>N<EFBFBD>/<2F> <18>d<EFBFBD>&9<>&9<> :<3A><14> <10> <1E> <1E> <20><13>-<2D><18>'+<2B>{<7B>{<7B>$<24>t<EFBFBD>{<7B>{<7B>#<23><08>CW<43>8W<38>K<EFBFBD> <14>[<5B> !<21>!rc<00>(<00>[5 [S5 [UR5nUR 5(d[ SU35 g[ 5(dgUR(d[SS9(dg[XR5$)z&Write a pre-modified partition to JibozRunning in write-only modezPartition file not found: Frgrh) r1rCrr<>rorAr<>rnr<>r\r&)rrrs r<00>run_write_onlyr}@st<00><00><10>N<EFBFBD><0E>+<2B>,<2C><19>$<24>.<2E>.<2E>)<29>N<EFBFBD> <19> <20> <20> "<22> "<22><13>0<><1E>0@<40>A<>B<><14> <18>><3E>><3E><14> <10> <1E> <1E> <20><13>-<2D><18> "<22>><3E>3D<33>3D<33> E<>Erc<00>H<00>[R"S[RSS9nUR5nUR SSSS9 UR SS S
S 9 UR S S S S 9 UR SSS SS 9 UR SSSSS9 UR SSSS9 UR SSSS9 UR SSSS9 UR SSSSS9 UR S S!S"S#S$9 UR 5nUR (a"UR(dURS%5 UR(a [U5nO9UR (aUR Ul [U5nO [U5n[R"U(aS&OS'5 g![ a/ [#S(5 [%S)5 [R"S*5 g[&aBn[)S+U35 S&SKnUR-5 [R"S'5 SnAgSnAff=f),NzGJibo Auto-Mod Tool - Automatically enable developer mode on Jibo robotsz<73>
Examples:
%(prog)s # Run full modding workflow
%(prog)s --dump-only # Only dump eMMC
%(prog)s --write-partition var.bin --start-sector 0x7E9022
%(prog)s --dump-path existing_dump.bin # Use existing dump
)<03> description<6F>formatter_class<73>epilogz --dump-only<6C>
store_truez$Only dump the eMMC without modifying)<02>action<6F>helpz--write-partition<6F>FILEz8Write a partition file to Jibo (requires --start-sector))<02>metavarr<72>z --dump-pathz)Use existing dump file instead of dumpingz--outputr3z<Output file for dump (default: jibo_work/jibo_full_dump.bin)z--start-sectorc<00><00>[US5$)Nr)r+)rs r<00><lambda><3E>main.<locals>.<lambda>ss
<00><00><13>Q<EFBFBD><01>ri"<22>~z9Start sector for write operation (hex, default: 0x7E9022))<03>type<70>defaultr<74>z --force-dumpz&Force re-dump even if dump file existsz--rebuild-shofelzForce rebuild of Shofel exploitz--skip-detectionz0Skip USB device detection (useful for debugging)z--verifyTz,Verify write by reading back (default: True))r<>r<>r<>z --no-verify<66> store_falserqzSkip write verification)r<><00>destr<74>z)--write-partition requires --start-sectorrr<>r/zOperation cancelled by user<65><72>zUnexpected error: )<17>argparse<73>ArgumentParser<65>RawDescriptionHelpFormatter<65>add_mutually_exclusive_group<75> add_argument<6E>
parse_args<EFBFBD>write_partitionr&<00>error<6F> dump_onlyr{r<>r}rxr<><00>exitrVr0r?r<>rA<00> traceback<63> print_exc)<06>parser<65>
mode_grouprr<00>successrUr<>s r<00>mainr<6E>Zs-<00><00> <15> $<24> $<24>]<5D> <20><<3C><<3C> <0C>
<06>F<EFBFBD><18>4<>4<>6<>J<EFBFBD><0E><1B><1B>M<EFBFBD>,<2C> F<><1C>H<01><0E><1B><1B>/<2F><16> Z<><1C>\<01> <0B><17><17> <0A>v<EFBFBD>G<><18>I<01>
<EFBFBD><17><17>
<EFBFBD>D<EFBFBD>&<26>Z<><18>\<01>
<EFBFBD><17><17>(<28>/B<>H<EFBFBD>W<><18>Y<01>
<EFBFBD><17><17><0E>|<7C>D<><18>F<01>
<EFBFBD><17><17>*<2A><<3C>=<3D><18>?<3F>
<EFBFBD><17><17>*<2A><<3C>N<><18>P<01>
<EFBFBD><17><17>
<EFBFBD><<3C><14>J<><18>L<01>
<EFBFBD><17><17> <0A>m<EFBFBD>(<28>5<><18>7<> <12> <1C> <1C> <1E>D<EFBFBD> <0C><1B><1B>D<EFBFBD>$5<>$5<><0E> <0C> <0C>@<40>A<><14> <0F>><3E>><3E>#<23>D<EFBFBD>)<29>G<EFBFBD> <11> !<21> !<21>!<21>1<>1<>D<EFBFBD>N<EFBFBD>$<24>T<EFBFBD>*<2A>G<EFBFBD>"<22>4<EFBFBD>(<28>G<EFBFBD> <0B><08><08>g<EFBFBD><11>1<EFBFBD>%<25><> <1C><16> <0A>d<EFBFBD> <0B><15>3<>4<> <0B><08><08><13> <0A> <14><14><13>(<28><11><03>,<2C>-<2D><18><11><1B><1B><1D> <0B><08><08><11> <0B> <0B><> <14>s<00>(A5F<00>6H!<03> H!<03>8H<03>H!<03>__main__)NFTFrm)F)rl)Ir*rYr<>r?r<>rgr^rMrOr<><00>pathlibr<00>typingrrr<00> dataclassesr<00>__file__<5F>parent<6E>resolve<76>
SCRIPT_DIRrnr=<00>EMMC_TOTAL_SECTORSrr rN<00>environ<6F>dir<69>attrr<72><00>setattrr#r1r+r-r:r=r?rArC<00>bool<6F>CompletedProcessrV<00>dictr`rirvr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r rr+rHrJrLrYr\rdrxr{r}r<>rrrr<00><module>r<>s<><00><01>
<04>
<EFBFBD>
<EFBFBD> <0B> <0A> <0A><0E><0F><11><0F><18>(<28>(<28>!<21> <12>(<28>^<5E> "<22> "<22> *<2A> *<2A> ,<2C>
<EFBFBD> <17>(<28> "<22>
<EFBFBD> <15> <0B> #<23><08><1F><12><16><10><15><15> <0C>?<3F>?<3F><14> <09>!<21>l<EFBFBD>"<22>*<2A>*<2A>&D<><13>F<EFBFBD> <0B><04><13><EFBFBD><EFBFBD>s<EFBFBD>#<23>#<23> <13>F<EFBFBD>D<EFBFBD>"<22> %<25><1C>
 <0B><0E><0E> <0B><0E><05>a<01>S<EFBFBD>a<01><13>a<01>s<EFBFBD>a<01>
8<>3<EFBFBD>8<>
9<>3<EFBFBD>9<>
6<><13>6<>
7<><03>7<>
7;<3B><@<40>"<22><0E>T<EFBFBD>#<23>Y<EFBFBD><0E>X<EFBFBD>d<EFBFBD>^<5E><0E> $<24><0E>59<35><0E><1A><0E>'1<>'B<>'B<><0E>.<06><14><06>E<01>D<EFBFBD>E<01>E<01>t<EFBFBD>E<01>,0<>%<25><04>d<EFBFBD>3<EFBFBD>i<EFBFBD><14>c<EFBFBD><19>(B<>"C<>,0<>^0<>E<EFBFBD>$<24><04>S<EFBFBD> <09>4<EFBFBD><03>9<EFBFBD>*D<>$E<>0<>*;<05>s<EFBFBD>;<05>T<EFBFBD>#<23>Y<EFBFBD>;<05>$<24>s<EFBFBD>)<29>;<05>D<1F>D<EFBFBD><1F>K<01>e<EFBFBD>D<EFBFBD>$<24>s<EFBFBD>)<29>O<EFBFBD>4<>K<01>&:<15><04>:<15><14>:<15>B3<11><14>3<11>l<11>s<EFBFBD><11>D<EFBFBD><11>0=<16>D<EFBFBD>=<16>T<EFBFBD>-<2D>-@<40>=<16>@&<16>d<EFBFBD>&<16>t<EFBFBD>M<EFBFBD>/B<>&<16>R<10>4<EFBFBD> <0A>#6<><10>8<EFBFBD>M<EFBFBD>;R<><10>0<15><14><15>-<2D><15>d<EFBFBD><15>W[<5B><15>(^<15>D<EFBFBD>^<15>T<EFBFBD>^<15>BG<11>T<EFBFBD>G<11>d<EFBFBD>G<11>T <11><14> <11>$<24> <11>('<27><14>'<27>67<36>K]<5D>)<15>4<EFBFBD>)<15>s<EFBFBD>)<15>S<EFBFBD>)<15>bf<62>)<15>X<15>D<EFBFBD><15><03><15><04><15>B)<15><14>)<15>S<EFBFBD>)<15>s<EFBFBD>)<15>t<EFBFBD>)<15>`C<10>$<24>C<10>L"<22>4<EFBFBD>"<22>(F<01>D<EFBFBD>F<01>4@<14>F <0C>z<EFBFBD><19><08>F<EFBFBD>r