Mobile/Android
Android App에서 Memory Corruption Exploit이 불가능한 이유
pyozzi
2019. 9. 21. 21:06
[ 안드로이드 시스템 아키텍처 ]
위 그림은 Android System을 나타낸다.
일반적으로 사용하는 App들은 DalvikVM 내부에서 SmaliCode가 해석되어 실행된다.
[1] DalvikVM은 Register-based System이라는 특징을 가지고 있다.
약 64,000개의 레지스터가 있으며, 이 중 16개 또는 256개만 사용하는게 일반적이다.
따라서, DalvikVM에는 Stack이라는 개념이 없고 이 때문에 Stack-based Buffer Overflow가 발생하지 않는다.
다르게 해석하면, DalvikVM이 아닌 Native Code(JNI)에서는 Stack-based Buffer Overflow가 발생할 수 있다.
[2] Java에는 Array Layout Check기능이 기본으로 적용되어 있다.
따라서, Stack에서 Memory Corruption이 발생하면 java.lang.StackOverFlowError로 예외처리 되며,
Heap에서 Memory Corruption이 발생하면 java.lang.OutOfMemoryError로 예외처리 된다.