From 1e040cbea9ff1e7febab16055f5a1e65cc66996c Mon Sep 17 00:00:00 2001 From: Jonathan Herrewijnen Date: Tue, 5 Nov 2024 17:30:09 +0100 Subject: [PATCH] modifies pointers to also debug boot MIB3 --- source/exploit/.vscode/launch.json | 2 +- source/exploit/exploit.py | 46 +++++++++++++++++++++-------- source/exploit/ttbr0_el3.pkl | Bin 1657652 -> 1690540 bytes 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/source/exploit/.vscode/launch.json b/source/exploit/.vscode/launch.json index 5c86962..b640638 100644 --- a/source/exploit/.vscode/launch.json +++ b/source/exploit/.vscode/launch.json @@ -37,7 +37,7 @@ "program": "exploit.py", "console": "integratedTerminal", "justMyCode": false, - "args": ["--debugger-boot"], + "args": ["--debugger-boot", "--MIB3"], }, { "name": "Debug current file", diff --git a/source/exploit/exploit.py b/source/exploit/exploit.py index d90dd22..7a3d50e 100644 --- a/source/exploit/exploit.py +++ b/source/exploit/exploit.py @@ -649,6 +649,17 @@ class ExynosDevice(): self.relocate_debugger(debugger=debugger, entry=0x11200000, storage=0x11203000, g_data_received=0x11204000) DEBUGGER_ADDR = 0x11200000 + # Load bootloader stages + bl1 = open("../S7/g930f_latest/fwbl1_a.bin", "rb").read() + bl31 = open("../S7/g930f_latest/el3_mon_a.bin", "rb").read() + bl2 = open("../S7/g930f_latest/bl2_a.bin", "rb").read() + bl33 = open("../S7/g930f_latest/u-boot.bin", "rb").read() + if args.MIB3: + bl1 = open("../S7/g930f_latest/g930f_sboot.bin.1.bin", "rb").read() + bl31 = open("../S7/g930f_latest/g930f_sboot.bin.2.bin", "rb").read() + bl2 = open("../S7/g930f_latest/g930f_sboot.bin.3.bin", "rb").read() + bl33 = open("../S7/g930f_latest/g930f_sboot.bin.4.bin", "rb").read() + # Test debugger connection self.cd.test_connection() @@ -667,7 +678,6 @@ class ExynosDevice(): self.connect_device() # Send boot stage 1 - bl1 = open("../S7/g930f_latest/g930f_sboot.bin.1.bin", "rb").read() self.send_normal_stage(bl1) assert self.usb_read(0x200) == b"GiAs", "Failed to jump back to debugger" @@ -690,7 +700,12 @@ class ExynosDevice(): # Hijack ROM download function hijacked_fun = u32(self.cd.memdump_region(0x020200dc, 4)) self.cd.memwrite_region(0x020200dc, p32(DEBUGGER_ADDR)) # hijack ROM_DOWNLOAD_USB for BL31 - self.cd.memwrite_region(0x02021880, self.cd.arch_dbg.sc.branch_absolute(DEBUGGER_ADDR, branch_ins="br")) + + BL1_POINTER = 0x02021880 + if args.MIB3: + BL1_POINTER = 0x02021890 + + self.cd.memwrite_region(BL1_POINTER, self.cd.arch_dbg.sc.branch_absolute(DEBUGGER_ADDR, branch_ins="br")) # Write a patch to BL1 in memory # self.cd.memwrite_region(0x2021800+bl1.find(b'2015'), b'2014') @@ -716,7 +731,7 @@ class ExynosDevice(): # After downloading the next stage, make sure the device reconnects time.sleep(2) self.connect_device() - self.send_normal_stage(open("../S7/g930f_latest/g930f_sboot.bin.2.bin", "rb").read()) + self.send_normal_stage(bl31) time.sleep(2) # Assure that the debugger is returning (obligatory assuration) @@ -730,19 +745,25 @@ class ExynosDevice(): # Assure return to debugger time.sleep(2) self.usb_read(0x200) # GiAs - self.cd.memwrite_region(0x02031008, b"ELH") + # self.cd.memwrite_region(0x02031008, b"ELH") self.cd.arch_dbg.state.LR = DEBUGGER_ADDR TTBR0_EL3 = 0x02035600 # Zeroed out # Modifies/disables setting up MMU (but is set up eventually) -> MMU says 0x0 instead of 0x1, but still little access (and proper USB recovyer boot!?) - self.cd.memwrite_region(0x020244e8, struct.pack('>I', 0x1f0c00f1)) # Change check to always be false + MMU_CHECK = 0x020244e8 + if args.MIB3: + MMU_CHECK = 0x0202a314 + self.cd.memwrite_region(MMU_CHECK, struct.pack('>I', 0x1f0c00f1)) # Change check to always be false # DWC3 OTG update mode -> Might be useful at some point? # self.cd.memwrite_region(0x02021580, struct.pack('>I', 0x00000000)) # Jump into BL31 and execute it - self.cd.restore_stack_and_jump(0x02024010) + BL31_POINTER = 0x02024010 + if args.MIB3: + BL31_POINTER = 0x020c0000 + self.cd.restore_stack_and_jump(BL31_POINTER) # Obligatory reconnect and check of debugger time.sleep(2) @@ -767,7 +788,6 @@ class ExynosDevice(): self.cd.restore_stack_and_jump(hijacked_fun) # ==== Stage 4 BL2 ==== - bl2 = open("../S7/g930f_latest/g930f_sboot.bin.3.bin", "rb").read() self.send_normal_stage(bl2) time.sleep(2) self.connect_device() @@ -794,15 +814,11 @@ class ExynosDevice(): self.cd.restore_stack_and_jump(hijacked_fun) - # ==== Stage 5 ==== - # Sends stage 5 (BL33) but returns to debugger after sending. - stage4 = open("../S7/g930f_latest/g930f_sboot.bin.4.bin", "rb").read() - # print_payload = open("/home/jonathan/projects/samsung_s7/source/screen_print/print.bin", "rb").read() # off = stage4.find(bytes.fromhex("fd 7b bd a9 fd 03 00 91 f3 53 01 a9 d4 08 00 d0 f3 03 01 2a a0 17 00 f9")) # stage4 = stage4[off:] + print_payload + stage4[off+len(print_payload):] - self.send_normal_stage(stage4) + self.send_normal_stage(bl33) self.connect_device() self.usb_read(0x200) # GiAs @@ -810,6 +826,11 @@ class ExynosDevice(): self.cd.memwrite_region(0x8f01dbdc, struct.pack('>I', 0x03030035)) self.cd.memwrite_region(0x8f01dbe0, struct.pack('>I', 0x80f9ff34)) + # Move default values into registers + self.cd.memwrite_region(0x8f021bac, struct.pack('>I', 0x20008052)) + self.cd.memwrite_region(0x8f021bdc, struct.pack('>I', 0x20008052)) + self.cd.memwrite_region(0x8f021bbc, struct.pack('>I', 0x20008052)) + # Jump into a different function that continues the boot flow (different than BL33_LR) self.cd.restore_stack_and_jump(0x02024e5c) @@ -822,6 +843,7 @@ if __name__ == "__main__": arg.add_argument("--debug", action="store_true", help="Debug USB stack", default=False) arg.add_argument("--unsecure-boot", action="store_true", help="Unsecure boot", default=False) arg.add_argument("--debugger-boot", action="store_true", help="Unsecure boot", default=False) + arg.add_argument("--MIB3", action="store_true", help="Whether boot is on a MIB3", default=False) args = arg.parse_args() exynos = ExynosDevice() diff --git a/source/exploit/ttbr0_el3.pkl b/source/exploit/ttbr0_el3.pkl index 5ffa2320987c9d6473156f248a9764df9a25635f..f00496d81e26947debbc290ef87828caed6cc728 100644 GIT binary patch delta 33683 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ǡUK(4 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 delta 629 zcmY+?EldJo7{Kv+@9w=XKJNSDbrXusA|{grhXpmzq?`tEZf-iEXrftg(;ax5&7ua! z=7bS!2FEaH&}MLwXe2j-n-8|!t`gBoyh$q@XLjgtTNypj}=@ z`e4bR89_lhV=JJ?f{OISRzb&thV