我对 Galaxy S6 引导加载程序 ( sboot.bin)有一些问题。
从0x3F000该文件中,我认为存在真正的引导加载程序。
所以我尝试用ida 6.8 pro(64位)反汇编
但它没有拆解清楚。(拇指模式和手臂模式)
IDA pro 6.8 能否支持 Galaxy S6 引导加载程序 ( sboot.bin)?
有没有人成功拆解过 Galaxy S6 引导加载程序(sboot.bin)?(又名 armv8,aarch64 架构)
我对 Galaxy S6 引导加载程序 ( sboot.bin)有一些问题。
从0x3F000该文件中,我认为存在真正的引导加载程序。
所以我尝试用ida 6.8 pro(64位)反汇编
但它没有拆解清楚。(拇指模式和手臂模式)
IDA pro 6.8 能否支持 Galaxy S6 引导加载程序 ( sboot.bin)?
有没有人成功拆解过 Galaxy S6 引导加载程序(sboot.bin)?(又名 armv8,aarch64 架构)
Quarkslab 的 Fernand Lone Sang 成功地反汇编了 S6 引导加载程序(ARMv8、AArch64):
SBOOT 的基地址是0x02102000通过执行这个 python 脚本确定的:
import sys
import string
import struct
RT_SVC_DESC_FORMAT = "BBB5xQQQ"
RT_SVC_DESC_SIZE = struct.calcsize(RT_SVC_DESC_FORMAT)
RT_SVC_DESC_OFFSET = 0xcb50
RT_SVC_DESC_ENTRIES = (0xcc10 - 0xcb50) / RT_SVC_DESC_SIZE
if len(sys.argv) != 2:
print("usage: %s <sboot.bin>" % sys.argv[0])
sys.exit(1)
sboot_file = open(sys.argv[1], "rb")
sboot_data = sboot_file.read()
rt_svc_desc = []
for idx in range(RT_SVC_DESC_ENTRIES):
start = RT_SVC_DESC_OFFSET + (idx << 5)
desc = struct.unpack(RT_SVC_DESC_FORMAT,
sboot_data[start:start+RT_SVC_DESC_SIZE])
rt_svc_desc.append(desc)
strlen = lambda x: 1 + strlen(x[1:]) if x and x[0] in string.printable else 0
for base_addr in range(0x2100000, 0x21fffff, 0x1000):
names = []
print("[+] testing base address %08x" % base_addr)
for desc in rt_svc_desc:
offset = desc[3] - base_addr
if offset < 0:
sys.exit(0)
name_len = strlen(sboot_data[offset:])
if not name_len:
break
names.append(sboot_data[offset:offset+name_len])
if len(names) == RT_SVC_DESC_ENTRIES:
print("[!] w00t!!! base address is %08x" % base_addr)
print(" found names: %s" % ", ".join(names))
它是一个 ARM64 二进制文件。如果我们查看同一个 sboot.bin,它实际上是从偏移 10 开始的:
0x00000000 0x00000010 DCD 0x10 ; ^P
0x00000004 0xe99c208a DCD 0xe99c208a ; <8A> <9C><E9>
0x00000008 0x00000000 DCD 0x0 ;
0x0000000c 0x00000000 DCD 0x0 ;
0x00000010 0x14000002 B 0x18
-------------------------------
0x00000014 0x14000000 B 0x14
-------------------------------
0x00000018 0x58000a80 LDR X0, #336 ; 0x168
0x0000001c 0xb9400000 LDR W0, [X0, #0]
0x00000020 0xd2b00001 MOVZ X1, 0x8000, LSL #16
尝试使用 disarm ( http://newosxbook.com/tools/disarm.html ) 因为 IDA 不知何故在处理这个文件时遇到了问题。(显然也有接近尾声的 ARM32 位)