zaciemnianie kodu aplikacji iPhone/iPad - czy to możliwe? Warto?

Zbadałem sporo, zarówno na SO, jak i google-ing wszędzie, ale nie mogę znaleźć prostej odpowiedzi na temat zaciemniania kodu dla aplikacji iPhone/iPad napisanych w Objective-C.

Moje pytania są następujące:

    Jest na to jakiś sposób? Jeśli tak, to w jaki sposób? Czy warto? [5]}czy Apple zezwala na to lub ma z tym problem, gdy aplikacja jest do nich przesyłana?
Author: Mick MacCallum, 2011-04-05

5 answers

Nie wydaje się, aby obfuscator kodu dla Objective-C. ale załóżmy przez chwilę, że istnieje.

Apple prawdopodobnie nie odrzuci zaciemnionej aplikacji, dopóki nie ulegnie awarii. Główne pytanie brzmi: jaki jest sens zaciemniania ? Zwykle chcesz zaciemnić kod, aby chronić swoją wiedzę, na przykład jeśli twój program używa ochrony przed kopiowaniem, chcesz utrudnić to potencjalnemu krakerowi lub jeśli używasz jakiegoś zaawansowanego algorytmu, którego nie chcesz konkurentów, aby móc go dekompilować.

Ochrona przed kopiowaniem została już zabezpieczona na iOS. Chociaż poprzez jailbreaking normalna aplikacja może być kopiowana i uruchamiana, powiedziałbym, że rzeczywista liczba użytkowników, którzy to robią, jest dość niska (co najmniej o wiele niższa niż na "zwykłych" komputerach, takich jak PC i Mac). Czy spodziewasz się, że piractwo będzie tak wielkim problemem, że musisz go zaciemnić ?

Jeśli masz ważną wiedzę do ochrony, to zaciemnianie może być warte zachodu. Zaciemnienie ma swoje wady: nie możesz już debugować swojej zaciemnionej aplikacji. Raporty o awariach będą bezużyteczne.

Możesz również przeczytać artykuł zaciemnianie kakao.

Wracając do faktu, że nie wydaje się być obfuscator: to, co możesz zrobić, to taka sztuczka: powiedzmy, że masz nagłówek taki:

@interface MyClass : NSObject {
}

- (void)myMethod;
Można zrobić tanie zaciemnienie jak to:
#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif

@interface MyClass : NSObject {
}

- (void)myMethod;

W ten sposób możesz nadal używać znaczących symboli w swoim źródle, ale kompilator zmieni go w" śmieci", gdy nie kompiluje do debugowania.

 53
Author: DarkDust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-05 19:17:11
  1. tak, możesz spojrzeć na EnsureIT Dla Apple IOS lub Contaxiom Code Protection
  2. To zależy. Bezpieczeństwo zwykle wprowadza złożoność, trzeba zrównoważyć ją między użytecznością.
  3. Apple nie powinno mieć z tym żadnego problemu (popraw mnie, jeśli się mylę), a ja osobiście mam kilka aplikacji, które używają code obfuscator.
 31
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-10 01:02:15

Oprócz wcześniejszych odpowiedzi istnieje obecnie kilka narzędzi innych firm, które oferują pewien stopień zaciemnienia i ochrony integralności, w tym: -

  1. Arxan,
  2. metafory,
  3. Cryptanium

Różnią się możliwościami i obejmują:-

  1. zaciemnianie przepływu sterowania, np. przepływy instrukcji ARM są zniekształcone redundantnymi instrukcjami, aby ukryć pierwotny cel kodu,
  2. Class and Method renaming-zmienia nazwy metod i klasy do bezsensownych nazw, chociaż musisz być ostrożny, gdzie to jest używane, ponieważ możesz łatwo złamać aplikację, ponieważ Runtime Objective-C oczekuje, że znajdzie pewne nazwy,
  3. String encryption - wszystkie statyczne ciągi w aplikacji są szyfrowane i Kod jest wstawiany w celu odszyfrowywania ciągów tuż przed użyciem w celu utrudnienia analizy statycznej
  4. Anti-debug - kod jest wstawiany w celu złamania zwykłych debugerów (nie zawsze pomyślnie),
  5. Anti-tamper - zazwyczaj buduje sieć sum kontrolnych chroniących kod binarny przed modyfikacją,
  6. Objective - C runtime protection-zwykle sprawdza implementacje zarejestrowanych metod obj - c, aby upewnić się, że są one w aplikacji i nie zostały "spuszczone".

Wszystkie te narzędzia są bardzo drogie i nie bez ich problemów, więc naprawdę potrzebujesz aplikacji, która wymaga wysokiego stopnia integralności, aby je rozważyć np. Bankowość lub gdzie DRM jest bardzo ważne.

Dla tego typu aplikacja będziesz również potrzebować wykwalifikowanych testerów penetracyjnych, aby upewnić się, że Twoja aplikacja nie jest narażona na inne sposoby, ponieważ narzędzia te są często tak dobre, jak osoby z nich korzystające, a nadal istnieją inne luki w systemie operacyjnym, które wymagają złagodzenia, że narzędzia nie usuwają.

 10
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-09 08:44:29

Plik wykonywalny aplikacji jest już zaszyfrowany przez Apple, a segment kodu wykonywalnego w piaskownicy aplikacji nie można zapisać, więc nie można wykonać dodatkowego szyfrowania, które wymaga modyfikacji kodu środowiska wykonawczego arm. A Optimizer pass obiektywnego kompilatora C / C już tworzy coś zupełnie innego niż oryginalny kod źródłowy. Użycie większej liczby C i mniejszej liczby Objective C ujawni mniej nazw funkcji, ponieważ nazwy metod są osadzone w widocznym zwykłym tekście, ale nazwy funkcji C nie są. Więc każdy kod typu tajemnicy handlowej powinien być prawdopodobnie zakodowany w prostym C i skompilowany z optimizerem odwróconym do góry. Możesz zaciemnić dowolny Webkit Javascript osadzony w pakiecie aplikacji lub dowolny inny osadzony Kod maszyny Wirtualnej (o ile kod interpretowany nie zostanie pobrany).

 2
Author: hotpaw2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-08 22:58:00

Prawdopodobnie nie dlatego, że Objective-C kompiluje się do instrukcji procesora, a nie jest interpretowany lub kompilowany do kodu bajtowego, więc dekompilacja kodu przyniesie dość niejasne wyniki. Zaciemnianie jest czymś, czego zwykle potrzebujesz tylko wtedy, gdy musisz rozpowszechnić źródło kodu, jak w językach interpretowanych, takich jak JavaScript, aby działał nawet wtedy, gdy chcesz, aby Kod pozostał tajny.

 -6
Author: G Gordon Worley III,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-05 19:16:31