2014-09-30 2 views
10

Google은 convenient API을 제공하여 Android 앱에서 '인앱 구매'기능을 구현합니다.코드 해킹에서 Google 인앱 결제 v3를 보호하려면 어떻게해야하나요?

이 문서와 함께이 시스템의 보안 수준과 좋은 방법을 고려하여 dedicated chapter도 있습니다. 웹에는 public key protection에서 remote server validation까지이 단계에 대한 기사가 가득합니다. 그러나 주요 문제가 단순히 코드 해킹 일 때 이러한 모든 기술이 작동해야하는 이유를 이해할 수 없습니다.

아마도 더 나은 용어가 있지만 설명해 보겠습니다. 내 응용 프로그램의 기본 아이디어는 특정 시점에서 사용자가 항목을 구입하지 않으면 진행할 수 없다는 것입니다. 같은

뭔가 :

public void accessTheVeryCoolFeature() { 

    boolean haveIt = checkIfPurchased("verycoolfeature"); 
    if (haveIt) { 
     // YEAH! let's open this very cool feature I paid 200 bucks for 
    } 
    else { 
     // ok... where is my wallet? 
     boolean purchased = startPurchaseFlow("verycoolfeature"); 
     if (purchased) { 
      // my wallet is now empty but happy 
     } 
    } 
} 

이전 지침에 따라, 원격, 신뢰, 영수증을 검증 서버를 조회 할 startPurchaseFlow 방법을시키는, 구매 과정에서 자신의 응용 프로그램을 보호 할 수있는 개발자. "가짜 마켓 플레이스"를 사용하여 수행 한 구매는이 작업을 통해 피해야합니다.

다른 방법은 코드를 난독 화하여 잠금 해제 된 내용을 보호하는 것입니다. ProGuard와 같은 도구를 사용하면 정말 간단하며 "해커"의 삶을 좀 더 어렵게 만들어야합니다.

이제는 코드, 특히 청구 단계를 읽고 싶어하는 해커의 일부분을 행동으로 보려고했습니다. 이전 예제에서 작성한 코드를 찾는데 1 분이 걸렸습니다. 이제 가장 중요한 부분은 : (난독 화 된) 소스 코드를 편집하면 어떻게 될까요?

public void atvf() { 

    boolean hi = cip("verycoolfeature"); 
    hi = true; // <------------------------ AHAH! 
    if (hi) { 
     // YEAH! let's open this very cool feature for free 
    } 
    // ... 
} 

원격 확인 및 코드 난독 화에 대한 모든 좋은 단어는 완전히 사라졌습니다. 그렇다면 첫 번째 문제가 부울 값에있을 때 구현하는 데 왜 시간을 투자해야합니까?

내가 누락 된 항목이 있습니까?

+1

일반적으로 설명하는 문제는 플랫폼과 독립적 인 런타임 라이선스가있는 앱에 대해 발생합니다. Java를 사용하면 기본 Windows 응용 프로그램에 C++을 사용하는 것보다 Android 응용 프로그램을 쉽게 해킹 할 수 있지만 둘 다 해킹 할 수 있습니다. 적어도 미국에서는 이러한 수정이 불법입니다. –

답변

2

앱이 서버에있는 기능에 크게 의존하지 않는 한, 각 기능이 서버에 남아 있고 앱이 해당 서버 API를 호출하는 클라이언트 도구 일 뿐이므로 사용자가 할 수있는 일이 없습니다. 실제로 서버 기반 앱인 경우 유효한 트랜잭션이 존재하고 지불 된 경우 들어오는 각 요청을 확인할 수 있습니다 (예 : 앱에서 세션 해시를 한 번 보낼 수 있음). 그렇지 않은 경우 요청을 거부하십시오.

앱의 코드가 클라이언트의 전화에서 실행 중입니다. 해커가 해당 코드에 대한 액세스 권한을 얻고 무료로 수정하여 모든 결제 유효성 검사를 무시하면 할 수있는 일이 없습니다. 우선 소스 코드에 액세스 할 수 없도록해야합니다.