Android DataSealing
DataSealing 요구사항
Section titled “DataSealing 요구사항”- DoveRunner Mobile App Security 버전 2.23.0.0부터 지원됩니다.
- DataSealing은 현재 Android Native C/C++ (NDK) 에서만 지원됩니다. 다른 프레임워크(예: Java/Kotlin, Unity, Flutter)에서는 기본적으로 사용할 수 없습니다. 단, 해당 프레임워크에서 Native C/C++와 연동 가능한 플러그인을 사용하는 경우 이 가이드를 따라 DataSealing을 적용할 수 있습니다.
- 향후 업데이트를 통해 더 많은 프레임워크를 지원할 예정입니다.
DataSealing 적용 방법
Section titled “DataSealing 적용 방법”DataSealing은 추가 코딩 없이 바이너리 파일 데이터를 안전하게 암호화하고 저장하며, 암호화된 데이터를 직접 읽고 사용할 수 있도록 합니다.
DataSealing은 네이티브 File I/O 함수와 네이티브 AssetManager 관련 함수를 지원합니다. Java File I/O 및 Java AssetManager 지원은 향후 버전에서 추가될 예정입니다.
SDK나 라이브러리를 별도로 다운로드할 필요 없이, 아래 규칙만 따르면 기존 코딩 방식을 그대로 사용할 수 있습니다.
Asset 파일 암호화 적용
Section titled “Asset 파일 암호화 적용”APK에 포함된 asset 파일을 암호화하려면 한 가지 규칙만 기억하면 됩니다. assets 폴더 하위에 ASDP 라는 폴더를 생성하고, 암호화할 asset 파일을 모두 이 폴더에 넣으세요. ASDP 폴더 내 파일은 실링 시 자동으로 암호화되며, 앱에서 AssetManager 관련 네이티브 함수로 접근할 때 자동으로 복호화됩니다.

위 예제에서 ASDP 폴더에 추가된 my_asset1.bin과 my_asset2.dat는 실링 시 암호화되고, assets 폴더 바로 아래에 있는 my_asset3.bin과 my_asset4.dat는 암호화되지 않습니다.
암호화된 asset 파일은 JNI 네이티브 코드에서 아래 AssetManager 함수를 사용하면 DoveRunner Mobile App Security가 자동으로 복호화합니다.
AAssetManager_openAAsset_getBufferAAsset_getLengthAAsset_getLength64AAsset_getRemainingLengthAAsset_getRemainingLength64AAsset_readAAsset_seekAAsset_seek64AAsset_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 함수:
fopenfseekftellfreadfwritefclose예제 — 암호화 파일 쓰기 (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 );버퍼에 읽힌 데이터는 자동으로 복호화됩니다.

Developer Console에서 DataSealing 활성화
Section titled “Developer Console에서 DataSealing 활성화”Native API 활성화 설정으로 DataSealing을 적용하면, 실링 시작 전 확인 창이 표시됩니다. 내용에 동의하면 앱에서 DataSealing 기능이 활성화되고 실링이 자동으로 재시작됩니다.
DataSealing 가격 정책은 DoveRunner 가격 페이지에서 확인하세요.