hook Dex의 클래스 스트리밍

2126 단어
  • DexFile 생성
  • DexFile dexFile = new DexFile("/data/user/0/com.test/.cache/classes.jar")
    
  • 모든 클래스 이름 꺼내기
  • Enumeration classNames = dexFile.entries();
    while (classNames.hasMoreElements()) {
        final String className = classNames.nextElement();
        log("hook :" + className);
    }
    
  • 클래스 대상을 찾아 훅
  • 을 진행한다.
    Class> clazz = XposedHelpers.findClass(className, loadPackageParam.classLoader);
    

    hook 구조 함수
    XposedBridge.hookAllConstructors(clazz, new XC_MethodHook() {});
    

    hook 방법
    XposedBridge.hookMethod(method, new XC_MethodHook() {});
    
  • 훅 방법의 로그 인쇄
  • try {
        Object[] args = param.args;
        if (args != null) {
            Method method = (Method) param.method;
            Log.e(TAG, " :" + args.length + " 
    :" + method.toGenericString()); int i = 0; StringBuilder sb = new StringBuilder(); for (Object obj : args) { i++; String value; if (obj == null) { value = "is null"; } else if (obj instanceof Context) { value = ((Context) obj).getClass().getName(); } else if (obj instanceof Byte[]) { value = new String((byte[]) obj, "utf-8") + "
    byte:" + Arrays .toString((byte[]) obj); } else if (obj instanceof Integer || obj instanceof Long || obj instanceof Boolean || obj instanceof String || obj instanceof Double || obj instanceof Byte || obj instanceof Short || obj instanceof Character || obj instanceof Float) { value = String.valueOf(obj); } else { value = obj.getClass().getName(); } sb.append(" ").append(i).append(":").append(value).append("
    "); } Log.e(TAG, " :" + sb.toString()); } } catch (Exception e) { }

    좋은 웹페이지 즐겨찾기