2017-02-09 18 views
1

Я просматриваю платформу Xposed в Android. В частности, чтение блога - http://d3adend.org/blog/?p=589 для потенциальных контрмер и пара вопросов на этой линии.Как использовать методы привязки Xposed Framework в Android

Поэтому, когда мы используем метод Xposed, framework делает этот метод родным и выполняет код, который он хочет подключить. Итак, как это называется в исходном методе stacktrace?

com.example.hookdetection.DoStuff->getSecret //This one 
de.robv.android.xposed.XposedBridge->invokeOriginalMethodNative 
de.robv.android.xposed.XposedBridge->handleHookedMethod 
com.example.hookdetection.DoStuff->getSecret //This one again 
com.example.hookdetection.MainActivity->onCreate 
android.app.Activity->performCreate 
android.app.Instrumentation->callActivityOnCreate 
android.app.ActivityThread->performLaunchActivity 
android.app.ActivityThread->handleLaunchActivity 
android.app.ActivityThread->access$800 
android.app.ActivityThread$H->handleMessage 
android.os.Handler->dispatchMessage 
android.os.Looper->loop 
android.app.ActivityThread->main 
java.lang.reflect.Method->invokeNative 
java.lang.reflect.Method->invoke 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller->run 
com.android.internal.os.ZygoteInit->main 
de.robv.android.xposed.XposedBridge->main 
dalvik.system.NativeStart->main 

Также почему это происходит дважды в стеке. Я хочу понять порядок их исполнения.

Действительно ли этот метод работает? Так как код hooked метода выполняется, он не будет идеально выполнять исходный код метода. Итак, как мы можем добавить механизм обнаружения stracktrace тем же методом, зная, что он будет заменен.

ответ

7

Несовершенные внутренние операции нелегко понять, если вам не удобно с кодом низкого уровня и ядром Android. Короче говоря, когда вы открываете приложение на своем Android-устройстве, существует мастер-процесс под названием Zygote, который будет порождать его как дочерний процесс.

Целью Xposed является возможность управления Zygote и обнаружение всякий раз, когда процесс будет создан, так что кто-то сможет перехватывать методы, заменяя их определения до того, как будут сделаны какие-либо вызовы.

У вас есть большой контроль с помощью Xposed, вы можете заменить весь объект метода, поэтому исходный код никогда не вызывается, или вы можете использовать hook до hook и afterCall, который в основном используется техникой батута (пример C++ ниже)

Trampoline Hook Technique (C++)

Как вы можете видеть, когда метод вызывается не непосредственно перейти к исходному коду, но в введенном блоке кода, где кто-то может делать все, что он хочет (свалка, изменения параметров и т.д.), то он вернется к подлинному коду. Вы также можете сделать это после подлинного кода, так что вы получите выход метода. Xposed реализует это, используя beforeHookedMethod и afterHookedMethod.

Добавление механизма обнаружения stacktrace не поможет вообще. Вы вызовете Java-методы, чтобы получить фактический стек. Его можно легко победить, подключив метод getStacktrace, сохранив действительную подлинную стеклу, а затем, когда вызывается getStackTrace и содержит методы Xposed, возвращайте ранее сохраненную подлинную стек.

Лучше всего полагаться на собственный код, чтобы обнаружить его, но даже тогда любой решительный и опытный хакер с полным контролем устройства может в конечном итоге победить его.

+0

вы можете объяснить эту часть «Это длительный процесс запуска добавляет дополнительную баночку к классам и вызывает методы оттуда на определенные места "из учебника xposed. https://github.com/rovo89/XposedBridge/wiki/Development-tutorial – Suraj

1

Чтобы добавить выше точки при вызове XposedHelpers.findAndHookMethod обратного вызова может быть либо -

  1. XC_MethodHook: класс обратного вызова для метода крюков. Обычно создаются анонимные подклассы этого класса, которые переопределяют beforeHookedMethod(XC_MethodHook.MethodHookParam) и/или afterHookedMethod(XC_MethodHook.MethodHookParam).
  2. XC_MethodReplacement: Специальный случай XC_MethodHook, который полностью заменяет оригинальный метод.

1-й только дает вам крючки для выполнения методов до и после оригинального метода, где второй заменяет его полностью.Например - Xposed example on github

Пара постов я написал -

Creating a new Xposed module in Android

Installing Xposed Framework on Android devices

 Смежные вопросы

  • Нет связанных вопросов^_^