# 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 # CFLAGS := -D_GNU_SOURCE -ggdb ifneq ($(wildcard target-p118.c),) DEFINES += TARGET_ABL_P118 TARGETS += target-p118.c DEPENDS += LinuxLoader-p118.pe endif 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 CC := x86_64-w64-mingw32-gcc CXX := x86_64-w64-mingw32-g++ PEPARSE_CMAKE_OPTS := -DCMAKE_SYSTEM_NAME=Windows \ -DCMAKE_C_COMPILER=$(CC) \ -DCMAKE_CXX_COMPILER=$(CXX) \ -DCMAKE_FIND_ROOT_PATH=mingw-w64-gcc \ -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 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 endif PEPARSE_CMAKE_OPTS += -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DDEFAULT_CXX_FLAGS=-std=c++14 -DCMAKE_CXX_FLAGS=-Wno-deprecated-declarations \ -DCMAKE_COLOR_MAKEFILE=OFF -DCMAKE_MESSAGE_LOG_LEVEL=WARNING LDFLAGS += -Lpe-parse/build-$(CROSS_BUILD)/pe-parser-library all: $(XPERABLE) 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 %-$(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 $(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $^ -lpe-parse -lusb-1.0 pe-load-$(CROSS_BUILD).o: pe-load.cpp pe-parse/build-$(CROSS_BUILD)/pe-parser-library/libpe-parse.a $(CXX) $(CFLAGS) -std=c++14 -o $@ -c $< -Ipe-parse/pe-parser-library/include 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) 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` $@ clean: rm -rf *-$(CROSS_BUILD).o pe-parse/build-$(CROSS_BUILD) rm -rf boot/bootloader-p118 distclean: clean rm -rf pe-parse/build-* rm -f *.o rm -f xperable xperable.native xperable.x86_64 xperable.exe xperable.aarch64 xperable.i686 rm -f LinuxLoader-p118.pe fullclean: distclean rm -rf pe-parse rm -rf libusb-mingw rm -rf boot