콘텐츠로 이동

Android DataSealing

  • DoveRunner Mobile App Security 버전 2.23.0.0부터 지원됩니다.
  • DataSealing은 현재 Android Native C/C++ (NDK) 에서만 지원됩니다. 다른 프레임워크(예: Java/Kotlin, Unity, Flutter)에서는 기본적으로 사용할 수 없습니다. 단, 해당 프레임워크에서 Native C/C++와 연동 가능한 플러그인을 사용하는 경우 이 가이드를 따라 DataSealing을 적용할 수 있습니다.
  • 향후 업데이트를 통해 더 많은 프레임워크를 지원할 예정입니다.

DataSealing은 추가 코딩 없이 바이너리 파일 데이터를 안전하게 암호화하고 저장하며, 암호화된 데이터를 직접 읽고 사용할 수 있도록 합니다.

DataSealing은 네이티브 File I/O 함수와 네이티브 AssetManager 관련 함수를 지원합니다. Java File I/O 및 Java AssetManager 지원은 향후 버전에서 추가될 예정입니다.

SDK나 라이브러리를 별도로 다운로드할 필요 없이, 아래 규칙만 따르면 기존 코딩 방식을 그대로 사용할 수 있습니다.

APK에 포함된 asset 파일을 암호화하려면 한 가지 규칙만 기억하면 됩니다. assets 폴더 하위에 ASDP 라는 폴더를 생성하고, 암호화할 asset 파일을 모두 이 폴더에 넣으세요. ASDP 폴더 내 파일은 실링 시 자동으로 암호화되며, 앱에서 AssetManager 관련 네이티브 함수로 접근할 때 자동으로 복호화됩니다.

DataSealing assets 폴더 구조

위 예제에서 ASDP 폴더에 추가된 my_asset1.binmy_asset2.dat는 실링 시 암호화되고, assets 폴더 바로 아래에 있는 my_asset3.binmy_asset4.dat는 암호화되지 않습니다.

암호화된 asset 파일은 JNI 네이티브 코드에서 아래 AssetManager 함수를 사용하면 DoveRunner Mobile App Security가 자동으로 복호화합니다.

AAssetManager_open
AAsset_getBuffer
AAsset_getLength
AAsset_getLength64
AAsset_getRemainingLength
AAsset_getRemainingLength64
AAsset_read
AAsset_seek
AAsset_seek64
AAsset_close

예제 — 암호화된 my_asset1.bin 파일 읽기 (null/에러 체크 생략):

AAssetManager* am = AAssetManager_fromJava( env, AssetManager );
AAsset* asset = AAssetManager_open( am, "ASDP/my_asset1.bin", AASSET_MODE_UNKNOWN );
int fileSize = AAsset_getLength( asset );
unsigned char* buffer = ( unsigned char* )AAsset_getBuffer( asset );
memcpy( data_buffer, ( const void* )buffer, fileSize );
AAsset_close( asset );

기존 asset 읽기 코드와 동일합니다. 복호화는 memcpy 실행 전 AAsset_getBuffer 단계에서 자동으로 처리됩니다.

일반 바이너리 파일 암호화 적용

Section titled “일반 바이너리 파일 암호화 적용”

앱 실행 중 동적으로 생성되는 바이너리 파일에도 암호화를 적용할 수 있습니다. 파일명 앞에 ASDP_ 접두사를 추가하면 파일 쓰기/읽기 시 암호화 및 복호화가 자동으로 적용됩니다.

주의: 바이너리 파일에만 적용되며, fopen 함수의 mode 매개변수에 반드시 "b" 문자가 포함되어야 합니다. "b"가 없는 모드로 열면 자동 암호화/복호화가 작동하지 않습니다.

지원하는 파일 I/O 함수:

fopen
fseek
ftell
fread
fwrite
fclose

예제 — 암호화 파일 쓰기 (null/에러 체크 생략):

FILE* fp = fopen( "/files/ASDP_my_secure_data.bin", "wb" );
int len = fwrite( secure_data, 1, 4096, fp );
fclose( fp );

예제 — 오프셋 1024에서 2K 바이트 읽기:

FILE* fp = fopen( "/files/ASDP_my_secure_data.bin", "rb" );
char buffer[4096] = { 0x00, };
fseek( fp, 1024, SEEK_SET );
int len = fread( buffer, 1, 2048, fp );
fclose( fp );

버퍼에 읽힌 데이터는 자동으로 복호화됩니다.

DataSealing 요약

Developer Console에서 DataSealing 활성화

Section titled “Developer Console에서 DataSealing 활성화”

Native API 활성화 설정으로 DataSealing을 적용하면, 실링 시작 전 확인 창이 표시됩니다. 내용에 동의하면 앱에서 DataSealing 기능이 활성화되고 실링이 자동으로 재시작됩니다.

DataSealing 가격 정책은 DoveRunner 가격 페이지에서 확인하세요.