Recognizing the central role of embedded systems like ARM in the proliferation of the Internet of Things, I founded Azeria Labs to help people start prodding the security of ARM-based technologies and understand how to test the Internet of Things for critical vulnerabilities.
The ARM Assembly Basics section of this site is meant for people who want to get the familiar with the ARM Assembly language. These tutorials do not require prior knowledge about the ARM platform and are a good starting point for future ARM reverse engineers or security researchers.
The ARM Exploit Development section is for those who have enough knowledge about ARM assembly language and want to learn about vulnerability types and exploitation techniques.
Writing ARM Assembly
An introduction into ARM assembly basics covering the following topics: differences between Intel processor and ARM processor, how assembly works under the hood, and how to compile an ARM assembly program.
Data Types and Registers
Learn about ARM data types, the different types of ARM registers, and the usage of the CPSR (Current Program Status Register) in conditional execution.
ARM and Thumb Instruction Set
Learn about the differences between the ARM and Thumb instruction set and the most common instructions used for writing ARM assembly code.
Memory Instructions: Load and Store
This chapter describes LDR/STR instructions covering three offset forms: Immediate value as the offset, Register as the offset, and Scaled register as the offset.
Load and Store Multiple
This chapter describes how to Load and Store multiple values at once using the instructions LDM and STM. You will also learn how PUSH and POP are being used on ARM.
Conditional Execution and Branching
Learn how to use condition codes for conditional execution in ARM and Thumb mode and how to use conditional branch instructions to jump to other functions.
Stack and Functions
In this part we will look into a special memory region of the process called the Stack and explore how functions work on the ARM platform.
Learn how the memory layout of a process looks like and what memory corruptions are. This section covers Stack memory corruptions and Heap memory corruptions in more detail.
Writing ARM Shellcode
These challenges are aimed at those of you who have no experience with reverse engineering or exploiting ARM binaries. They’re meant to introduce a few core concepts of binary exploitation.