2012-02-29 10 views
12

Aplikacja, nad którą pracuję, jest automatycznie łamana przez funkcję antiLVL (chociaż nie używam LVL w mojej aplikacji).W jaki sposób powinienem kodować, aby stawić opór "piractwu za pomocą jednego kliknięcia"?

W celu ochrony mojej aplikacji przed "piractwem jednym kliknięciem", implementuję tampering detection techniques explained at Google IO.

Próbowałem sprawdzić podpis zarówno z getPackageInfo() i refleksji (invoke()), ale AntiLVL był w stanie złamać aplikację automatycznie w obu przypadkach.

Jak mogę napisać kod, który nie zostanie automatycznie złamany przez aktualną wersję antLVL (1.4.0)? Mam na myśli, oprócz używania JNI.

PS: Nie mówię tu o zapobieganiu piractwu w ogóle. Chcę tylko, żeby pirat kopał ręcznie kod, zamiast używać automatycznego krakera.

Odpowiedz

1

Problem polega na tym, że każdy interfejs API służący wyłącznie do sprawdzania ważności aplikacji może zostać poddany podwersji i zastąpiony wersją, która zawsze zwraca oczekiwany wynik. Nie przyglądałem się szczegółowo Anti-LVL, ale wyobrażam sobie, że to robi, dlatego twoje próby weryfikacji twojego kodu za pomocą wbudowanych API Dalvik do tego celu zawodzą.

Aby to działało, musisz wykonać to zadanie samodzielnie, używając tylko interfejsów API, które mają wiele celów i nie mogą być tak łatwo podważone.

Jednym ze sposobów na to jest obliczenie sumy kontrolnej pliku .apk lub tylko pliku classes.dex wewnątrz i zweryfikowanie go względem jakiegoś zewnętrznego zasobu (serwer online z listą znanych poprawnych wersji, plik pobrany do Karta SD przy pierwszym uruchomieniu, itp., Zasób w pliku .apk, który nie jest zawarty w classes.dex). Zapobiega to modyfikacji kodu, co uważam za działanie anty-LVL. Nie próbowałem tego sam, ale podejrzewam, że powinien działać.

+0

Dzięki za odpowiedź. AntiLVL to piękne oprogramowanie. Czyste, mocne, przemyślane i konfigurowalne. Łatwo jest go ominąć, ponieważ "wystarczy" napisać kod, który nie zostanie przechwycony przez reguły grep-and-replace (podane w osobnym pliku xml). Jednak po prostu nie mam wystarczająco dużo czasu, aby nauczyć się generować niezwykłe smali. W moim kodzie AntiLVL był w stanie odłączyć i nijakować wszystkie moje próby sum kontrolnych. – tos

+0

Nie znam wystarczająco dużo smali, aby zrozumieć "część" reguł (dobrze byłoby wiedzieć, co dzieje się za kulisami). Zastanowiłem się nad twoim punktem dotyczącym API o wielu celach. Pomyślałem o ułożeniu pola minowego w oprogramowaniu: program łamania usunie ważną część programu, co spowoduje awarię programu lub uczyni go bezużytecznym. Do tej pory nic nie znalazłem. – tos

Powiązane problemy