Android
Xposed
수색…
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");
}
});
}