2017-06-14 13 views
7

Używam dexlib2 do przepisywania istniejącego apk za pomocą jednego narzędzia jar. Chcę zmienić jedną instrukcję z własnymi instrukcjami. Zasadniczo zwraca jakiś obiekt i chcę go zastąpić inną metodą zwracającą inny obiekt. Jest w stanie zastąpić metodę, ale kiedy przejrzałem zaktualizowany dex, widzę następną linię z .local v1, manager: Lblah/KeyguardManager;Wymień nową metodę dexlib2 failing

kod, który chcę zastąpić

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 

kod, który należy wymienić na powyżej:

Manager mgr=Manager.getInstance(this) 

użyłem metody getInstructionRewriter go zastąpić. Zastępuje ona metodę, ale nie jestem w stanie wymyślić, jak zastąpić .local v1, manager: Lblah/KeyguardManager; z .local v1, manager: LBlah/Manager;

+0

Naprawdę nie wiem, ale możesz sprawdzić ten projekt, aby zobaczyć, czy jest coś podobnego https://github.com/khaledblah/dex_tainting – fmaccaroni

+0

Twój problem nie jest jasny. Możesz zastąpić 'v1', tak jak powiedziałeś. Dla pewności możesz dekompilować kod, który ma w sobie 'Manager mgr = Manager.getInstance (this)' i zobaczyć, jak to jest w 'smali', a następnie skopiować go do tego pliku twojej klasy' jar'. Jeśli nie o to pytasz, dodaj linie dekompilowanego pliku jar, który chcesz zmienić (mam na myśli kod 'smali', a nie kod' java'). – Merka

Odpowiedz

0

Powinieneś upewnić się, że Lblah/Manager istnieje w Twoim apk. Jeśli chcesz tylko wprowadzić tę zmianę w jednym pliku .smali i pozostawić inne pliki bez zmian, będzie to łatwe. Musisz wyczyścić wszystkie wystąpienia w tym pliku z numerem KeyguardManager i zastąpić wywołanie, które wykonują, odpowiadającą klasie Manager. Następnie przepakuj swój telefon i przetestuj go.

Jeśli masz błąd podczas odtwarzania pliku apk lub po zainstalowaniu nowego pliku APK, może to oznaczać pewne niedopasowania w wynikach i musisz dowiedzieć się, jaki jest problem. W tym przypadku możesz opublikować błąd tutaj, a zobaczymy, co możemy zrobić! :)