Giter VIP home page Giter VIP logo

freereflection's Introduction

FreeReflection

FreeReflection is a library that lets you use reflection without any restriction above Android P (includes Q and R).

Usage

  1. Add it in your root build.gradle at the end of repositories(jitpack):
allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}
  1. Add dependency to your project(jcenter):
implementation 'com.github.tiann:FreeReflection:3.1.0'
  1. Add one line to your Application.attachBaseContext :
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    Reflection.unseal(base);
}

Then you can use the reflection API normally, all the restrictions are gone. Enjoy yourself :)

Under the hood

Donations

If you like this project, buy me a cup of coffee! :)

BitCoin: 39Wst8oL74pRP2vKPkPihH6RFQF4hWoBqU

License

MIT License

freereflection's People

Contributors

hushenghao avatar lizhangqu avatar simpleton avatar tiann avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

freereflection's Issues

反射vivo系统方法异常

vivo x23,funtouchOS10,android 9

Class<?> shortcutList = Class.forName("com.bbk.launcher2.installshortcut.PurviewActivity");
异常报类找不到,
我用adb查看activity,是有这个类的
adb shell "dumpsys window | grep mCurrentFocus"
mCurrentFocus=Window{b3629ee u0 com.bbk.launcher2/com.bbk.launcher2.installshortcut.PurviewActivity}

Wallet

3ByHK9XrWHwPhcigA8gkRMuH2AXQYoKJ3c

黑名单或深灰名单方法不生效

设备:Pixel DP3

源码:https://android.googlesource.com/platform/frameworks/base/+/android-p-preview-3/core/java/android/content/res/AssetManager.java#305

代码片段:

