콘텐츠로 이동

보안 GUI

Xamarin.iOS 프로젝트에서 AppSealing 보안 위협 탐지 시 사용자에게 알림을 표시하는 방법:

using System;
using System.Runtime.InteropServices;
using UIKit;
[DllImport("__Internal")]
static extern int ObjC_IsAbnormalEnvironmentDetected();
public class SecurityChecker
{
public const int DETECTED_JAILBROKEN = 0x01;
public const int DETECTED_DRM_DECRYPTED = 0x02;
public const int DETECTED_DEBUG_ATTACHED = 0x04;
public const int DETECTED_HASH_INFO_CORRUPTED = 0x08;
public const int DETECTED_HASH_MODIFIED = 0x10;
public const int DETECTED_CODESIGN_CORRUPTED = 0x20;
public const int DETECTED_EXECUTABLE_CORRUPTED = 0x40;
public const int DETECTED_CERTIFICATE_CHANGED = 0x80;
public static void CheckSecurity()
{
int tamperFlags = ObjC_IsAbnormalEnvironmentDetected();
if (tamperFlags > 0)
{
string message = "비정상적인 환경이 탐지되었습니다!";
if ((tamperFlags & DETECTED_JAILBROKEN) > 0)
message += "\n - 탈옥된 기기";
if ((tamperFlags & DETECTED_DRM_DECRYPTED) > 0)
message += "\n - 실행 파일이 암호화되지 않음";
if ((tamperFlags & DETECTED_DEBUG_ATTACHED) > 0)
message += "\n - 앱이 디버깅 중";
if ((tamperFlags & (DETECTED_HASH_INFO_CORRUPTED | DETECTED_HASH_MODIFIED)) > 0)
message += "\n - 앱 무결성 손상";
if ((tamperFlags & (DETECTED_CODESIGN_CORRUPTED | DETECTED_EXECUTABLE_CORRUPTED)) > 0)
message += "\n - 앱 실행 파일 손상";
if ((tamperFlags & DETECTED_CERTIFICATE_CHANGED) > 0)
message += "\n - 앱이 재서명됨";
ShowSecurityAlert(message);
}
}
private static void ShowSecurityAlert(string message)
{
var alert = UIAlertController.Create("AppSealing", message, UIAlertControllerStyle.Alert);
alert.AddAction(UIAlertAction.Create("확인", UIAlertActionStyle.Default, (action) =>
{
#if !DEBUG
Environment.Exit(0);
#endif
}));
var window = UIApplication.SharedApplication.KeyWindow;
var rootViewController = window.RootViewController;
rootViewController.PresentViewController(alert, true, null);
}
}
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
SecurityChecker.CheckSecurity();
}

이 구현은 탈옥된 기기나 기타 비정상적인 환경에서 앱 실행 시 사용자에게 적절한 경고를 표시합니다.