Xamarin Apps
This is a summary of the blog post https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers
기본 정보
Xamarin은 개발자가 .NET 및 C# 프레임워크를 사용하여 iOS, Android 및 Windows용 앱을 구축할 수 있도록 설계된 오픈 소스 플랫폼입니다. 이 플랫폼은 현대적인 애플리케이션을 효율적으로 만들기 위한 수많은 도구와 확장 기능에 대한 접근을 제공합니다.
Xamarin의 아키텍처
Android의 경우, Xamarin은 .NET 바인딩을 통해 Android 및 Java 네임스페이스와 통합되어 Mono 실행 환경 내에서 Android Runtime (ART)와 함께 작동합니다. Managed Callable Wrappers (MCW)와 Android Callable Wrappers (ACW)는 Mono와 ART 간의 통신을 용이하게 하며, 두 가지 모두 Linux 커널을 기반으로 구축되었습니다.
iOS의 경우, 애플리케이션은 Mono 런타임에서 실행되며, C# .NET 코드를 ARM 어셈블리 언어로 변환하기 위해 전체 Ahead of Time (AOT) 컴파일을 활용합니다. 이 과정은 UNIX와 유사한 커널에서 Objective-C Runtime과 함께 실행됩니다.
.NET 런타임 및 Mono 프레임워크
.NET 프레임워크는 애플리케이션 개발을 위한 어셈블리, 클래스 및 네임스페이스를 포함하며, .NET 런타임은 코드 실행을 관리합니다. 플랫폼 독립성과 이전 버전과의 호환성을 제공합니다. Mono 프레임워크는 2005년에 시작된 .NET 프레임워크의 오픈 소스 버전으로, Linux에 .NET을 확장하기 위해 시작되었으며, 현재 Microsoft의 지원을 받고 Xamarin이 주도하고 있습니다.
Xamarin 앱의 리버스 엔지니어링
Xamarin 어셈블리의 디컴파일
디컴파일은 컴파일된 코드를 다시 소스 코드로 변환합니다. Windows에서는 Visual Studio의 모듈 창에서 디컴파일을 위한 모듈을 식별할 수 있으며, 이를 통해 타사 코드에 직접 접근하고 분석을 위한 소스 코드를 추출할 수 있습니다.
JIT vs AOT 컴파일
Android는 Just-In-Time (JIT) 및 Ahead-Of-Time (AOT) 컴파일을 지원하며, 최적의 실행 속도를 위한 Hybrid AOT 모드가 있습니다. 전체 AOT는 Enterprise 라이센스에만 독점적입니다.
iOS는 Apple의 동적 코드 실행 제한으로 인해 오직 AOT 컴파일만 사용합니다.
APK/IPA에서 dll 파일 추출
APK/IPA의 어셈블리에 접근하려면 파일을 압축 해제하고 어셈블리 디렉토리를 탐색합니다. Android의 경우, XamAsmUnZ 및 xamarin-decompress와 같은 도구를 사용하여 dll 파일을 압축 해제할 수 있습니다.
Android의 assembly blobs에 대해, pyxamstore는 이를 압축 해제할 수 있습니다.
iOS dll 파일은 디컴파일을 위해 쉽게 접근할 수 있으며, 이는 애플리케이션 코드의 상당 부분을 드러내며, 종종 다양한 플랫폼 간에 공통 기반을 공유합니다.
동적 분석
동적 분석은 SSL 핀닝을 확인하고 Fridax와 같은 도구를 사용하여 Xamarin 앱의 .NET 바이너리에 대한 런타임 수정을 수행하는 것을 포함합니다. Frida 스크립트는 루트 탐지 또는 SSL 핀닝을 우회하는 데 사용 가능하여 분석 능력을 향상시킵니다.
기타 흥미로운 Frida 스크립트:
추가 정보
Last updated