[Android] Jak odszukać funkcję w kodzie...

0

Od razu powiem że Java to nie mój żywioł i jestem totalnym lamerem jeśli chodzi o te sprawy. Mam aplikację która mierzy czas do końca ćwiczeń. I teraz chciałbym sobie wykonać modyfikację tej aplikacji z autorem nie ma kontaktu bo to aplikacja autorska nie ma jej w google play i nie chce jej upubliczniać... Jako tako radze sobie w php i ostatnio kroki stawiam w C# ale java niby podobny język ale go nie kumam. Ale do rzeczy mam licznik który chcę sobie zmodyfikować tak by mnożył mi czas np. x0,75. Czyli mam 10min czasu na dany obwód i chcę mieć możliwość dla wszystkich obwodów skrócić sobie ten czas o 2,5 min czyli mnożę sobie 0,75 razy standardowy czas. czyli ustawi mi czas na 7min 30 sec i tak będzie odliczał nie chcę na sztywno ustawiać tylko chcę modyfikować to przemnażając wszystko.
Zdekompilowałem sobie apk'e poszperałem po necie i tak znalazłem w ustawieniach dodałem sobie ustawienia.xml:


    <PreferenceScreen android:title="SkracaczCzasu">
<ListPreference android:entries="@tablica/skracaczczasu" android:title="Skracanie czasu ćwiczeń" android:key="SkracaczCzasu"" android:summary="%s" android:defaultValue="1" android:entryValues="@tablica/skracaczczasu"" />
    </PreferenceScreen>

w tablica.xml

    <string-array name="skracaczczasu">
        <item>0,95</item>
        <item>0,90</item>
        <item>0,85</item>
        <item>0,80</item>
        <item>0,75</item>
    </string-array>

w ids.xml

 <item type="id" name="SkracaczCzasu">false</item>

w public.xml

<public type="id" name="SkracaczCzasu" id="0x88776655" />
<public type="id" name="dokoncaCwiczen" id="0x700800ab" />

Skompilowałem sobie wszystko w menu wszystko ładnie się pojawiło i mogę sobie wybierać wartość przez którą będzie można mnożyć tylko jest jeden problem jak mam odszukać funkcję która wylicza czas i go pokazuje "dokoncaCwiczen" w kodzie nic nie znalazłem ani po name ani po id ;( id jest w hex więc może w jakiejś klasie przyjmuje inną wartość ?? Czy jest ktoś wstanie mi pomóc jak mam odszukać ten element i tam dopisać funkcję która będzie mi przemnażać czas??
Jest pełno jakiś plików a,b,....hk z rozszerzeniem java ale tam nie znalazłem nic takiego jedynie jakieś takie dziwne wartości jak f4059b i jest mega dużo takich alfanumerycznych identyfikatorów...

package pl.paker.wspolne;

/* compiled from: Trening */
public enum ck {
    BRAK,
    f4059b,
    WYLOGOWANY
}



Czy jest możliwe znalezienie tej funkcji czy raczej nie ??

1

Jak się umie to się pewnie znajdzie, ale aplikacja najpewniej jest obfuskowana, więc skompilować to drugi raz może być ciężko. Dodatkowo nie ma tam w tym apk jakichś plików .so? Może te obliczenia w ogóle są wykonywane przez jakąś natywną bibliotekę?

0

Aplikacja jest potraktowana proguardem. Jak wspomniał @Shalom, jeżeli nie jest to funkcja natywna (możesz to sprawdzić wyszukując słowo native w całym kodzie) to na pewno gdzieś jest w kodzie (ale ma dziwną nazwę). Na twoim miejscu przekazałbym kod do doświadczonego programisty, może będzie w stanie wyciągnąć co chcesz, albo wręcz przepisać aplikację do bardziej czytelnej formy.

1

A ja bym poszedł jeszcze inną drogą: napisał samemu.
Serio, oszczędzisz sobie czasu, bo zabawa z łączeniem tego wszystkiego w całość będzie dłuższa od wymyślenia własnego rozwiązania ( a i problem nie brzmi jakoś skomplikowanie).
Taka dekompilacja, użyłem raz ale z pomysłem co chcę znaleźć i jak znaleźć, sprawdza się w przypdakach typu: znalezienie nazwy web serwisu który wykorzystuje aplikacja ( duża szansa, że ktoś wrzuci web query/zapytanie do pliku values/string, albo jakieś klasy Constants, i można to później odczytać), jakichś wartości stałych itp.
Pamiętaj, że nie wszystko musi się zdekompilować poprawnie, i zależnie od ilości kodu bardzo możliwe, że masz tam miejsca z dziurami.
Podsumowując: jakieś konkretne wartości, które wiesz, że się tam znajdują, może ogólny obraz i architektura, ale na pewno nie warto marnować czasu na szczegółowe ślęczenie i myślenie co oznacza "i133232a".

Jako przykład: pisałem ostatnio aplikację która używała sensora ciśnieniowego do ustalenia wysokości nad poziomem morza. Problem był taki, że trzeba było podać jako odniesienie wartość lokalnego ciśnienia przy poziomie morza ( bez tego, automatycznie brałoby się średnią światową wartość 1013,5 hPa, która fałszuje wyniki nawet o +/- 100m). A więc do zdobycia tej wartości trzeba było skorzystać z jakiegoś serwisu z pogodą (od razu mówię, że openweathermap jest do d**y pod tym względem). Gapnąłem się, że jest mnóstwo aplikacji w sklepie które podawały dobrą wartość, więc używały dobrego serwisu/sposobu.
Wykombinowałem więc sobie, że zdekompiluję kilka wyglądających na "mniej profesjonalne" i sprawdzę w plikach z zasobami czy nie jest tam też zapisany link/nazwa serwisu.
No i był. Na końcach internetów, w życiu bym nie znalazł tego, gdybym nie wiedział co mam wpisać do google. ( A to wszystko już po przeszukaniu ton tematów na stacku).

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