---
title: "Android DataSealing"
description: "DoveRunner Mobile App Security를 사용하여 Android Native C/C++ 애플리케이션의 바이너리 파일 데이터를 안전하게 암호화하고 저장하는 DataSealing 적용 방법을 알아보세요."
---
> For the complete documentation index, see [llms.txt](/llms.txt).

import { Aside } from '@astrojs/starlight/components';

<Aside type="caution" title="v3.x에서 지원 중단">
DataSealing은 DoveRunner Mobile App Security **버전 2.x까지만** 지원됩니다. 버전 3.x에서는 해당 기능이 제거되었으며, 향후 업데이트를 통해 개선된 형태로 재도입될 예정입니다.
</Aside>

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

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

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

### Asset 파일 암호화 적용

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

![DataSealing assets 폴더 구조](https://appsealing-docs.s3.ap-northeast-1.amazonaws.com/common/guide/adc_console/android_data_sealimg_1.png)

위 예제에서 `ASDP` 폴더에 추가된 `my_asset1.bin`과 `my_asset2.dat`는 실링 시 암호화되고, `assets` 폴더 바로 아래에 있는 `my_asset3.bin`과 `my_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/에러 체크 생략):

```cpp
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` 단계에서 자동으로 처리됩니다.

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

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

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

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

```
fopen
fseek
ftell
fread
fwrite
fclose
```

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

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

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

```cpp
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 요약](https://appsealing-docs.s3.ap-northeast-1.amazonaws.com/common/guide/adc_console/android_data_sealing_2.png)

## Developer Console에서 DataSealing 활성화

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

## 가격 정책

DataSealing 가격 정책은 [DoveRunner 가격 페이지](https://doverunner.com/pricing-simulator/)에서 확인하세요.