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;
Naprawdę nie wiem, ale możesz sprawdzić ten projekt, aby zobaczyć, czy jest coś podobnego https://github.com/khaledblah/dex_tainting – fmaccaroni
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