Przeczytałem wiele dokumentów i kodu, które teoretycznie będą weryfikować potwierdzenie w aplikacji i / lub pakiet.
Biorąc pod uwagę, że moja wiedza na temat SSL, certyfikatów, szyfrowania itp. Jest prawie zerowa, wszystkie wyjaśnienia, które przeczytałem, takie jak to obiecujące , były trudne do zrozumienia.
Mówią, że wyjaśnienia są niekompletne, ponieważ każda osoba musi wymyślić, jak to zrobić, w przeciwnym razie hakerzy będą mieli łatwe zadanie stworzenia aplikacji do krakowania, która może rozpoznawać i identyfikować wzorce oraz łatać aplikację. OK, zgadzam się z tym do pewnego momentu. Myślę, że mogliby całkowicie wyjaśnić, jak to zrobić i umieścić ostrzeżenie o treściach „zmodyfikuj tę metodę”, „zmodyfikuj tę inną metodę”, „zaciemnij tę zmienną”, „zmień nazwę tego i tamtego” itp.
Czy jakaś dobra dusza może być na tyle miła, by wyjaśnić, jak LOKALNIE sprawdzać, pakować paragony i pokwitowania zakupów w aplikacji na iOS 7, ponieważ mam pięć lat (ok, zrób to 3), wyraźnie od góry do dołu?
Dzięki!!!
Jeśli masz wersję działającą w swoich aplikacjach i obawiasz się, że hakerzy zobaczą, jak to zrobiłeś, po prostu zmień wrażliwe metody przed opublikowaniem tutaj. Ukryj ciągi znaków, zmień kolejność linii, zmień sposób wykonywania pętli (od używania for do blokowania wyliczania i odwrotnie) i tym podobne. Oczywiście każda osoba korzystająca z zamieszczonego tutaj kodu musi zrobić to samo, aby nie ryzykować łatwego zhakowania.
źródło
Odpowiedzi:
Oto przewodnik, w jaki sposób rozwiązałem ten problem w mojej bibliotece zakupów w aplikacji RMStore . Wyjaśnię, jak zweryfikować transakcję, która obejmuje weryfikację całego paragonu.
W skrócie
Odbierz paragon i zweryfikuj transakcję. Jeśli to się nie powiedzie, odśwież potwierdzenie i spróbuj ponownie. Dzięki temu proces weryfikacji jest asynchroniczny, ponieważ odświeżanie potwierdzenia jest asynchroniczne.
Z RMStoreAppReceiptVerifier :
Uzyskanie danych do odbioru
Pokwitowanie znajduje się
[[NSBundle mainBundle] appStoreReceiptURL]
i jest w rzeczywistości kontenerem PCKS7. Ssam w kryptografii, więc użyłem OpenSSL do otwarcia tego kontenera. Inni najwyraźniej zrobili to wyłącznie za pomocą ram systemowych .Dodanie OpenSSL do twojego projektu nie jest trywialne. RMStore wiki powinno pomóc.
Jeśli zdecydujesz się użyć OpenSSL do otwarcia kontenera PKCS7, Twój kod może wyglądać następująco. Od RMAppReceipt :
Szczegóły weryfikacji omówimy później.
Pobieranie pól paragonu
Pokwitowanie jest wyrażone w formacie ASN1. Zawiera ogólne informacje, niektóre pola do celów weryfikacji (do tego dojdziemy później) oraz szczegółowe informacje o każdym odpowiednim zakupie w aplikacji.
Ponownie, OpenSSL przychodzi z pomocą, jeśli chodzi o czytanie ASN1. Z RMAppReceipt , używając kilku metod pomocniczych:
Pobieranie zakupów w aplikacji
Każdy zakup w aplikacji jest również w ASN1. Analizowanie go jest bardzo podobne do analizowania ogólnych informacji o potwierdzeniu.
Z RMAppReceipt , używając tych samych metod pomocniczych:
Należy zauważyć, że niektóre zakupy w aplikacji, takie jak materiały eksploatacyjne i nieodnawialne subskrypcje, pojawią się na paragonie tylko raz. Powinieneś je zweryfikować zaraz po zakupie (ponownie RMStore pomaga w tym).
Weryfikacja w skrócie
Teraz mamy wszystkie pola z paragonu i wszystkie zakupy w aplikacji. Najpierw weryfikujemy sam paragon, a potem po prostu sprawdzamy, czy na paragonie znajduje się produkt transakcji.
Poniżej znajduje się metoda, którą wywołaliśmy na początku. Z RMStoreAppReceiptVerificator :
Weryfikacja odbioru
Sama weryfikacja paragonu sprowadza się do:
5 kroków w kodzie na wysokim poziomie z RMStoreAppReceiptVerificator :
Przejdźmy do szczegółów w krokach 2 i 5.
Weryfikacja podpisu odbioru
Kiedy już wyodrębniliśmy dane, przejrzeliśmy weryfikację podpisu paragonu. Potwierdzenie jest podpisane głównym certyfikatem Apple Inc., który można pobrać z głównego urzędu certyfikacji Apple . Poniższy kod pobiera kontener PKCS7 i certyfikat główny jako dane i sprawdza, czy są zgodne:
Zrobiono to na początku, zanim parsowano paragon.
Weryfikacja skrótu potwierdzenia
Skrót zawarty w paragonie to SHA1 identyfikatora urządzenia, pewna nieprzezroczysta wartość zawarta w paragonie i identyfikator pakietu.
W ten sposób zweryfikujesz skrót potwierdzenia na iOS. Od RMAppReceipt :
I to jest sedno tego. Być może brakuje mi czegoś tu lub tam, więc mogę wrócić do tego postu później. W każdym razie zalecamy przejrzenie całego kodu, aby uzyskać więcej informacji.
źródło
Dziwię się, że nikt nie wspomniał tutaj o Receigenie . Jest to narzędzie, które automatycznie generuje zaciemniony kod weryfikacji paragonu, za każdym razem inny; obsługuje zarówno GUI, jak i działanie z linii poleceń. Wysoce rekomendowane.
(Nie jest powiązany z Receigen, tylko zadowolony użytkownik.)
Używam Rakefile takiego jak ten, aby automatycznie ponownie uruchomić Receigen (ponieważ trzeba to zrobić przy każdej zmianie wersji), kiedy piszę
rake receigen
:źródło
To jest wersja Swift 4 do sprawdzania potwierdzenia zakupu w aplikacji ...
Pozwala utworzyć wyliczenie reprezentujące możliwe błędy weryfikacji potwierdzenia
Następnie stwórzmy funkcję, która waliduje paragon, zgłosi błąd, jeśli nie będzie w stanie go zweryfikować.
Użyjmy tej funkcji pomocniczej, aby uzyskać datę ważności konkretnego produktu. Funkcja otrzymuje odpowiedź JSON i identyfikator produktu. Odpowiedź JSON może zawierać wiele informacji o potwierdzeniach dla różnych produktów, więc pobiera ostatnie informacje dla określonego parametru.
Teraz możesz wywołać tę funkcję i obsłużyć możliwe przypadki błędów
Account tab
Do Sign in
Open iTune Connect
Open My App
Open Feature Tab
Open In App Purchase
Click at the right side on 'View Shared Secret'
At the bottom you will get a secrete key
Mam nadzieję, że pomoże to każdemu, kto tego chce w szybkiej wersji.
źródło