2013-06-20 4 views
8

안드로이드 개발자는 프로젝트의 앱이 공개 키를 저장에 대해 다음 말한다 :Android 인앱 보안 권장 사항 - 이것이 의미하는 바는 무엇입니까?

보안 권장 사항 : 매우 에서 제공하는대로하지 하드 코딩 정확한 공개 라이센스 키 문자열 값을하는 것이 좋습니다 구글 플레이. 대신 런타임시 전체 공용 라이센스 키 문자열을 하위 문자열에서 구성하거나 암호화 된 스토어에서 검색하여 생성자에 전달할 수 있습니다. 이 방법을 사용하면 악의적 인 제 3자가 APK 파일의 라이선스 키 문자열을 수정하기가 더 어려워집니다 ( ).

이 내용 자체적으로 설명해야합니까? 나는 그들이 내가 원하는 것을 이해하지 못한다.

그들은 예제의 주석에서 똑같은 말을하고 있지만 실제로 지침에 따라 의미가 무엇인지를 보여주지는 못합니다. 여기의 말씀입니다 :

을 대신 바로 여기에 * 프로그램 에 포함 된 전체 리터럴 문자열을 저장하는, 다른 문자열 예를 들어, 조각 또는 * 사용 비트 조작 (에서 런타임에 키를 XOR을 구성) * 실제 키를 숨 깁니다. 키 자체는 비밀 정보가 아니지만 *은 공격자가 공개 키를 자신의 *으로 바꾼 다음 서버에서 가짜 메시지를 쉽게 만들 수 있도록하려고합니다.

정확히 어떻게 사람이이 작업을 수행 할 수 있습니까?

답변

2

Android 개발자는 애플리케이션을 사용하여 지불하려는 결제 수단에 대해 Google Play와 동기화해야하는 "공개 키"를 말하고 싶어합니다. 쉽게 해킹 될 수 있으므로 앱 소스 코드에서 직접 사용해서는 안됩니다 어느 누구라도. 한 가지 방법은 공개 키를 서버 측에 저장하고 google play에서 응답을 받으면 키를 확인하여 서버에 응답을 보내고 서버에서 작업을 수행하는 것입니다.

 /** 
     * String transformation by XOR-ing all characters by value. 
     */ 
     static String stringTransform(String s, int i) { 
     char[] chars = s.toCharArray(); 
     for(int j = 0; j<chars.length; j++) 
     chars[j] = (char)(chars[j]^i); 
     return String.valueOf(chars); 
     } 
+0

Google은 "대신 부분 문자열에서 런타임에 전체 공용 라이센스 키 문자열을 구성하거나 암호화 된 저장소에서 검색 할 수 있습니다" "암호화 된 저장소에서 검색"서버에서 가져 오는 중입니까? 설명 된대로 문자열에서 런타임시이를 구성하는 안전한 방법은 무엇입니까? –

+1

모든 트랜잭션 유효성 검사 논리를 서버로 이동하고 HTTPS를 사용하여 연결합니다. – skygeek

+0

그리고 문자열 변환을 위해 자신의 논리를 구현하거나 예를 들어 업데이트 된 답변을 참조하십시오. – skygeek

1

매우 기본적인 정보입니다.

일부 개발자가 저장 문자열 자체로 라이센스 수 있습니다 :이 예를 보자

private static final String LICENSE_1="xxx-yyy-zzz" 
private static final String LICENSE_2="xxz-yyz-zzz" 
private static final String LICENSE_N="xxz-yyz-zzz" 

private ArrayList<String> licenseList=new ArrayList<String>(); 

licenseList.add(LICENSE_N); 

그리고 그들은 그들의 라이센스 번호를 입력하는 사용자를 할 수 있습니다를, 그래서 그들은 같은 것을 할 것입니다 :

을 , 당신의 licens를 우회 할 수있는 유일한 방법은 당신이 당신의 코드에서 위처럼 아무것도 없었 더라면 D

:

if(licenseList.contains(ExitText.getText().toString()) 
    //allow 
else 
    //disallow 

지금은이 응용 프로그램을 컴파일하고 모든 라이센스를 얻을 수 있습니다 로컬에서 수행되는 경우 GameClH처럼 메모리를 해킹 할 수 있습니다. 메모리 해킹은 한 가지 예일 뿐이고 공격자가 할 수있는 다양한 일이 있습니다. 너는 그들을 막을 수는 없지만 너는 그들의 인생을 더 힘들게 할 수있다.

+0

그 것이 취약점을 입증했습니다. 알 겠어. 문자열을 문자열로 해독합니다. 하지만 앱을 보호하기 위해 무엇을 할 것을 요구하고 있습니까? 그들은 특정한 제안을 가지고 있으며, 나는 그것을 이해하지 못합니다. –

+0

죄송합니다. 비트 연산이 코드에서 어떻게 수행되는지에 대해서는 잘 모릅니다. 그러나 앱에 금이 갈 수있는 방법을 알려 드릴 수 있습니다. 말하듯이이 접근법은 더 어렵게 만듭니다. 클라이언트 측 로직에서 비트 연산을 구현했다하더라도 앱을 해독하면 로직을 볼 수 있기 때문에 원하는 작업을 수행 할 수 있습니다. 그런 다음 앱을 다시 컴파일하여 비공개 앱 스토어 또는 파일 저장소에 게시 할 수 있습니다. – Milan

관련 문제