hacktricks/mobile-pentesting/xamarin-apps.md

7.7 KiB

Xamarin Apps

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

기본 정보

Xamarin은 개발자가 .NET 및 C# 프레임워크를 사용하여 iOS, Android 및 Windows용 앱을 구축할 수 있도록 설계된 오픈 소스 플랫폼입니다. 이 플랫폼은 현대적인 애플리케이션을 효율적으로 생성하기 위한 수많은 도구와 확장 기능에 대한 액세스를 제공합니다.

Xamarin의 아키텍처

  • Android의 경우, Xamarin은 .NET 바인딩을 통해 Android 및 Java 네임스페이스와 통합되어 Mono 실행 환경 내에서 Android Runtime (ART)와 함께 작동합니다. 관리 가능한 호출 래퍼(MCW)와 Android 호출 래퍼(ACW)는 Mono와 ART 간의 통신을 용이하게 하며, 두 가지 모두 Linux 커널을 기반으로 구축되었습니다.
  • iOS의 경우, 애플리케이션은 Mono 런타임에서 실행되며, C# .NET 코드를 ARM 어셈블리 언어로 변환하기 위해 전체 사전 컴파일(AOT) 컴파일을 활용합니다. 이 과정은 UNIX와 유사한 커널에서 Objective-C 런타임과 함께 실행됩니다.

.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) 컴파일을 지원하며, 최적의 실행 속도를 위한 하이브리드 AOT 모드가 있습니다. 전체 AOT는 기업 라이센스에만 독점적입니다.
  • iOS는 Apple의 동적 코드 실행 제한으로 인해 오직 AOT 컴파일만 사용합니다.

APK/IPA에서 dll 파일 추출하기

APK/IPA의 어셈블리에 접근하려면 파일을 압축 해제하고 어셈블리 디렉토리를 탐색합니다. Android의 경우, XamAsmUnZxamarin-decompress와 같은 도구를 사용하여 dll 파일을 압축 해제할 수 있습니다.

python3 xamarin-decompress.py -o /path/to/decompressed/apk

APK를 디컴파일한 후에 unknown/assemblies/ 폴더와 그 안에 있는 .dll 파일을 볼 수 있는 경우, dnSpy를 사용하여 .dll 파일을 직접 분석할 수 있습니다.
그러나 때때로 unknown/assemblies/ 폴더 안에 assemblies.blobassemblies.manifest 파일이 발견됩니다. 도구 pyxamstore는 Xamarin 앱에서 assemblies.blob 파일을 언팩하는 데 사용될 수 있으며, 이를 통해 추가 분석을 위한 .NET 어셈블리에 접근할 수 있습니다:

pyxamstore unpack -d /path/to/decompressed/apk/assemblies/

iOS dll 파일은 디컴파일을 위해 쉽게 접근할 수 있으며, 이는 애플리케이션 코드의 상당 부분을 드러내며, 종종 다양한 플랫폼 간에 공통 기반을 공유합니다.

정적 분석

.dll 파일을 얻은 후에는 dnSpy 또는 ILSpy와 같은 도구를 사용하여 .Net 코드를 정적으로 분석할 수 있습니다. 이는 애플리케이션의 코드를 수정할 수 있게 해줍니다. 예를 들어, 보호를 우회하기 위해 애플리케이션을 변조하는 데 매우 유용할 수 있습니다.
앱을 수정한 후에는 다시 패킹하고 다시 서명해야 한다는 점에 유의하세요.

동적 분석

동적 분석은 SSL 핀닝을 확인하고 Fridax와 같은 도구를 사용하여 Xamarin 앱의 .NET 바이너리를 런타임에서 수정하는 것을 포함합니다. Frida 스크립트는 루트 탐지 또는 SSL 핀닝을 우회하여 분석 능력을 향상시킬 수 있습니다.

기타 흥미로운 Frida 스크립트:

재서명

Uber APK Signer 도구는 동일한 키로 여러 APK에 서명하는 과정을 간소화하며, 변경이 수행된 후 앱을 재서명하는 데 사용할 수 있습니다.

추가 정보

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}