是否有可能在Android中通过反射获取系统类?

时间:2018-09-21 18:02:31

标签: android reflection smartcard sim-card secure-element

我对能够与Android中的SIM卡通信感兴趣。我知道只有具有MODIFY_PHONE_STATE权限的系统应用程序或具有API> 22(https://source.android.com/devices/tech/config/uicc)的运营商特权的应用程序才能调用TelephonyManager.iccOpenLogicalChannel()方法并执行与SIM卡的进一步APDU交换。但是,有一个很棒的项目,可以添加开放的界面来与称为SEEK-for-android(https://github.com/seek-for-android/pool)的安全元素,sim卡等通信。最大的问题是,您必须自己手动修补操作系统才能使用它。 因此,在调试应用程序时,我在logcat输出中看到了这一行:

09-20 12:27:35.613 14942-14954/? W/System.err: java.lang.NullPointerException: Attempt to read from null array
    at android.os.Parcel.readException(Parcel.java:1627)
    at android.os.Parcel.readException(Parcel.java:1574)
    at com.android.internal.telephony.ITelephony$Stub$Proxy.hasIccCard(ITelephony.java:3922)
    at org.simalliance.openmobileapi.uiccterminal.UiccTerminal$TerminalServiceImplementation.isCardPresent(UiccTerminal.java:432)
    at org.simalliance.openmobileapi.service.Terminal.isCardPresent(Terminal.java:497)
    at org.simalliance.openmobileapi.service.Terminal.initializeAccessControl(Terminal.java:242)
    at org.simalliance.openmobileapi.service.Terminal$InitialiseTask.doInBackground(Terminal.java:121)
    at org.simalliance.openmobileapi.service.Terminal$InitialiseTask.doInBackground(Terminal.java:109)
    at android.os.AsyncTask$2.call(AsyncTask.java:295)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)

您可以在堆栈跟踪中看到org.simalliance.openmobileapi。*类。所以看来我的装置(Samsung galaxy J2-SM-G532F)实际上已将此修补程式套用至OS!现在我的问题是:我可以某种方式使用它们吗?我试图通过调用Class.forName("org.simalliance.openmobileapi.uiccterminal.UiccTerminal")来实例化它 但我没有成功,并收到ClassNotFoundException。那么可以实例化和使用这些类吗?也许我缺少什么?预先谢谢你

0 个答案:

没有答案