Reverse engineering apki mobilnej - po co ?

0

Hej,

tak się po prostu zastanawiam, jaki mielibyście cel w reverse engineering aplikacji mobilnej? Jakie powody można by podać aby się w ogóle za to brać?

0

Na przykład żeby poznać API z którym się komunikuje. Może ma też wpisane jakieś credentiale albo używa niezabezpieczonych restowych endpointów?

1

Apka może być napisana słabo, więc zamiast czekać na nową wersję od autora, lepiej stworzę własną ;-)
W tym celu trzeba poznać jak działa, rozszyfrować protokoły komunikacji itd.

0

Oszukiwanie w grach. Np. wysłanie wymarzonego top score na serwer.

0

no właśnie tylko że to możesz dostać np. za pomocą fiddlera. a credentiale czy wyciągniesz od tak z apki?

@ne0 no nie do końca to takie proste jak myślisz. Fiddler czy jakieś proxy pokażą ci adres endpointa i wysłane dane. Ale nie powiedzą ci jaki te dane przygotować. Jeśli to nie jest jakiś goły json czy xml tylko własny protokół to niestety ale nie da rady sobie tego "wymyślić".
Jeśli chodzi o credentiale to znów zależy od aplikacji, ale jeśli są gdzieś w niej zapisane to jasne że mozna je wyciągnąć.

no to ciekawy akurat argument. Robiłeś coś takiego może?

Na Ghost in the Shellcode była nawet taka seria zadań "Pwn Adventure" ;)
http://lockboxx.blogspot.ch/2015/01/ghost-in-shellcode-2015-ctf-writeup-pwn.html
http://lockboxx.blogspot.ch/2014/01/ghost-in-shellcode-2014-ctf-writeup.html

A jeśli chodzi o sytuacje "z życia wzięte" to zobacz np.:

1

Kumpel kiedyś znalazł:

private static String getWSPassword() {
    if (SomeAPP.getBuildType() == BuildType.RELEASE) {
        return "SomeStrangeHashHere";
    }
    return "password1";
}
0

Z tego co wiem w Polsce jest o tyle ciekawie że z jednej strony rzeczywiście można robić taki reverse engineering (za granicą niekoniecznie), z drugiej w miarę jasno są określone warunki na jakich to można robić:

https://forumprawne.org/nowe-technologie/590495-inzynieria-wsteczna-tworzenie-korzystanie-z-nieautoryzowanego-klienta.html

Tak więc ten powód akurat jest nomen omen... słaby:

Patryk27 napisał(a):

Apka może być napisana słabo, więc zamiast czekać na nową wersję od autora, lepiej stworzę własną ;-)

0

tak więc ten powód akurat jest nomen omen... słaby:

Apka może być napisana słabo, więc zamiast czekać na nową wersję od autora, lepiej stworzę własną ;-)

Dlaczego? Przypadek - wspomnianego w dyskusji, do której linkujesz - libgadu: SMS-Express nie był zainteresowany stworzeniem klienta dla Linuksa, społeczność to zrobiła. Słaby powód? Pomogło wielu użytkownikom Linuksa (i nie tylko). Plus inne przypadki alternatywnych klientów, np. dla Snapchata - fabryczna aplikacja nie miała pewnych funkcji, grupa zdolnych ludzi zrobiła alternatywę.

Zdarzyło mi się zrobić bardzo podobnie - wykonałem reverse-engineering aplikacji do sterowania pewnym urządzeniem, bo producent dostarczył tylko dla Androida, a ja potrzebowałem dla Windows.

0

@Ktos: nie znam tej historii. SMS-Express nie chciał stworzyć klienta pod Linuksa i powstało libgadu?
To jest przypadek idealnie pasujący do polskiego prawa. (przeczytaj podlinkowany wątek ok. 19-01-2015, 23:06 )

0

@vpiotr: Chyba nie rozumiem. Tutaj sąd musiałby się pochylić, żeby stwierdzić, czy jest dobrze, czy nie ;-)

