android

Android 아키텍쳐

2024년 3월 26일
android, os

아키텍쳐 프리뷰 # Linux Kernel : 하드웨어의 추상화, 네트워크 스택, 메모리관리, 프로세스관리 등 하드웨어와 직접적인 핵심 시스템 서비스를 담당한다. 리눅스 커널을 그대로 사용하진 않고, 모바일 기기에 최적화되도록 수정해서 사용한다. 기존 리눅스 기능 : VFS, SELinux, IPC 등 리눅스 커널 함수 : read, write, open, close, ioctl, syscall 추가된 기능들 : LowMemoryKiller, Binder IPC, wakelock(절전중 깨움 제어), AVB(안드로이드 검증 부팅) 등 HAL : 벤더사의 하드웨어와 안드로이드 사이의 추상화를 담당한다. 프레임워크에서 사용하는 드라이버 코드를 구글에서 표준화된 인터페이스를 사용하도록 강제하고, C/C++ 함수로 API를 사용할 수 있게 제공한것이다. ...

Android Dynamic Debugging

2024년 3월 26일
android, debug

테스트 환경 # IDA 8.3 Pro Pixel 6a AOS 13 IDA # DEX # 앱이나 기기를 디버그 모드로 변경한다 앱 리패키징 AndroidManifest.xml 의 application 태그에 android:debuggable=true 를 세팅하고 리패키징 한다. 또는 MagiskHidePropsConfig 모듈을 사용한다. adb shell에서 su 권한 획득 후 props 명령 실행 Add custom props 옵션을 선택해서 ro.debuggable 값을 1로 설정한다. 재부팅 후 getprop ro.debuggable 로 값을 확인한다. 개발자 모드나 am set-debug-app -w <package> 명령으로 디버그앱으로 설정한다. (혹은 am start -D -n <package>/<activity> 로 디버그로 실행해도 된다. ...

DEX Loading

2024년 3월 24일
android, dex

참조 # 악성 APK을 이용한 Dynamic Dex Loading 분석 3가지 DexLoading 분석 BaseDexClassLoader # DexClassLoader # PathClassLoader # InMemoryDexClassLoader # android.support.multidex.MultiDex # dalvik.system.DexFile # DelegateLastClassLoader # 서드파티 라이브러리 # 메모리에 로드할 때 사용되는 Android 코드 정리 메모리에서 사용하는 방식? apk 파일일때 메모리에 로드되는 구조 (특정 타겟 버전만) 지금 테스트할때 보이는 방향으로는 메모리에 로드될때 r–p 에서만 덱스가 보이는데, 왜 그러는지? aab 파일일 때 메모리에 로드되는 구조 이녀석은 메모리에 dex 이름으로 로드되지 않음 만약 로드하는 방식에 따라 달라지면 로드하는 방식별로 정리 AOS 버전에 따라 달라질 가능성도 있음 (깊게는 ㄴㄴ ) ...

DEX File format

2024년 3월 21일
android, dex

참조 # https://www.bugsnag.com/blog/dex-and-d8/ classes.dex 파일 포맷 (Header, String IDs) official dex format DEX (Dalvik EXecutable) Format # Android 런타임에 최종적으로 실행되는 코드가 포함된 파일이며, 덱스파일 헤더와 실제 데이터를 담는 본문으로 구분된다. Dex 헤더 (dex\n035\0) # Magic [0x00-0x07] # dex\n035\0 형식으로 되어있는데, 각 버전마다 특징이 조금씩 다르고, 손상된 경우 설치가 거절된다. Checksum [0x08-0x0b] (adler-32) # 0x0c(시그니쳐) 부터 EOF 까지 바이트에 대한 체크섬이며, 설치할때 체크섬 검사를 해서 손상된 경우 설치가 거절된다. 파일 손상을 검증하는데 사용하는 값 ...