App Safer Android 적용 방법
    • PDF

    App Safer Android 적용 방법

    • PDF

    Article Summary

    App Safer Android는 네이버 클라우드 플랫폼이 제공하는 모바일 보안 솔루션으로서, 모바일 기기나 서비스에 위협이 되는 행위로부터 모바일 애플리케이션의 안전한 실행 환경을 유지하기 위해, 애플리케이션의 변조 여부와 모바일 보안 침해 시도들을 탐지하고, 그 결과를 분석하여 제공하는 모바일 보안 솔루션입니다.

    App Safer Android 특징

    • Rooting 탐지
    • Emulator 탐지
    • Debugging 탐지
    • Memory Tampered 탐지
    • Speedhack 탐지
    • App Integrity Tampered 탐지
    • Unauthorized Signature 탐지
    • 캡처 방지

    App Safer Android 지원 환경

    파일 이름OS 버전아키텍처
    appsafer-android-sdk-${version}.aarAndroid 4.1(API 16) 이상armeabi-v7a, arm64-v8a, x86, x86_64

    App Safer Android SDK 적용 가이드

    1. 프로젝트 아래에 libs 디렉토리를 생성합니다.

    2. build.gradle 파일에 repositories를 추가합니다.

    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    
    1. build.gradle 파일의 dependencies에 AAR을 추가합니다.
    • 유형 1. 특정 버전을 추가
    dependencies {
        implementation name:'appsafer-android-sdk-${vesion}', ext:'aar'
    }
    
    • 유형 2. 버전에 상관없이 추가
    dependencies {
        implementation fileTree(dir: 'libs', include: 'appsafer-android-sdk-*.aar')
    }
    

    권한 및 App Safer Key 설정

    App Safer Android를 적용하려면 AndroidManifest.xml에 meta-data 태그를 이용하여 App Safer Key를 추가하고, 아래의 권한을 적용해야 합니다.
    meta-data 내 android:name 속성의 값은 반드시 com.ncp.appsafer.key로 작성해야 합니다.

    • 필수 권한
      • android.permission.INTERNET
    <?xml version="1.0" encoding="utf-8"?>
    <manifest>
        <uses-permission android:name="android.permission.INTERNET"/>
    
        <!-- required permission for Antivirus(target API >= 30) -->
        <uses-permission
            android:name="android.permission.QUERY_ALL_PACKAGES"
            tools:ignore="QueryAllPackagesPermission" />
    
        <application>
            <meta-data
                android:name="com.ncp.appsafer.key"
                android:value="APPSAFER_KEY" />
        </application>
    </manifest>
    

    App Safer Android API 목록

    • com.nbp.appsafer.AppSafer
    이름설명
    startApp Safer Android 실행
    setUserId사용자 식별자 설정
    getUserId설정된 사용자 식별자 조회
    getUserDeviceId디바이스 식별자 조회
    preventScreenshot캡처 방지

    App Safer Android API 설명

    start

    App Safer Android를 시작합니다.

    fun start(context: Context): Int
    
    int start(Context context)
    

    매개변수

    매개변수설명
    contextApplicationContext

    반환 값

    반환 값설명
    EXIT_SUCCESS(-1)실행 실패
    EXIT_FAILURE(0)실행 성공

    예제

    SDK

    if (AppSafer.INSTANCE.start(applicationContext) == 0) {
        // success logic
    }
    
    if (AppSafer.INSTANCE.start(getApplicationContext()) == 0) {
        // success logic
    }
    

    setUserId

    초기화 및 탐지 이벤트 발생 시 App Safer 서버에 전송되는 로그에 사용자 ID를 포함하고자 할 때 호출합니다.

    fun setUserId(userId: String)
    
    void setUserId(String userId)
    

    매개변수

    매개변수설명
    userId사용자 식별자

    예제

    SDK

    AppSafer.INSTANCE.userId = "ExampleUserId"
    
    AppSafer.INSTANCE.setUserId("ExampleUserId");
    

    간편적용

    val exampleId = "exampleId"
    val clazz = Class.forName("com.nbp.appsafer.AppSafer")
    val enumConstants = clazz.enumConstants
    if ("INSTANCE" == enumConstants[0].toString()) {
        clazz.getDeclaredMethod("setUserId", String::class.java).invoke(enumConstants[0], userId)
    }
    
    final String userId = "exampleId";
    Class<?> clazz = Class.forName("com.nbp.appsafer.AppSafer");
    Object[] enumConstants = clazz.getEnumConstants();
    if ("INSTANCE".equals(enumConstants[0].toString())) {
        clazz.getDeclaredMethod("setUserId", String.class).invoke(enumConstants[0], userId);
    }
    

    getUserId

    설정한 사용자 식별자를 받아옵니다.

    fun getUserId(): String
    
    String getUserId()
    

    반환 값

    반환 값설명
    String설정한 사용자 식별자

    예제

    SDK

    val userId = AppSafer.INSTANCE.userId
    
    String userId = AppSafer.INSTANCE.getUserId();
    

    간편적용

    var userId: String? = null
    val clazz = Class.forName("com.nbp.appsafer.AppSafer")
    val enumConstants = clazz.enumConstants
    if ("INSTANCE" == enumConstants[0].toString()) {
        userId = clazz.getDeclaredMethod("getUserId").invoke(enumConstants[0]) as String?
    }
    
    String userId = null;
    Class<?> clazz = Class.forName("com.nbp.appsafer.AppSafer");
    Object[] enumConstants = clazz.getEnumConstants();
    if ("INSTANCE".equals(enumConstants[0].toString())) {
        userId = (String) clazz.getDeclaredMethod("getUserId").invoke(enumConstants[0]);
    }
    

    getUserDeviceId

    디바이스 식별자를 받아옵니다.

    fun getUserDeviceId(): String
    
    String getUserDeviceId()
    

    반환 값

    반환 값설명
    String디바이스 식별자

    예제

    SDK

    val userId = AppSafer.INSTANCE.userDeviceId
    
    String userDeviceId = AppSafer.INSTANCE.getUserDeviceId();
    

    간편적용

    var udid: String? = null
    val clazz = Class.forName("com.nbp.appsafer.AppSafer")
    val enumConstants = clazz.enumConstants
    if ("INSTANCE" == enumConstants[0].toString()) {
        udid = clazz.getDeclaredMethod("getUserDeviceId").invoke(enumConstants[0]) as String?
    }
    
    String udid = null;
    Class<?> clazz = Class.forName("com.nbp.appsafer.AppSafer");
    Object[] enumConstants = clazz.getEnumConstants();
    if ("INSTANCE".equals(enumConstants[0].toString())) {
        udid = (String) clazz.getDeclaredMethod("getUserDeviceId").invoke(enumConstants[0]);
    }
    

    preventScreenshot

    App Safer 가 적용된 애플리케이션의 스크린샷, 녹화, 최근 앱의 미리 보기 화면을 보호합니다.
    이 API는 Activity 단위로 호출이 필요합니다.

    fun preventScreenshot(window: Window): Int
    
    int preventScreenshot(Window window)
    

    매개변수

    매개변수설명
    windowActivity의 Window 인스턴스

    예제

    AppSafer.INSTANCE.preventScreenshot(window)
    
    AppSafer.INSTANCE.preventScreenshot(getWindow());
    

    App Safer Android Use Case

    SDK-Kotlin
    import android.os.Bundle
    import android.util.Log
    import androidx.appcompat.app.AppCompatActivity
    import com.nbp.appsafer.AppSafer
    import java.io.File
    import java.util.*
    
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            // Prevent screenshot
            AppSafer.INSTANCE.preventScreenshot(window)
    
            // App Safer start
            if (AppSafer.INSTANCE.start(applicationContext) == 0) {
                // setUserId
                AppSafer.INSTANCE.userId = "ExampleUserId"
    
                // getUserId
                val userId = AppSafer.INSTANCE.userId
                Log.d("AppSafer-UserId", userId)
    
                // getUdid
                val udid = AppSafer.INSTANCE.userDeviceId
                Log.d("AppSafer-UDID", udid)
            }
        }
    }
    
    SDK-Java
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import com.nbp.appsafer.AppSafer;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    
    public class MainActivity extends Activity {
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		// Prevent screenshot
    		AppSafer.INSTANCE.preventScreenshot(getWindow());
    
    		// App Safer start
    		if (AppSafer.INSTANCE.start(getApplicationContext()) == 0) {
    			// setUserId
    			AppSafer.INSTANCE.setUserId("ExampleUserId");
    
    			// getUserId
    			String userId = AppSafer.INSTANCE.getUserId();
    			Log.d("AppSafer-UserId", userId);
    
    			// getUdid
    			String udid = AppSafer.INSTANCE.getUserDeviceId();
    			Log.d("AppSafer-UDID", udid);
    		}
    	}
    }
    
    간편적용-Kotlin
    import android.app.Activity
    import android.os.Bundle
    import com.nbp.appsafer.AppSafer
    
    class MainActivity : Activity() {
        private fun getAppSaferInstance(): Any? {
            var appSaferInstance: Any? = null
            try {
                val clazz = Class.forName("com.nbp.appsafer.AppSafer")
                val enumConstants = clazz.enumConstants
                if ("INSTANCE" == enumConstants[0].toString()) {
                    appSaferInstance = enumConstants[0]
                }
            } catch (ignored: Exception) {
                // ClassNotFoundException
                // IllegalAccessException
            }
            return appSaferInstance
        }
    
        private fun getUserId(): String? {
            var userId: String? = null
            try {
                val appSaferInstance = getAppSaferInstance()
                userId = appSaferInstance?.javaClass?.getDeclaredMethod("getUserId")
                    ?.invoke(appSaferInstance) as String?
            } catch (ignored: Exception) {
                // NoSuchMethodException
                // InvocationTargetException
            }
            return userId
        }
    
        private fun setUserId(userId: String) {
            try {
                val appSaferInstance = getAppSaferInstance()
                appSaferInstance?.javaClass?.getDeclaredMethod("setUserId", String::class.java)
                    ?.invoke(appSaferInstance, userId)
            } catch (ignored: Exception) {
                // NoSuchMethodException
                // InvocationTargetException
            }
        }
    
        private fun getUserDeviceId(): String? {
            var udid: String? = null
            try {
                val appSaferInstance = getAppSaferInstance()
                udid = appSaferInstance?.javaClass?.getDeclaredMethod("getUserDeviceId")
                    ?.invoke(appSaferInstance) as String?
            } catch (ignored: Exception) {
                // NoSuchMethodException
                // InvocationTargetException
            }
            return udid
        }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            // setUserId
            setUserId("ExampleUserId")
    
            // getUserId
            val userId = getUserId()
    
            // getUdid
            val udid = getUserDeviceId()
        }
    }
    
    간편적용-Java
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    
    public class MainActivity extends Activity {
    	private Object getAppSaferInstance() {
    		Object appSaferInstance = null;
    
    		try {
    			Class<?> clazz = Class.forName("com.nbp.appsafer.AppSafer");
    			Object[] enumConstants = clazz.getEnumConstants();
    			if ("INSTANCE".equals(enumConstants[0].toString())) {
    				appSaferInstance = enumConstants[0];
    			}
    		} catch (Exception ignored) {
    			// ClassNotFoundException
    			// IllegalAccessException
    		}
    
    		return appSaferInstance;
    	}
    
    	private String getUserId() {
    		String userId = null;
    
    		try {
    			Object appSaferInstance = getAppSaferInstance();
    			userId = (String)appSaferInstance.getClass().getDeclaredMethod("getUserId").invoke(appSaferInstance);
    		} catch (Exception ignored) {
    			// NoSuchMethodException
    			// InvocationTargetException
    		}
    
    		return userId;
    	}
    
    	private void setUserId(String userId) {
    		try {
    			Object appSaferInstance = getAppSaferInstance();
    			appSaferInstance.getClass().getDeclaredMethod("setUserId", String.class).invoke(appSaferInstance, userId);
    		} catch (Exception ignored) {
    			// NoSuchMethodException
    			// InvocationTargetException
    		}
    	}
    
    	private String getUserDeviceId() {
    		String udid = null;
    
    		try {
    			Object appSaferInstance = getAppSaferInstance();
    			udid = (String)appSaferInstance.getClass().getDeclaredMethod("getUserDeviceId").invoke(appSaferInstance);
    		} catch (Exception ignored) {
    			// NoSuchMethodException
    			// InvocationTargetException
    		}
    
    		return udid;
    	}
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    		// setUserId
    		setUserId("ExampleUserId");
    
    		// getUserId
    		String userId = getUserId();
    
    		// getUdid
    		String udid = getUserDeviceId();
        }
    }
    

    참고

    본 서비스는 글로벌 리전 서비스로도 제공됩니다.


    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.