libgadu i ekg (eksperymentalny klient gadu-gadu) powstały po RE oryginalnego protokołu i klienta.
Pasuje do prawa w taki sposób, że jak dla mnie to sąd musiałby się nad tym pochylić ;-)

Ustawa z dnia 4 lutego 1994r. o prawie autorskim i prawach pokrewnych, Artykuł 75:

  1. Nie wymaga zezwolenia uprawnionego:
    ...
  1. obserwowanie, badanie i testowanie funkcjonowania programu komputerowego w celu poznania jego idei i zasad przez osobę posiadającą prawo korzystania z egzemplarza programu komputerowego, jeżeli, będąc do tych czynności upoważniona, dokonuje ona tego w trakcie wprowadzania, wyświetlania, stosowania, przekazywania lub przechowywania programu komputerowego;
  2. zwielokrotnianie kodu lub tłumaczenie jego formy w rozumieniu art. 74 ust. 4 pkt 1 i 2, jeżeli jest to niezbędne do uzyskania informacji koniecznych do osiągnięcia współdziałania niezależnie stworzonego programu komputerowego z innymi programami komputerowymi, o ile zostaną spełnione następujące warunki:
    a) czynności te dokonywane są przez licencjobiorcę lub inną osobę uprawnioną do korzystania z egzemplarza programu komputerowego bądź przez inną osobę działającą na ich rzecz,
    b) informacje niezbędne do osiągnięcia współdziałania nie były uprzednio łatwo dostępne dla osób, o których mowa pod lit. a,
    c) czynności te odnoszą się do tych części oryginalnego programu komputerowego, które są niezbędne do osiągnięcia współdziałania.
  1. Informacje, o których mowa w ust. 2 pkt 3, nie mogą być:
  1. wykorzystane do innych celów niż osiągnięcie współdziałania niezależnie stworzonego programu komputerowego;
  2. przekazane innym osobom, chyba że jest to niezbędne do osiągnięcia współdziałania niezależnie stworzonego programu komputerowego;
  3. wykorzystane do rozwijania, wytwarzania lub wprowadzania do obrotu programu komputerowego o istotnie podobnej formie wyrażenia lub do innych czynności naruszających prawa autorskie.

Stworzenie alternatywnego klienta możemy bezproblemowo podpiąć pod punkt 2.3 - pozyskanie informacji do interoperacyjności z innymi programami (innym środowiskiem pracy) [1].

Pytanie czy stworzenie alternatywnego klienta czy też alternatywnej wersji aplikacji to jest "wykorzystywanie do rozwijania, wytwarzania programu o istotnie podobnej formie wyrażenia" (punkt 3.3). Alternatywnej aplikacji, o bardzo podobnej funkcjonalności, powstałej na podstawie inżynierii wstecznej mógłbym zarzucić "istotnie podobną formę wyrażenia". Ale czy samej implementacji protokołu? A czy "istotnie podobna forma wyrażenia" obowiązuje, jeżeli oryginalny klient jest dostępny tylko na Windows, a ja zrobiłem dla Amigi?

Oczywiście w przypadku GG to regulamin usługi mówił, że niezgodne z regulaminem jest korzystanie z nieoficjalnych klientów.

[1] ciekawe, że nie możemy użyć RE do zapewnienia interoperacyjności z innym sprzętem, a tylko z oprogramowaniem

0
Ktos napisał(a):

Pytanie czy stworzenie alternatywnego klienta czy też alternatywnej wersji aplikacji to jest "wykorzystywanie do rozwijania, wytwarzania programu o istotnie podobnej formie wyrażenia" (punkt 3.3). Alternatywnej aplikacji, o bardzo podobnej funkcjonalności, powstałej na podstawie inżynierii wstecznej mógłbym zarzucić "istotnie podobną formę wyrażenia". Ale czy samej implementacji protokołu? A czy "istotnie podobna forma wyrażenia" obowiązuje, jeżeli oryginalny klient jest dostępny tylko na Windows, a ja zrobiłem dla Amigi?

