2025-07-20 22:53:16 +01:00
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
#
|
|
|
|
|
# Makefile for xperable - Xperia ABL fastboot Exploit of CVE-2021-1931
|
|
|
|
|
#
|
|
|
|
|
# Copyright (C) 2025 j4nn at xdaforums
|
|
|
|
|
#
|
|
|
|
|
|
2025-09-13 23:46:35 +01:00
|
|
|
CFLAGS := -D_GNU_SOURCE -ggdb
|
2025-07-20 22:53:16 +01:00
|
|
|
|
2025-09-13 23:46:35 +01:00
|
|
|
ifneq ($(wildcard target-p118.c),)
|
|
|
|
|
DEFINES += TARGET_ABL_P118
|
|
|
|
|
TARGETS += target-p118.c
|
|
|
|
|
DEPENDS += LinuxLoader-p118.pe
|
|
|
|
|
endif
|
|
|
|
|
|
2025-07-20 22:53:16 +01:00
|
|
|
ifeq ($(CROSS_BUILD),)
|
|
|
|
|
CROSS_BUILD := native
|
|
|
|
|
XPERABLE ?= xperable
|
|
|
|
|
CC := gcc
|
|
|
|
|
CXX := g++
|
|
|
|
|
ifneq ($(wildcard libusb-static/libusb-1.0.a),)
|
|
|
|
|
LDFLAGS += -static -Llibusb-static
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
else ifeq ($(CROSS_BUILD),mingw64)
|
|
|
|
|
XPERABLE := xperable.exe
|
2026-03-01 23:20:10 +07:00
|
|
|
CC := x86_64-w64-mingw32-gcc
|
|
|
|
|
CXX := x86_64-w64-mingw32-g++
|
2025-07-20 22:53:16 +01:00
|
|
|
PEPARSE_CMAKE_OPTS := -DCMAKE_SYSTEM_NAME=Windows \
|
|
|
|
|
-DCMAKE_C_COMPILER=$(CC) \
|
|
|
|
|
-DCMAKE_CXX_COMPILER=$(CXX) \
|
2026-03-01 23:20:10 +07:00
|
|
|
-DCMAKE_FIND_ROOT_PATH=mingw-w64-gcc \
|
2025-07-20 22:53:16 +01:00
|
|
|
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY
|
|
|
|
|
DEPENDS += libusb-mingw/MinGW64/static/libusb-1.0.a
|
|
|
|
|
CFLAGS += -Ilibusb-mingw/include
|
|
|
|
|
LDFLAGS += -Llibusb-mingw/MinGW64/static
|
|
|
|
|
|
|
|
|
|
else ifeq ($(CROSS_BUILD),aarch64)
|
|
|
|
|
XPERABLE := xperable.aarch64
|
|
|
|
|
CC := aarch64-unknown-linux-musl-gcc
|
|
|
|
|
CXX := aarch64-unknown-linux-musl-g++
|
|
|
|
|
PEPARSE_CMAKE_OPTS := -DCMAKE_SYSTEM_NAME=Linux \
|
|
|
|
|
-DCMAKE_C_COMPILER=$(CC) \
|
|
|
|
|
-DCMAKE_CXX_COMPILER=$(CXX) \
|
|
|
|
|
-DCMAKE_FIND_ROOT_PATH=/usr/aarch64-unknown-linux-musl \
|
|
|
|
|
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY
|
|
|
|
|
LDFLAGS += -static
|
|
|
|
|
|
|
|
|
|
else ifeq ($(CROSS_BUILD),x86_64)
|
|
|
|
|
XPERABLE ?= xperable
|
|
|
|
|
CC := x86_64-unknown-linux-musl-gcc
|
|
|
|
|
CXX := x86_64-unknown-linux-musl-g++
|
|
|
|
|
PEPARSE_CMAKE_OPTS := -DCMAKE_SYSTEM_NAME=Linux \
|
|
|
|
|
-DCMAKE_C_COMPILER=$(CC) \
|
|
|
|
|
-DCMAKE_CXX_COMPILER=$(CXX) \
|
|
|
|
|
-DCMAKE_FIND_ROOT_PATH=/usr/x86_64-unknown-linux-musl \
|
|
|
|
|
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY
|
|
|
|
|
LDFLAGS += -static
|
2026-01-17 11:18:34 +01:00
|
|
|
|
|
|
|
|
else ifeq ($(CROSS_BUILD),i686)
|
|
|
|
|
XPERABLE ?= xperable.i686
|
|
|
|
|
CC := i686-unknown-linux-musl-gcc
|
|
|
|
|
CXX := i686-unknown-linux-musl-g++
|
|
|
|
|
PEPARSE_CMAKE_OPTS := -DCMAKE_SYSTEM_NAME=Linux \
|
|
|
|
|
-DCMAKE_C_COMPILER=$(CC) \
|
|
|
|
|
-DCMAKE_CXX_COMPILER=$(CXX) \
|
|
|
|
|
-DCMAKE_FIND_ROOT_PATH=/usr/i686-unknown-linux-musl \
|
|
|
|
|
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY
|
|
|
|
|
LDFLAGS += -static
|
2025-07-20 22:53:16 +01:00
|
|
|
endif
|
|
|
|
|
|
2026-01-17 11:18:34 +01:00
|
|
|
PEPARSE_CMAKE_OPTS += -DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
2026-01-17 09:19:13 +01:00
|
|
|
-DDEFAULT_CXX_FLAGS=-std=c++14 -DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations \
|
2025-07-20 22:53:16 +01:00
|
|
|
-DCMAKE_COLOR_MAKEFILE=OFF -DCMAKE_MESSAGE_LOG_LEVEL=WARNING
|
|
|
|
|
LDFLAGS += -Lpe-parse/build-$(CROSS_BUILD)/pe-parser-library
|
|
|
|
|
|
|
|
|
|
all: $(XPERABLE)
|
|
|
|
|
|
2025-09-13 23:46:35 +01:00
|
|
|
boot/bootloader_X_BOOT_SDM845_LA2_0_P_118_X-FLASH-ALL-B6B5.sin:
|
|
|
|
|
@if [ ! -e 52.0.A.8.50 ]; then \
|
|
|
|
|
mkdir -p boot; \
|
|
|
|
|
echo -e "\nDownload stock firmware 52.0.A.8.50 version and copy"; \
|
|
|
|
|
echo -e " $@\nfile into the boot subdirectory here.\n"; false; \
|
|
|
|
|
else unzip -q -n -d boot 52.0.A.8.50/boot.zip *-B6B5.sin; fi
|
|
|
|
|
|
2025-07-20 22:53:16 +01:00
|
|
|
%-$(CROSS_BUILD).o: %.c
|
|
|
|
|
$(CC) $(CFLAGS) -o $@ -c $<
|
|
|
|
|
|
|
|
|
|
xperable-$(CROSS_BUILD).o: xperable.c $(TARGETS) fbusb.h logging.h $(DEPENDS)
|
|
|
|
|
$(CC) $(addprefix -D, $(DEFINES)) $(CFLAGS) -o $@ -c $<
|
|
|
|
|
|
|
|
|
|
$(XPERABLE): xperable-$(CROSS_BUILD).o pe-load-$(CROSS_BUILD).o fbusb-$(CROSS_BUILD).o
|
2025-09-13 23:46:35 +01:00
|
|
|
$(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $^ -lpe-parse -lusb-1.0
|
2025-07-20 22:53:16 +01:00
|
|
|
|
|
|
|
|
pe-load-$(CROSS_BUILD).o: pe-load.cpp pe-parse/build-$(CROSS_BUILD)/pe-parser-library/libpe-parse.a
|
2026-01-17 08:38:34 +01:00
|
|
|
$(CXX) $(CFLAGS) -std=c++14 -o $@ -c $< -Ipe-parse/pe-parser-library/include
|
2025-07-20 22:53:16 +01:00
|
|
|
|
|
|
|
|
pe-parse/CMakeLists.txt:
|
|
|
|
|
if [ -d .git ]; then git submodule update --init; \
|
|
|
|
|
else wget https://github.com/trailofbits/pe-parse/archive/refs/heads/master.zip \
|
|
|
|
|
&& unzip -q master.zip && mv pe-parse-master pe-parse && rm -f master.zip ; \
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
libusb-mingw/MinGW64/static/libusb-1.0.a:
|
|
|
|
|
mkdir -p libusb-mingw
|
|
|
|
|
wget -P libusb-mingw https://github.com/libusb/libusb/releases/download/v1.0.29/libusb-1.0.29.7z
|
|
|
|
|
7z -olibusb-mingw x libusb-mingw/libusb-1.0.29.7z MinGW64 include README.txt &>/dev/null \
|
|
|
|
|
|| [ -f libusb-mingw/MinGW64/static/libusb-1.0.a -a -f libusb-mingw/include/libusb.h ]
|
|
|
|
|
rm -f libusb-mingw/MinGW64/static/libusb-1.0.dll.a
|
|
|
|
|
mkdir -p libusb-mingw/include/libusb-1.0
|
|
|
|
|
mv libusb-mingw/include/libusb.h libusb-mingw/include/libusb-1.0
|
|
|
|
|
|
|
|
|
|
pe-parse/build-$(CROSS_BUILD)/pe-parser-library/libpe-parse.a: pe-parse/CMakeLists.txt
|
|
|
|
|
mkdir -p pe-parse/build-$(CROSS_BUILD)
|
|
|
|
|
(cd pe-parse/build-$(CROSS_BUILD); cmake -DBUILD_SHARED_LIBS=OFF $(PEPARSE_CMAKE_OPTS) .. && make -j4)
|
|
|
|
|
|
2025-09-13 23:46:35 +01:00
|
|
|
LinuxLoader-p118.pe: boot/bootloader_X_BOOT_SDM845_LA2_0_P_118_X-FLASH-ALL-B6B5.sin
|
|
|
|
|
mkdir -p boot/bootloader-p118
|
|
|
|
|
tar xf $< -C boot/bootloader-p118
|
|
|
|
|
tar xf boot/bootloader-p118/bootloader.000 -C boot/bootloader-p118
|
|
|
|
|
uefi-firmware-parser -b -e -q -o boot/bootloader-p118/abl boot/bootloader-p118/abl_X_BOOT_SDM845_LA2_0_P_118.mbn &>/dev/null
|
|
|
|
|
cp -p `find boot/bootloader-p118/abl -name section1.pe` $@
|
|
|
|
|
|
2025-07-20 22:53:16 +01:00
|
|
|
clean:
|
|
|
|
|
rm -rf *-$(CROSS_BUILD).o pe-parse/build-$(CROSS_BUILD)
|
2026-03-01 23:20:10 +07:00
|
|
|
rm -rf boot/bootloader-p118
|
2025-07-20 22:53:16 +01:00
|
|
|
|
|
|
|
|
distclean: clean
|
|
|
|
|
rm -rf pe-parse/build-*
|
|
|
|
|
rm -f *.o
|
2026-01-17 11:18:34 +01:00
|
|
|
rm -f xperable xperable.native xperable.x86_64 xperable.exe xperable.aarch64 xperable.i686
|
2026-03-01 23:20:10 +07:00
|
|
|
rm -f LinuxLoader-p118.pe
|
2025-07-20 22:53:16 +01:00
|
|
|
fullclean: distclean
|
|
|
|
|
rm -rf pe-parse
|
|
|
|
|
rm -rf libusb-mingw
|
|
|
|
|
rm -rf boot
|