首页
社区
课程
招聘
[原创]安卓Hook函数的复杂参数如何给定?
发表于: 2017-1-5 14:39 25096

[原创]安卓Hook函数的复杂参数如何给定?

2017-1-5 14:39
25096
  <application>
  <meta-data android:name="xposedmodule" android:value="true"/>
  <meta-data android:name="xposeddescription" android:value="这里填写模块说明信息"/>
  <meta-data android:name="xposedminversion" android:value="30"/> 
  </application>
package aqcxbom.myxposed;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
/**
 * Created by AqCxBoM on 2016/12/24.
 */
//实现该类方法的类在注册为Xposed插件后会被框架自动调用
public class XposedMain implements IXposedHookLoadPackage 
{
    public String TAG = "AqCxBoM" ;
    private final String mStrPackageName = "aqcxbom.xposedhooktarget"; //HOOK APP目标的包名
    private final String mStrClassPath = "aqcxbom.xposedhooktarget.MyClass"; //HOOK 目标类全路径
    private final String helloworld = "helloWorld"; //HOOK 目标函数名
    private void LOGI(String ct){ Log.d(TAG, ct); }

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
        //对比此时加载的包名是否与目标包名一致
        if (loadPackageParam.packageName.equals(mStrPackageName)) {
            LOGI("found target: " + loadPackageParam.packageName); 
// findAndHookMethod方法用于查找匹配HOOK的函数方法,这里参数为HOOK的目标信息
            XposedHelpers.findAndHookMethod(mStrClassPath, //类全路径
loadPackageParam.classLoader, //ClassLoader
helloworld, //HOOK目标函数名
                    int.class, //参数1类型
                    String.class, //参数2类型(这里目标函数有多少个参数就多少个,与HOOK目标函数保持一致)
                    new XC_MethodHook() { //最后一个参数为一个回调CALLBACK
                        @Override //故名思意,这个函数会在目标函数被调用前被调用
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            super.beforeHookedMethod(param);
                            LOGI("beforeHook");
                        }
                        @Override//这个函数会在目标函数被调用后被调用
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);
                            LOGI("afterHooke param: ");
                        }
                    });
        }
    }
}
aqcxbom.myxposed.XposedMain

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (40)
雪    币: 52
活跃值: (31)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
谢谢楼主,好方法
2017-1-5 19:27
0
雪    币: 63
活跃值: (324)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
能帮上忙就好
2017-1-5 19:47
0
雪    币: 81
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
太感谢楼主了。不过我还想问一个问题,就是如果一个app有多个包,而我们要hook的函数不在标识这个app的主包里,而是在了另一个包里,那要怎么办呢?比如主包是com.mainpack 而我们的函数在包com.otherpack里.如果我们直接hook com.otherpack会提示找不到这个包~~~求教~~~
2017-1-5 21:51
0
雪    币: 76
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持原创  多出些这方面的教程
2017-1-6 09:39
0
雪    币: 63
活跃值: (324)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
不能很清晰地了解你所说的情况,就字面理解来说,你的APP不管多少包,只要在同一个APP的ClassLoader中加载的都能被找到,除非你自己调用动态去加载的JAR包可能会出现这个问题,如果是后面这种情况,目前我也还没有好的方法来解决,只能请万能的坛友指点一二了
2017-1-6 09:43
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
7
xposed的参数还是好给的,但是底层hook的就难给了。曾经在底层传参数我还用了ffi来做~
2017-1-8 12:23
0
雪    币: 102
活跃值: (2050)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
顶,mark
2017-1-8 17:52
0
雪    币: 457
活跃值: (328)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢楼主的分享。
2017-1-8 18:22
0
雪    币: 6
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
写得很不错
2017-1-8 18:26
0
雪    币: 63
活跃值: (324)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
底层传参?不明白
2017-1-9 00:21
0
雪    币: 63
活跃值: (324)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
谢谢捧场!!!
2017-1-9 00:22
0
雪    币: 268
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享~!
2017-1-9 04:09
0
雪    币: 144
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
真是好巧哦,最近我也在研究这东西
2017-1-9 09:18
0
雪    币: 63
活跃值: (324)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
2017-1-9 14:17
0
雪    币: 63
活跃值: (324)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16

