xpose修改手机imei码,注入广告
何为hook
Hook英文翻译过来就是“钩子”的意思,那我们在什么时候使用这个“钩子”呢?
我们知道,在Android操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步的向下执行。而“钩子”的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子勾上事件一样。并且能够在勾上事件时,处理一些自己特定的事件。如下图所示:
Hook的这个本领,使它能够将自身的代码“融入”被勾住(Hook)的程序的进程中,成为目标进程的一个部分。我们也知道,在Android系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行彼此间都不受干扰。
这就使我们希望通过一个程序改变其他程序的某些行为的想法不能直接实现,但是Hook的出现给我们开拓了解决此类问题的道路。当然,根据Hook对象与Hook后处理的事件方式不同,Hook还分为不同的种类,如消息Hook、API Hook等。
注:上述言论来自北漂周大神http://blog.csdn.net/yzzst/article/details/47318751
主要功能就是,修改或者监听他人程序方法的返回值,这逼装的瞬间就给满分。
Xpose
https://github.com/rovo89
框架由上面三部分构成。
既然能够hook其他程序的api,相比也会修改底层代码,而Xposed主要是来修改系统的app_process,它集成在XposedInstaller中,所以只要运行XposedInstall打包的apk点击“安装/更新”就可以了。
而XposedBridge则是一个jar包,提供hook相关的api.
除了XposedInstall这个安装器,还有wsm,据说是为了兼容miui而有的,两者主要目的都差不多,具体可百度之.
安装完成之后,打开模块功能,两行绿色数字代表激活的版本号。
接下来就来看看hook的魅力,导入XposedBridgeApi-54.jar包,因为正常的compile files(‘lib/XposedBridgeApi-54.jar’)之后,运行会报错,IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation”。 故使用 provided files(‘lib/XposedBridgeApi-54.jar’)
- 新建一个类实现IXposedHookLoadPackage接口
public class Main implements IXposedHookLoadPackage{
//handleLoadPackage方法可以捕捉指定包名
@Override
public void handleLoadPackage(LoadPackageParam arg0) throws Throwable {
// TODO Auto-generated method stub
//不是指定的程序,不hook
if (!arg0.packageName.equals("com.pingplusplus.demoapp") )
return;
//打印日志在XposedInstall.apk里
XposedBridge.log("Loaded app: " + arg0.packageName);
//hook TelephonyManager类里面的getDeviceId,修改手机imei码妥妥的
XposedHelpers.findAndHookMethod(TelephonyManager.class.getName(), arg0.classLoader, "getDeviceId", new Object[] { new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("劫持结束了~");
//将返回得imei值设置为我想要的值
param.setResult("1234567890");
}
} });
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
XposedHelpers.findAndHookMethod有两个回调方法beforeHookedMethod,afterHookedMethod。一个在方法调用前回调,一个在方法调用之后回调。
- 然后需要声明程序入口,在assets新建xposed_init文件声明该类
//包名+类名
com.example.loginhook.Main
- 1
- 2
在AndroidManifest.xml声明meta-data
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="xposedmodule"
android:value="true" />
<!-- 模块描述 -->
<meta-data
android:name="xposeddescription"
android:value="模块名,在XposedInstall显示" />
<!-- 最低版本号 -->
<meta-data
android:name="xposedminversion"
android:value="30" />
</application>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
然后运行程序,在XposedInstall的模块功能可以看到新加了一个模块
勾选模块,会提示你重启手机,这样才会生效。
这样就可以修改包名为com.pingplusplus.demoapp的程序的getDeviceId()方法了,在程序中打印一下,输出的imei码是不是变了?
除了修改方法的返回值,还可以用它来广告注入。你想在哪个程序注入广告,,只需知道那个程序的包名+主activity,劫持他的onCreate方法,在这里打开另一个透明的activity,就可以实现广告了
首先定义一个AdActivity接入第三方广告
public class AdActivity extends Activity implements InterstitialAdListener{
public static String url = null;
public static byte FS_DESIRE_AD_FORM = 0;
private String LOG_TAG = "unlock";
private RelativeLayout layout;
public static TextView adCount ;
public static TextView adBeaconCount;
private InterstitialAd ad;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//全屏广告实例
ad = new InterstitialAd(this,"2b8dbd92edd74a97b3ba6b0189bef125",true,this);
// 设置全屏格式
ad.setDesireAdForm(InterstitialAd.ADWO_INTERSTITIAL);
// 设置请求广告类型 可选。
// ad.setDesireAdType((byte) 0);
// 开始请求全屏广告
ad.prepareAd();
}
@Override
public void onReceiveAd() {
Log.e(LOG_TAG, "onReceiveAd");
}
@Override
public void onLoadAdComplete() {
Log.e(LOG_TAG, "onLoadAdComplete");
// 成功完成下载后,展示广告
ad.displayAd();
}
@Override
public void onFailedToReceiveAd(ErrorCode errorCode) {
Log.e(LOG_TAG, "onFailedToReceiveAd");
}
@Override
public void onAdDismiss() {
Log.e(LOG_TAG, "onAdDismiss");
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(LOG_TAG, "onDestroy");
// 请在这里释放全屏广告资源
if (ad != null) {
ad.dismiss();
ad = null;
}
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
// 开始请求广告
Log.e(LOG_TAG, "onAttachedToWindow");
}
@Override
public void OnShow() {
// TODO Auto-generated method stub
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
实现一个action ,为了隐式调用
<!-- @android:style/Theme.Translucent.NoTitleBar -->
<activity android:name="com.example.loginhook.AdActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"//
android:hardwareAccelerated="true">
<intent-filter>
<!-- 广告的action -->
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="com.example.loginhook.action.AD" />
</intent-filter>
</activity>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
接下来实现hook,在应用宝的主页添加广告
@Override
public void handleLoadPackage(LoadPackageParam arg0) throws Throwable {
if (!arg0.packageName.equals("com.tencent.android.qqdownloader") )
return;
XposedHelpers.findAndHookMethod("com.tencent.assistantv2.activity.MainActivity", arg0.classLoader, "onCreate", new Object[]{Bundle.class,
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("onCreate" + param.method.getName());
CMD.execCommand1("am start -a com.example.loginhook.action.AD");
}
}});
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
也就是打开应用宝的时候启动一个透明的广告,看起来就像是应用宝里面的广告,感觉66的
github框架(5) 
版权声明:本文为博主原创文章,未经博主允许不得转载。
何为hook
Hook英文翻译过来就是“钩子”的意思,那我们在什么时候使用这个“钩子”呢?
我们知道,在Android操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步的向下执行。而“钩子”的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子勾上事件一样。并且能够在勾上事件时,处理一些自己特定的事件。如下图所示:
Hook的这个本领,使它能够将自身的代码“融入”被勾住(Hook)的程序的进程中,成为目标进程的一个部分。我们也知道,在Android系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行彼此间都不受干扰。
这就使我们希望通过一个程序改变其他程序的某些行为的想法不能直接实现,但是Hook的出现给我们开拓了解决此类问题的道路。当然,根据Hook对象与Hook后处理的事件方式不同,Hook还分为不同的种类,如消息Hook、API Hook等。
注:上述言论来自北漂周大神http://blog.csdn.net/yzzst/article/details/47318751
主要功能就是,修改或者监听他人程序方法的返回值,这逼装的瞬间就给满分。
Xpose
https://github.com/rovo89
框架由上面三部分构成。
既然能够hook其他程序的api,相比也会修改底层代码,而Xposed主要是来修改系统的app_process,它集成在XposedInstaller中,所以只要运行XposedInstall打包的apk点击“安装/更新”就可以了。
而XposedBridge则是一个jar包,提供hook相关的api.
除了XposedInstall这个安装器,还有wsm,据说是为了兼容miui而有的,两者主要目的都差不多,具体可百度之.
安装完成之后,打开模块功能,两行绿色数字代表激活的版本号。
接下来就来看看hook的魅力,导入XposedBridgeApi-54.jar包,因为正常的compile files(‘lib/XposedBridgeApi-54.jar’)之后,运行会报错,IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation”。 故使用 provided files(‘lib/XposedBridgeApi-54.jar’)
- 新建一个类实现IXposedHookLoadPackage接口
public class Main implements IXposedHookLoadPackage{
//handleLoadPackage方法可以捕捉指定包名
@Override
public void handleLoadPackage(LoadPackageParam arg0) throws Throwable {
// TODO Auto-generated method stub
//不是指定的程序,不hook
if (!arg0.packageName.equals("com.pingplusplus.demoapp") )
return;
//打印日志在XposedInstall.apk里
XposedBridge.log("Loaded app: " + arg0.packageName);
//hook TelephonyManager类里面的getDeviceId,修改手机imei码妥妥的
XposedHelpers.findAndHookMethod(TelephonyManager.class.getName(), arg0.classLoader, "getDeviceId", new Object[] { new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("劫持结束了~");
//将返回得imei值设置为我想要的值
param.setResult("1234567890");
}
} });
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
XposedHelpers.findAndHookMethod有两个回调方法beforeHookedMethod,afterHookedMethod。一个在方法调用前回调,一个在方法调用之后回调。
- 然后需要声明程序入口,在assets新建xposed_init文件声明该类
//包名+类名
com.example.loginhook.Main
- 1
- 2
在AndroidManifest.xml声明meta-data
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="xposedmodule"
android:value="true" />
<!-- 模块描述 -->
<meta-data
android:name="xposeddescription"
android:value="模块名,在XposedInstall显示" />
<!-- 最低版本号 -->
<meta-data
android:name="xposedminversion"
android:value="30" />
</application>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
然后运行程序,在XposedInstall的模块功能可以看到新加了一个模块
勾选模块,会提示你重启手机,这样才会生效。
这样就可以修改包名为com.pingplusplus.demoapp的程序的getDeviceId()方法了,在程序中打印一下,输出的imei码是不是变了?
除了修改方法的返回值,还可以用它来广告注入。你想在哪个程序注入广告,,只需知道那个程序的包名+主activity,劫持他的onCreate方法,在这里打开另一个透明的activity,就可以实现广告了
首先定义一个AdActivity接入第三方广告
public class AdActivity extends Activity implements InterstitialAdListener{
public static String url = null;
public static byte FS_DESIRE_AD_FORM = 0;
private String LOG_TAG = "unlock";
private RelativeLayout layout;
public static TextView adCount ;
public static TextView adBeaconCount;
private InterstitialAd ad;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//全屏广告实例
ad = new InterstitialAd(this,"2b8dbd92edd74a97b3ba6b0189bef125",true,this);
// 设置全屏格式
ad.setDesireAdForm(InterstitialAd.ADWO_INTERSTITIAL);
// 设置请求广告类型 可选。
// ad.setDesireAdType((byte) 0);
// 开始请求全屏广告
ad.prepareAd();
}
@Override
public void onReceiveAd() {
Log.e(LOG_TAG, "onReceiveAd");
}
@Override
public void onLoadAdComplete() {
Log.e(LOG_TAG, "onLoadAdComplete");
// 成功完成下载后,展示广告
ad.displayAd();
}
@Override
public void onFailedToReceiveAd(ErrorCode errorCode) {
Log.e(LOG_TAG, "onFailedToReceiveAd");
}
@Override
public void onAdDismiss() {
Log.e(LOG_TAG, "onAdDismiss");
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(LOG_TAG, "onDestroy");
// 请在这里释放全屏广告资源
if (ad != null) {
ad.dismiss();
ad = null;
}
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
// 开始请求广告
Log.e(LOG_TAG, "onAttachedToWindow");
}
@Override
public void OnShow() {
// TODO Auto-generated method stub
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
实现一个action ,为了隐式调用
<!-- @android:style/Theme.Translucent.NoTitleBar -->
<activity android:name="com.example.loginhook.AdActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"//
android:hardwareAccelerated="true">
<intent-filter>
<!-- 广告的action -->
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<action android:name="com.example.loginhook.action.AD" />
</intent-filter>
</activity>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
接下来实现hook,在应用宝的主页添加广告
@Override
public void handleLoadPackage(LoadPackageParam arg0) throws Throwable {
if (!arg0.packageName.equals("com.tencent.android.qqdownloader") )
return;
XposedHelpers.findAndHookMethod("com.tencent.assistantv2.activity.MainActivity", arg0.classLoader, "onCreate", new Object[]{Bundle.class,
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("onCreate" + param.method.getName());
CMD.execCommand1("am start -a com.example.loginhook.action.AD");
}
}});
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
也就是打开应用宝的时候启动一个透明的广告,看起来就像是应用宝里面的广告,感觉66的
xpose修改手机imei码,注入广告的更多相关文章
- IMEI手机串码和serialno
IMEI 1.IMEI是什么 国际移动设备识别码(International Mobile Equipment Identity number,IMEI),俗称“手机串号”.“手机串码”.“手机序列号 ...
- andriod sdk 安卓模拟器修改imei码,位置信息
imei码就是手机卡的信息一段15位数字,就好像pc的mac地址.很多app注册会检测你是否是手机登录的,就会读取你的imei码,如果读取不到,就说明你可能是用平板等移动设备上网的. app也可以 ...
- MTK如何烧录IMEI码(俗称串号)
先介绍一下使用环境 主控:MT6582VX android版本:4.4.2 操作系统:windows XP SN烧录工具:SN_Write_tool_exe_v2.1420.00 首先介绍一下IMEI ...
- air for android 使用ANE来获取安卓手机IMEI号
一首页创建一个ANE文件 1 使用FlashBuilder 或者Eclipse 创建一个新的android项目 A 创建文件Extension.java package com.dabing. ...
- 不修改源代码,动态注入Java代码的方法(转)
转自:https://blog.csdn.net/hiphoon_sun/article/details/38707927 有时,我们需要在不修改源代码的前提下往一个第三方的JAVA程序里注入自己的代 ...
- 利用websocket实现手机扫码登陆后,同步登陆信息到web端页面
新手必看 广播系统 事件系统 准备工作 初始化项目 引入 laravel-websockets 软件包 启动 websocket 监听 主要流程 创建两个页面 建立 socket 连接 手机端扫码登陆 ...
- iOS修改手机定位(非越狱任意位置)
利用开发者的一些调试功能,我们可以修改非越狱的苹果手机定位,模拟任意位置. 经测试,此方法仅限开发者调试使用,并不能长时间修改手机定位. 1. 首先需要了解一些坐标系的知识 iOS,原生坐标系为 WG ...
- 获取手机IMEI 号和 IP
没什么可说的,直接上代码: public class PhoneStateCodeUtils { /** * 获取手机imei串号 */ public static String getImei(Co ...
- 修改FFMpeg源码—捕获丢包
概述 最近我们项目有一个需求就是解决客户端播放RTSP视频流花屏的问题,一般来说丢包就会引起花屏,导致客户端花屏的因素又有很多,比如说: 相机到服务器丢包 服务器到客户端丢包 等等... 其中服务器到 ...
随机推荐
- Ajax在Django中的应用
一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传 ...
- toString()方法简单分析
问题描述 今天在使用spotbugs代码走查时发现这样一个问题,如下, String[] myArray=new String[] {"1","2"," ...
- Nginx快速入门
本文主要介绍nginx的基本配置和操作,并介绍了一些可以完成的简单任务. 假设您已经学习过并已经安装好了nginx服务器. 如果没有,请参阅安装nginx页面(http://www.yiibai.co ...
- Debian 9 + Windows 10 双系统安装体验
很久之前就想在自己的电脑上也装个 Debian 玩玩了,最近正好有时间折腾,就踩了踩坑在笔记本上装了玩玩~ UEFI + GPT 解决启动相关的麻烦配置 如果在支持 UEFI 的电脑上安装 Debia ...
- 联邦快递 IE和IP的区别 Fedex IE VS Fedex IP
什么是FedEx IP? FedEx IP指的是联邦快递优先服务,时效比较快些,相对来说价格也比普通的高一些. 什么是FedEx IE? FedEx IE指的是联邦快递经济服务,时效与FedEx IP ...
- Alpha发布_文案+美工
团队名称:探路者 1蔺依铭:http://www.cnblogs.com/linym762/ 2张恩聚:http://www.cnblogs.com/zej87/ 3米赫:http://www.cnb ...
- lintcode-202-线段树的查询
202-线段树的查询 对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值. 为Se ...
- Spring源码解析 – AnnotationConfigApplicationContext容器创建过程
Spring在BeanFactory基础上提供了一些列具体容器的实现,其中AnnotationConfigApplicationContext是一个用来管理注解bean的容器,从AnnotationC ...
- 2nd 本周例行报告
每周例行报告 1.个人项目:词频统计更新 C类型 C内容 S开始时间 E结束时间 I间隔(min) T净时间(min) 分析 功能分析 8:30 10:00 20 70 学习 查阅资料 10:00 1 ...
- PAT 甲级 1005 Spell It Right
https://pintia.cn/problem-sets/994805342720868352/problems/994805519074574336 Given a non-negative i ...