2012-03-05 3 views
2

리버스 엔지니어링 경험이 있고 안드로이드에서 유창하게 데이터베이스에 액세스하는 사람들이 있습니다. 알고 싶습니다. 내 데이터베이스를 암호화 할 수있는 방법이 있습니까 (전체 apk를 모호하게 만들지는 않음). 그리고 생성시에 RunTime 중에 My Data Base를 사용합니다.자산 폴더에 데이터베이스 sqlite 보안을 설정하려면 어떻게해야합니까?

나는 데이터베이스에 대한 지식이 없으므로 어떤 제안이라도 자산 폴더에서 내 DB를 보호 할 수있는 보탬이 될 것입니다.

답변

5

확실히 할 수 있습니다. SQL Cipher을 사용하십시오.

전통적인 android.database.sqlite.SQLiteDatabase을 사용하는 대신 info.guardianproject.database.sqlcipher.SQLiteDatabase을 사용하십시오. 자세한 내용은 this question을 참조하십시오.

+0

그래, 나는 그것을 줄 것이다. –

+0

APK에 암호 해독 키를 저장해야 할 가능성이 높으므로 다른 사람이 쉽게 찾을 수 있습니다. – georgiecasey

0

전체 테이블 대신 테이블에 저장하는 문자열을 암호화하는 것이 더 쉬울 수도 있습니다. 예 : 직접 암호를 저장하는 대신 hash의 암호를 저장하십시오.

0

Proguard을 보셨습니까?

은 ProGuard에서 도구, 축소 최적화 및 의미 상 모호한 이름으로 사용되지 않는 코드와 이름 변경 클래스, 필드, 메소드를 제거 하여 코드를 난독 화. 그 결과 작은 크기의 .apk 파일 이 리버스 엔지니어링하기가 더 어렵습니다. ProGuard에서는 엔지니어에게 proguard

더 많은 정보를 반대로 응용 프로그램 어렵게 때문입니다.

+1

당신은 내 그림 파일도 암호화된다는 것을 의미합니까? Raw 파일과 Drawable 파일의 크기 축소도 마찬가지입니까? –

0

앱에 포함 된 정보를 보호 할 수 없습니다. 그것은 불가능.

  1. 공격자가 사용자의 모든 코드를 되돌릴 수 있습니다.

  2. 공격자가 모든 코드를 deobfuscate 할 수 있습니다.

  3. 미리로드 된 암호화 된 DB 파일은 앱에 저장된 키를 사용하여 해독 할 수 있습니다. 이 같은 특히 코드

은 :

String dbPath = this.getDatabasePath("Encrypted.db").getPath(); 

     SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath, 
       **DATABASEKEY**, null); 

SQLCipher는 공격자에 대한 사용자 데이터를 보호하는 것이 아니라 다른 앱에 대한 사용자 데이터를 보호하기 위해 존재하지 않습니다.

귀하의 노력으로 공격자가 약간 느려집니다.

민감한 데이터를 앱에 저장하려면 앱 또는 데이터 디렉토리에 저장하지 마십시오. 고려해야 할 사안이 완전히 혼란 스럽긴하지만 (Web App Security) 서버와 통신하도록 앱을 디자인하십시오.

관련 문제