共勉之
2017-1-9 14:20
0
雪    币: 3
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
我的妈啊为什么看雪总是把怎么用hook框架的文章标记为优秀啊,我想不明白啊,这些框架不是很久很久网上就有文章了吗~~~弄过来弄过去hook和注入没完没了了!!!!人家写的分析框架原理的文章都没有优秀,这些怎么使用居然也是优秀我醉了!!!晕啊!!!!!!!!!!我明白了看雪的文章不是已技术高低来评定优秀和精品,而是看是否对大多数人有用,如果这样那我写一篇hello world是不是也是优秀呢,我不明白管理怎么想的,我想吐槽,我爱看雪希望他会更好,而不是更水!!!!!!!!!!!
2017-1-11 18:23
0
雪    币: 47
活跃值: (418)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
18
+1,同意你的看法
2017-1-12 09:57
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
mark
2017-1-13 14:10
0
雪    币: 63
活跃值: (324)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
你的观点我个人保留意见,回复这个我只对看雪论坛的精神表达下自我的看法:
1.这些框架出来很久,甚至有人都已经用烂了这都不是个事,但据我个人从刚开始接触框架HOOK到小有心得的网上资料查找过程却告诉我,那些网上烂大街的使用要么示例灰常简单、更多的是示例代码只有片断而不全,更重要的是在框架使用过程中的坑并没有完全为小白点开,我个人为此断续花了不小于一个星期的时间才弄明白。(当然大部分原因是我太愚笨了)
2.对于你“看雪的文章不是已技术高低来评定优.."的说法,首先我觉得看雪论坛的精神是知识的共通有无,强调的是共享精神,一个文章的好坏除了内容的深度外还得讲究一个广度,我同意那些分析框架原理的大牛作者们的水平,看这些文章可以对其实现原理有很大的帮助,但往深处想,假设我连基本的使用方法都没有掌握,那看这些文章又有何用?世面上又何必有那么多”xx从浅入深“?

最后我在这里声明一下,该文章只是一个小白对于这个框架总结的使用心得,如我在文章开头写的“确实没有技术含量”!,纯属一种经验的总结,贴这也只是为了给广大跟我一样的入门级的Androider们一点指引性的总结,管理们能给个优秀是我的肯定,也是我的荣幸,我想信每个管理心中都有一把属于自己的尺子来丈量人生。至于像您这样的大牛们请直接忽视我吧,实在不行的请砖头轻拍,感谢!
2017-1-17 09:56
1
雪    币: 3
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
首先我表示我不是大神,别黑我,其次我想说不是写详细的东西不可以,而是写详细的东西是优秀是不行了,而且是这种没有技术含量的东西,如果是网上没说清楚的东西说清楚就可以优秀的话,那么你写个教人怎么用使用迅雷下载东西(目前网上没有怎么教人详细使用迅雷下载文件的帖子),写的详细,是不是也应该给你一个优秀啊?看雪在我的心中是技术的象征,而不是水贴的集合体
2017-1-17 21:00
0
雪    币: 63
活跃值: (324)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
如我前面回复你的一样,每个管理有自己的行事评判标准,对于这个我们没有必要纠结于此。
另外如你所言,如果大部分网友都不会用迅雷下载,而你又能写出通俗而令大众都能为之受益的入门使用文章我认为管理会给予正面的肯定,当然前提是你得发布到内容合适的平台上去,只不过你假设的这个前提是不是太过于偏激?
看雪依然还是技术的象征而不是你所说的水贴集合。
2017-1-19 09:41
0
雪    币: 393
活跃值: (224)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
23
哦,厉害厉害。
一个没分享东西的人喷人家分享的知识浅,学习了,膜拜
2017-1-26 15:59
0
雪    币: 3
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
confused:他这些东西算是分享?需要我教你怎么用百度和谷歌吗
2017-2-4 09:29
0
雪    币: 393
活跃值: (224)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
25
那你就百度谷歌也分享下呗 呵呵
2017-2-5 12:42
0
游客
登录 | 注册 方可回帖
返回
//