try {
    Method ensureStringBlocks = AssetManager.class.getDeclaredMethod("ensureStringBlocks");
    ensureStringBlocks.setAccessible(true);
    ensureStringBlocks.invoke(getAssets());
} catch (NoSuchMethodException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (InvocationTargetException e) {
    e.printStackTrace();
}

异常:

java.lang.NoSuchMethodException: ensureStringBlocks []

unsealNative调用问题

private static native int unsealNative(int targetSdkVersion);
这个native方法我没看到Reflection类中有哪里调用,请教一下 是怎么触发走到main.cpp的该native方法的?

Not work on MIUI Android 11 with target 30

Hi, recently, after upgrading my app’s targetSdkVersion to 30, this library becomes invalid for MIUI on Android 11. At least two people verified this problem.
If the library can be updated to solve this problem will be very appreciated. Thanks!

测试在反射调用 dalvik.system.DexPathList失败

Class dexPathListClass = Class.forName("dalvik.system.DexPathList"); Constructor con = dexPathListClass.getConstructor(ClassLoader.class, String.class, String.class, File.class); Log.i("looog", "name:" + con.getName()); Object dexPaths = con.newInstance(context.getClassLoader(), path, path, dir_path);
在newInstace时抛异常

日志如下
01-22 23:49:59.241 10339 10339 D OpenGLRenderer: Skia GL Pipeline 01-22 23:49:59.264 10339 10339 I FreeReflect: runtime ptr: 0xf072d400, vmExtPtr: 0xf071d3e0 01-22 23:49:59.264 10339 10339 I FreeReflect: found offset: 360 01-22 23:49:59.264 10339 10339 I FreeReflect: offsetOfVmExt: 360 01-22 23:49:59.264 10339 10339 I FreeReflect: found offset: 796 01-22 23:49:59.264 10339 10339 I FreeReflect: target: 796 01-22 23:49:59.264 10339 10339 I FreeReflect: is_java_debuggable: 1, is_native_debuggable: 0, safe_mode: 0 01-22 23:49:59.264 10339 10339 I FreeReflect: hidden api policy before : 2 01-22 23:49:59.264 10339 10339 I FreeReflect: fingerprint: google/sailfish/sailfish:9/PPR1.180610.009/4898911:user/release-keys 01-22 23:49:59.264 10339 10339 I FreeReflect: hidden api policy after: 0 01-22 23:49:59.266 10339 10339 I looog : dexPath:/data/user/0/com.example.sdktesthost/app_dex/plug_dex.jar 01-22 23:49:59.267 10339 10361 I looog : name:dalvik.system.DexPathList 01-22 23:49:59.268 10339 10361 W System.err: java.lang.IllegalAccessException: java.lang.Class<dalvik.system.DexPathList> is not accessible from java.lang.Class<com.example.sdktesthost.Reflect> 01-22 23:49:59.268 10339 10361 W System.err: at java.lang.reflect.Constructor.newInstance0(Native Method) 01-22 23:49:59.269 10339 10361 W System.err: at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 01-22 23:49:59.269 10339 10361 W System.err: at com.example.sdktesthost.Reflect.run(Reflect.java:31)

这玩意到底咋用?logcat提示:不能访问方法,是我调用方法不对吗?

logcat的信息:

SurfaceFlinger: Permission Denial: can't access SurfaceFlinger pid=3505, uid=10283

    public void startPower(View view) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, ClassNotFoundException {
        // Do something in response to button

        //-------
        Log.d(TAG, "start-------------");

        // get hide function
        Class<?> surfaceClass = (Class<?>) CLASS.forName("android.view.SurfaceControl");
        getBuiltInDisplayMethod = surfaceClass.getMethod("getBuiltInDisplay", int.class);
        // run function
        IBinder displayToken = (IBinder) getBuiltInDisplayMethod.invoke(null, 0);

        // get hide function
        setDisplayPowerModeMethod = surfaceClass.getMethod("setDisplayPowerMode", IBinder.class, int.class);
        setDisplayPowerModeMethod.invoke(null, displayToken, 0);

        //结束
        toast("ok");
        Log.d(TAG, "end-------------");
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        Reflection.unseal(base);
        Log.d(TAG, "attachBaseContext-----------------------------------------------------------------------------------------------------------------------------------------------");

    }

image

上面的代码我是直接放在MainActivity.java文件里。在手机上执行的时候不生效。

我会一点Java代码,但是不懂Android。
大佬是我调用的方法不对吗?还是我这个函数本来就不能调用。
可以肯定的是,我这个函数可以用app_process方式运行成功。

move dex code to a dedicated .dex file

To directly put an encoded dex code string in code may violate Play's malicious behavior policy.

I would suggest that you don't encode the dex code, move the decoded dex bytes to a .dex file, and put it under the asset directory.

Here attached image shows you how Facebook audience network SDK does.
It's a more safe approach for embedding the dex code in an aar file without violating Play's policy.

fan_sdk

In Android 13 it is not working

reflect bootstrap failed:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Application.onCreate()' on a null object reference

Can't reflection SSLParametersImpl.class on Android P

        SSLSocketFactory defaultSSLSocketFactory  HttpsURLConnection.getDefaultSSLSocketFactory();
        try {
            parameters = (SSLParametersImpl) ReflectionUtil.getFieldFromObject(
                    ReflectionUtil.getFieldFromClass(defaultSSLSocketFactory.getClass(),
                            SSLParametersImpl.class), defaultSSLSocketFactory);
        } catch (Exception e) {
            e.printStackTrace();
        }

That code will throw

java.lang.IllegalAccessError: Illegal class access

在安卓12 报 W/BootstrapClass: reflect bootstrap failed,对使用有影响吗

java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at me.weishu.reflection.BootstrapClass.(BootstrapClass.java:29)
at me.weishu.reflection.BootstrapClass.exemptAll(BootstrapClass.java:72)
at me.weishu.reflection.Reflection.unseal(Reflection.java:35)
at com.jhkj.neabot.app.MainApplication.initApp(MainApplication.java:72)
at com.jhkj.neabot.app.MainApplication.onCreate(MainApplication.java:65)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1211)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6728)
at android.app.ActivityThread.access$1500(ActivityThread.java:247)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2057)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7842)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: java.lang.NoSuchMethodException: dalvik.system.VMRuntime.setHiddenApiExemptions [class [Ljava.lang.String;]
at java.lang.Class.getMethod(Class.java:2103)
at java.lang.Class.getDeclaredMethod(Class.java:2081)

java.lang.reflect.InvocationTargetException

E/Reflection: reflect bootstrap failed:
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at me.weishu.reflection.Reflection.(Reflection.java:32)
at com.tm.camera.App.attachBaseContext(App.java:43)
at android.app.Application.attach(Application.java:181)
at android.app.Instrumentation.newApplication(Instrumentation.java:996)
at android.app.Instrumentation.newApplication(Instrumentation.java:980)
at android.app.LoadedApk.makeApplication(LoadedApk.java:558)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4526)
at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(Native Method)
at de.robv.android.xposed.XposedBridge.handleHookedMethod(XposedBridge.java:360)
at android.app.ActivityThread.handleBindApplication()
at android.app.ActivityThread.access$1500(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
Caused by: java.lang.NoSuchMethodException: setHiddenApiExemptions [class [Ljava.lang.String;]
at java.lang.Class.getMethod(Class.java:664)
at java.lang.Class.getDeclaredMethod(Class.java:626)
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at me.weishu.reflection.Reflection.(Reflection.java:32) 
at com.tm.camera.App.attachBaseContext(App.java:43) 

使用了之后还是不行

基于P的模拟器来测试的,使用了框架之后Log依然会输出警告
Accessing hidden field Landroid/content/pm/PackageParser$Package;->services:Ljava/util/ArrayList; (light greylist, reflection)

尝试了小米12失败了

报错打印
2022-07-15 17:31:39.016 8175-8175/? W/BootstrapClass: reflect bootstrap failed:
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at me.weishu.reflection.BootstrapClass.(BootstrapClass.java:29)
at me.weishu.reflection.BootstrapClass.exemptAll(Unknown Source:0)
at me.weishu.reflection.Reflection.unseal(Reflection.java:35)
at org.cocos2dx.lua.AppActivity.attachBaseContext(AppActivity.java:212)
at android.app.Activity.attach(Activity.java:8115)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3702)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3929)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2282)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8250)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045)
Caused by: java.lang.NoSuchMethodException: dalvik.system.VMRuntime.setHiddenApiExemptions [class [Ljava.lang.String;]
at java.lang.Class.getMethod(Class.java:2103)
at java.lang.Class.getDeclaredMethod(Class.java:2081)
at java.lang.reflect.Method.invoke(Native Method) 
at me.weishu.reflection.BootstrapClass.(BootstrapClass.java:29) 
at me.weishu.reflection.BootstrapClass.exemptAll(Unknown Source:0) 
at me.weishu.reflection.Reflection.unseal(Reflection.java:35) 
at org.cocos2dx.lua.AppActivity.attachBaseContext(AppActivity.java:212) 
at android.app.Activity.attach(Activity.java:8115) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3702) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3929) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2282) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loopOnce(Looper.java:210) 
at android.os.Looper.loop(Looper.java:299) 
at android.app.ActivityThread.main(ActivityThread.java:8250) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045) 

SDK等级
# Android SDK version that will be used as the compile project
PROP_COMPILE_SDK_VERSION=31

  # Android SDK version that will be used as the earliest version of android this application can run on
  PROP_MIN_SDK_VERSION=21
  
  # Android SDK version that will be used as the latest version of android this application has been tested on
  PROP_TARGET_SDK_VERSION=30

9.0蓝牙灰名单无法调用

大佬,反射调用蓝牙mac 地址时,Accessing hidden method Landroid/bluetooth/IBluetooth$Stub$Proxy;->getAddress()Ljava/lang/String; (light greylist, reflection),另外还有 java.lang.reflect.InvocationTargetException这个异常,目前这个反射库还是无法掉起这些方法,不知道是什么原因。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.