Asmageddon/airbreak-plus
Modified and improved AirSense 10 PAP device firmware. Messy and experimental.
Jailbreaking CPAP machines to make temporary ventilators
This is the README for the internals of ResMed CPAP jailbreak works;
for a high-level overview, see airbreak.dev.
The project is MIT licnsed and has a CoC.
Please review the Contributor's Guidelines before
submitting issues or pull requests.
This tree does not contain any files that are copyrighted by ResMed.
You must have a device to extract the firmware from, which is then patched,
and the modified version is re-flashed.
You will need the tools described in docs/disassembly.
The stubs.S file that has been committed is for SX567-0401. Flashing it on
a different version will likely cause problems.
Extensions can either replace existing functions at fixed addresses,
or can use some of the unused space in the image.
The Makefile has a short explanation of how to do this; the
patch-airsense file will also need to be updated to patch the
binary file into the firmware.
Helpful GDB commands:
Start gdb, connect to the OpenOCD server and disassemble the current address:
gdb-multiarch -iex 'target remote localhost:3333'
display/i $pc
Reboot the device and halt before running any code:
mon reset halt
Unlock the STM32 and flash the new firmware into it:
mon stm32f2x options_write 0 0x2c ; reset halt ; flash write_image erase stm32-unlocked.bin 0x8000000
Read the Therapy Manager floating point variables, or a specific one like the target
pressure (0x2d):
x/200f 0x2000e948
x/f (0x2000e948 + 4 * 0x2a)
Read the Therapy Manager integer variables, or a specific one like the current mode (0x6F):
x/200xw 0x2000e750
x/xw (0x2000e750 + 4 * 0x6F)
