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视频流花屏的问题,一般来说丢包就会引起花屏,导致客户端花屏的因素又有很多,比如说: 相机到服务器丢包 服务器到客户端丢包 等等... 其中服务器到 ...
随机推荐
- 深入解析QML引擎, 第3部分: 绑定类型
原文 QML Engine Internals, Part 3: Binding Types 译者注:这个解析QML引擎的文章共4篇,分析非常透彻,在国内几乎没有找到类似的分析,为了便于国内的QT/Q ...
- 查看Linux系统版本的命令
1.lsb_release -a,即可列出所有版本信息: [root@S-CentOS ~]# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0 ...
- php实现图形计算器
存档: index.php <html> <head> <title>图形计算器开发</title> <meta http-equiv=" ...
- 强化学习读书笔记 - 11 - off-policy的近似方法
强化学习读书笔记 - 11 - off-policy的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and ...
- python-property、__get__、__set__
目录 property __set__ 和 __get__ property property装饰器的应用来自这样一个问题:如果对实例的属性值不加以限制,那么实例的属性值会出现明显不合理的情况,为了解 ...
- 技本功丨用短平快的方式告诉你:Flink-SQL的扩展实现
2019年1月28日,阿里云宣布开源“计算王牌”实时计算平台Blink回馈给ApacheFlink社区.官方称,计算延迟已经降到毫秒级,也就是你在浏览网页的时候,眨了一下眼睛,淘宝.天猫处理的信息已经 ...
- SPP-net论文总结
SPPNet方法来自<Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition> ,是大神 ...
- access数据库频繁读取操作会出现 System.Data.OleDb.OleDbException 的异常解决
asp.net access数据库 本来想着打开一个access数据库连接后,不关闭,下次操作数据了,直接拿来用,谁知道连着测试64次后(大概这么多次),就会出现System.Data.OleDb.O ...
- Requests库入门——应用实例-网络图片的爬取与保存(好看的小姐姐≧▽≦)
在B站学习这一节的时候,弹幕最为激烈,不管大家是出于什么目的都想体验一下网络爬虫爬取图片的魅力,毕竟之前的实例实话说都是一些没有太大作用的信息. 好了,直接上代码: import requests i ...
- java 抽象类&接口
1,抽象类中有构造函数吗? 有,用于给子类对象进行初始化. 2,抽象关键字不可以和那些关键字共存? private 不行 static 不行 final 不行 final关键字: 1,fina ...