W tym konkretnym fragmencie który zacytowałeś akurat są błędy w pkt. 3 na początku (prawdopodobnie powstały przy kopiowaniu treści lub przy przygotowywaniu aktualizacji po nowelizacji).
Lepsza wersja jest na wiki: Prawo autorskie (ustawa z 4 lutego 1994 r. tekst jednolity z 2016 r.).

  1. Dozwolone jest dostosowanie oryginalnego oprogramowania do współpracy z innym niezależnym oprogramowaniem (w tym mieści się również wersja na Amigę, bo raczej masz tam inne oprogramowanie niż na PC)
  2. Nie dozwolone jest rozwijanie itd. swojej lepszej wersji oprogramowania na tę samą platformę
  3. Jeśli o sprzęcie nie ma mowy, to znaczy że nie jest to zabronione, ale też nie uprawnia do analizy. W szczególności gdy kiedyś będziesz miał Xeona Turbo Diesel na którym wszystko działa (Windows, internet) oprócz Gadu Gadu i chciałbyś poprawić to Gadu, to niestety jest to szara strefa wg tych przepisów.

Rozwijanie swojego klienta na jakiś egzotyczny system (np. MorphOS) dla serwisu internetowego podpada pod 1.
Poprawienie programu MS Paint tak żeby działał np. pod MorphOS przy pomocy patcha też jest OK.
Ale gdybyś napisał swoją wersję np. MS Paint w JavaScript używając inżynierii wstecznej (np. ASM -> C++ -> emscripten) i zmienił np. tylko czcionkę, to prawo Cię już nie chroni.

Ja się tym tematem dokładnie nie zajmuję, większą wiedzę o technikaliach mają @Gynvael Coldwind i @Shalom ale nie wiem na ile zajmowali się tym od strony prawnej (BTW obaj siedzą w Szwajcarii hmm...).

1

Zacznę od oczywistości: warto każdy konkretny przypadek przedyskutować z prawnikiem ;)

Dorzucę coś tam od siebie dla zainteresowanych (choć dość dużo już było napisane):
Zazwyczaj (różne prawa są w różnych krajach) nie można zreversować czegoś (kodu) i potem tego zaimplementować po swojemu i opublikować - kod jest zazwyczaj chroniony prawem autorskim, a "re-implementacja" tego typu jest uznawana często za nieco zawoalowane skopiowanie owego kodu.
Ale, ponieważ jak zostało wspomniane w wątku, pomysły/idee zazwyczaj nie podlegają ochronie, to istnieje obejście pt. clean room - https://en.wikipedia.org/wiki/Clean_room_design - tl;dr ma się dwa zespoły, które nie komunikują się ze sobą i są obstawione prawnikami; jeden zespół reversuje i pisze dokumentacji (unikając jakichkolwiek fragmentów kodu, ale opisując same pomysły/algorytmy/etc zaimplementowane przez kod), a drugi na podstawie dokumentacji implementuje produkt.

Co do samych protokołów i ich reversowania, przyjmuje się czasem, że póki nie reversuje się samego programu, a jedynie protokół (zrzuty z wiresharka, etc), to to nie łamie praw autorskich.

Jeszcze inną kwestią są same licencje (EULA) - często zabraniają RE niezależnie od praw autorskich / etc, ale od prawa lokalnego zależy na ile te zapisy mają moc. No i ew. póki EULA nie ma zapisanych kar umownych, to do właściciela praw do danego softu należałoby wykazanie w sądzie, że jakieś straty zostały poniesione przez nich.

No i też od państwa zależy co jest chronione przez prawo autorskie. Przykładowo, w US mają bardzo agresywne prawo autorskie i nawet jakieś trywialne funkcje na 10 linii są chronione, a np. we wspomnianej w tym wątku Szwajcarii żeby dzieło było chronione przez prawo autorskie musi być trochę mniej trywialne (vide https://en.wikipedia.org/wiki/Copyright_law_of_Switzerland#Lack_of_originality).

Inną sprawą jest RE w celu usunięcia zabezpieczeń anty-pirackich - vide https://pl.wikipedia.org/wiki/Cracking#Aspekt_prawny_crackingu

No i jeszcze są patenty ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1