--------拦截黑名单号码电话----------
sdk1.5之前的挂断电话非常容易endCall。
sdk升级到2.0之后,sdkAPI中endCall去掉了(隐藏了)。
系统API方法被隐藏后,对我们是不可见的,只能通过反射获取。
我们获取到的上层应用API中的TelephonyManageer只是系统TelephonyManageer的一个代理类只包有限的一组方法。
getSystemService源代码是通过mbase调用,而mabase最终的类型是context类型。通过断点调试Context context =
getApplication();获取到context实际类型的android.app.ContextImpl,在系统源代码app包中中查找ContextImpl并
找到获取getSystemSerive方法。发现getSystemService方法在系统源代码中是由ServcieManger调用,因此我们需要通过反射获取到ServiceManager。
手机在开机时系统服务会被初始化并启动,所以我们可以通过反射获取系统servicemanager,通过远程调用,调用服务的挂断电话的方法。
实现步骤:
1.通过反射获取到系统serviceManageer。
2.反射获取servcieManager的getServcie方法。
3.调用getservice方法获取到远程服务的代理IBinder对象。
4.配置远程服务的aidl文件,在系统源代码中搜索(使用everything)Itelephony .aidl打开查看包名,在src目录下创建一个相同的包名,将aidl复制到包内。发现aidl报错,打开它提示找不到couldn't find import for class android.telephony.NeighboringCellInfo,如果aidl中有一个东西找不到说明它也是一个aidl,搜索到NeighboringCellInfo.aidl创建相同包名复制进去。
5.在gen目录下会自动生成一个ITelephony,可看到内部类Stub继承了Binder实现了ITelephnoy,所以它的对象可以直接调用远程服务的方法,使用它内部类的asInterface将IBinder对象转化为ITelephnoy接口类型。
注:因为远程服务的中间人IBinder实现了接口传递的也是是接口类型,本地onservcieConnection方法获取的是Ibinder对象,所以需要转化为ITelephnoy接口类型。
否则无法调用远程服务的方法。
6.用ITelephnoy接口类型对象调用endCall挂断电话。
--------------------代码实例------------------
//利用系统隐藏API挂断电话
private void endCall() {
try {
Class serviceManagerClass = Class.forName("android.os.ServiceManager");
Method method = serviceManagerClass.getMethod("getService", new Class[]{String.class});
IBinder b = (IBinder) method.invoke(null, TELEPHONY_SERVICE);
ITelephony iTelephony = ITelephony.Stub.asInterface(b);
iTelephony.endCall();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
相关推荐
vbs-远程调用vbs-远程调用vbs-远程调用vbs-远程调用
NULL 博文链接:https://quicker.iteye.com/blog/853016
Java RMI远程方法调用详解-例子代码,例子详解在:http://blog.csdn.net/guyuealian/article/details/51992182
j2ee-远程方法调用j2ee-远程方法调用j2ee-远程方法调用
Spring 远程调用 -- C# 访问java WEB 服务,之前写的Demo,希望对大家有所帮帮助!
VB调用系统API函数---CreateToolhelp32Snapshot函数.pdf
前端调用node-red的官方api 实现远程设置参数
主要介绍了spring cloud feign实现远程调用服务传输文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
EJB调用分为远程调用和本地调用两种,本文档描述了远程调用EJB方法。图文并茂,易于理解
按照压缩包中的隐藏API的文档说明,三方APP可以调用android的隐藏API
QQAPI智能调用系统 更新日志: V1.1 bulid2017.01.25 -->添加接口:获取QQ秀API 接口简介:URL QQ号直接获取QQ秀图片 -->添加接口:手机号信息查询API 接口简介:URL 手机号直接获取该手机号相关信息 --...
ChatGPT接入项目实例 Python 调用davinci 002 api 示例 text-davinci-002
RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用RMI远程方法调用
易语言隐藏调用系统API源码,隐藏调用系统API,call,GetKernel32Handle,GetKernelBaseHandle,GetProcAddress,GetProcAddress2
URL加群/URL添加好友/URL获取QQ头像/URL获取空间头像等8个API(API详情查看“更新说明.txt”)安装说明:环境需求:PHP5.2以上丨Windows/Linux丨IIS/Apache/nginx安装步骤:将全部文件上传至主机根目录即可QQAPI智能...
对于调用京东商城的API接口有很大帮助,省时又省力。轻松实现调用。
VB调用系统API函数---CreateToolhelp32Snapshot函数[参照].pdf
开发API接口调用管理系统网站源码2024全新接口平台多用户管理系统 api接口调用教程2024全新开发API接口调用管理系统网站源码 附教程 用layui框架写的 个人感觉很简洁 方便使用和二次开发
易语言隐藏调用系统API源码。@易语言在线学习。