2014-09-16 3 views
3

나는 인앱 구매로 Android 앱을 가지고 있습니다. 온라인 서비스에서 데이터를 전송하기 위해 구독을 사용하고 있기 때문에 서버 측에서 Google Play API를 통해 구매 확인을 사용하고 있습니다 (구매 후 앱이 구매 토큰과 함께). 내 데이터베이스의 구매 토큰 중 대부분은 다음과 같은 긴 영숫자 문자열입니다.유효하지 않은 짧은 구매 토큰

djcbhbiertdkkotyuupnlmioppb.AO-J1Ozg0oasdfB3MAlWy-PihFE_nPVRMMfTW2_VPJt5KTKQA3CXNwyqweJAtUdIGTuOW9zEIIy-XS_4Un-a-Co6aEs__Adj1rZ4GtRxPKr04ph-l6nP2sU-w6e500YfTj5l0O8WEXF37yt 

이러한 항목은 정상입니다. 그러나 때때로 나는 다음과 같이 15 자리 숫자를 포함하는 구매 토큰을받을 :

Google.GoogleApiException Google.Apis.Requests.RequestError 
The purchase token was not found. [404] 
Errors [ 
    Message[The purchase token was not found.] Location[token - parameter] Reason[purchaseTokenNotFound] Domain[global] 
] 

나는이 문서에서 이것에 대해 아무것도 찾을 수 없습니다 :

781871156762279 

그리고 그 결과 항상 이들에 대한

. 내가 놓친 게 있니? 아니면 내 앱의 금이 간 버전에서 "위조 된"구매 일 수 있습니까? 감사.

+0

앱에 내장 된 SHA1 또는 MD5 해시를 통해'classes.dex' 파일을 확인하는 메커니즘이 없다면 앱에 금이 갔는지, 또는 인앱 토큰이 위조인지 여부를 알기가 어렵습니다 금이 간 버전의 앱에서 전송되었습니다. – ChuongPham

답변

1

동일한 15 자리 형식의 짧은 구매 토큰을 받았으며, 사실 이들은 사기 구매 시도라고 생각합니다.

귀하의 앱에 금이갔습니다. 사용자는 합법적 인 인앱 결제 서비스를 에뮬레이트하여 앱에 대한 중간자 공격을 수행하는 루팅 된 기기에 특수 앱을 설치합니다. 앱이 구매 흐름을 시작하면이 사기성 앱이 구매 요청을 가로 채고 가짜 구매 토큰을 반환합니다.

토큰을 확인하는 데 동일한 사기성 앱이 사용되므로 토큰을 로컬로 확인하는 앱은 취약합니다.

백엔드가 토큰을 독립적으로 확인하도록 in-app billing API에 요청할 수 있기 때문에 토큰을 백엔드로 보내는 앱은 아마도 더 안전합니다. 그러나 응용 프로그램은 사용자가 구입 한 권한을 부여하기 전에 백엔드 검증이 성공할 때까지 기다려야합니다.

이 공격에 대한 자세한 내용은 my other answer을 참조하십시오.

관련 문제