수색…


Xposed 된 모듈 만들기

Xposed는 다른 앱의 메소드 호출을 연결할 수있는 프레임 워크입니다. APK를 디 컴파일하여 수정하면 원하는 곳 어디에서나 명령을 직접 삽입 / 변경할 수 있습니다. 그러나 나중에 APK를 다시 컴파일 / 서명해야하며 전체 패키지 만 배포 할 수 있습니다. Xposed를 사용하면 메서드 앞이나 뒤에 자신 만의 코드를 삽입하거나 전체 메서드를 완전히 바꿀 수 있습니다. 안타깝게도 루트 된 장치에만 Xposed를 설치할 수 있습니다. 다른 앱이나 핵심 Android 시스템의 동작을 조작하고 APK를 디 컴파일, 다시 컴파일 및 서명하는 번거 로움을 피하기 위해 Xposed를 사용해야합니다.

먼저 Android Studio에서 활동이없는 표준 앱을 만듭니다.

그런 다음 build.gradle에 다음 코드를 포함해야합니다.

repositories {
    jcenter();
}

그 후 다음과 같은 종속성을 추가합니다.

provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'

이제이 태그들을 AndroidManifest.xml 에있는 application 태그 안에 넣어야합니다. Xposed는 여러분의 모듈을 인식합니다 :

<meta-data
        android:name="xposedmodule"
        android:value="true" />
<meta-data
        android:name="xposeddescription"
        android:value="YOUR_MODULE_DESCRIPTION" />
<meta-data
        android:name="xposedminversion"
        android:value="82" />

참고 : 항상 82최신 Xposed 버전으로 교체하십시오.

방법 후크

IXposedHookLoadPackage 를 구현하는 새 클래스를 IXposedHookLoadPackage handleLoadPackage 메서드를 구현합니다.

public class MultiPatcher implements IXposedHookLoadPackage
{
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
    {
        
    }
}

메서드 내에서 hook하려는 응용 프로그램의 패키지 이름에 대한 loadPackageParam.packageName 을 확인합니다.

@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
    if (!loadPackageParam.packageName.equals("other.package.name"))
    {
        return;
    }
}

이제 코드를 실행하기 전에 또는 메소드를 수행하기 전에 메소드를 연결하고 조작 할 수 있습니다.

@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
    if (!loadPackageParam.packageName.equals("other.package.name"))
    {
        return;
    }

    XposedHelpers.findAndHookMethod(
        "other.package.name",
        loadPackageParam.classLoader,
        "otherMethodName",
        YourFirstParameter.class,
        YourSecondParameter.class,
        new XC_MethodHook()
    {
        @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable
        {
            Object[] args = param.args;
        
            args[0] = true;
            args[1] = "example string";
            args[2] = 1;

            Object thisObject = param.thisObject;

            // Do something with the instance of the class
        }

        @Override
        protected void afterHookedMethod(MethodHookParam param) throws Throwable
        {
            Object result = param.getResult();

            param.setResult(result + "example string");
        }
    });
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow