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로 예외처리 된다.