服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

吾爱破解安卓逆向入门教程《安卓逆向这档事》八、Sorry,会Hook真的可以为所欲为-xposed快速上手(下)快速hook

日期: 来源:吾爱破解论坛收集编辑:吾爱pojie

作者坛账号:正己


一、课程目标


1.了解Xposed常用API
2.借助lspatch实现免root注入
3.SimpleHook快速hook

二、工具


1.教程Demo(更新)
2.MT管理器/NP管理器
3.算法助手
4.jadx-gui
5.simplehook
6.Android Studio

三、课程内容


虚拟机连接模拟器方法
https://www.cnblogs.com/voyage1969/p/14876449.html

Xposed常用API

1.Hook变量

静态变量与实例变量:

  • 静态变量(static):类被初始化,同步进行初始化

  • 非静态变量:类被实例化(产生一个对象的时候),进行初始化

静态变量

 复制代码 隐藏代码
final Class clazz = XposedHelpers.findClass("类名", classLoader);  
XposedHelpers.setStaticIntField(clazz, "变量名", 999);

实例变量

 复制代码 隐藏代码
final Class clazz = XposedHelpers.findClass("类名", classLoader);  
XposedBridge.hookAllConstructors(clazz, new XC_MethodHook() {  
     @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {  
        super.afterHookedMethod(param);  
        //param.thisObject获取当前所属的对象
        Object ob = param.thisObject;  
        XposedHelpers.setIntField(ob,"变量名",9999);  
    }  
});

2.Hook构造函数

无参构造函数

 复制代码 隐藏代码
XposedHelpers.findAndHookConstructor("com.zj.wuaipojie.Demo", classLoader, new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
    }
    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
    }
});

有参构造函数

 复制代码 隐藏代码
XposedHelpers.findAndHookConstructor("com.zj.wuaipojie.Demo", classLoader, String.class, new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
    }
    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
    }
});

3.Hook multiDex方法

 复制代码 隐藏代码
XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {  
    @Override  
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {  
        ClassLoader cl= ((Context)param.args[0]).getClassLoader();  
        Class<?> hookclass=null;  
        try {  
            hookclass=cl.loadClass("类名");  
        }catch (Exception e){  
            Log.e("zj2595","未找到类",e);  
            return;        
        }  
        XposedHelpers.findAndHookMethod(hookclass, "方法名", new XC_MethodHook() {  
            @Override  
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {  
            }        
        });  
    }  
});

4.主动调用

静态方法:

 复制代码 隐藏代码
Class clazz = XposedHelpers.findClass("类名",lpparam.classLoader);
XposedHelpers.callStaticMethod(clazz,"方法名",参数(非必须));

实例方法:

 复制代码 隐藏代码
Class clazz = XposedHelpers.findClass("类名",lpparam.classLoader);
XposedHelpers.callMethod(clazz.newInstance(),"方法名",参数(非必须));

5.Hook内部类

内部类:类里还有一个类class

 复制代码 隐藏代码
XposedHelpers.findAndHookMethod("com.zj.wuaipojie.Demo$InnerClass", lpparam.classLoader, "innerFunc",String.class,  new XC_MethodHook() {  
    @Override  
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {  
        super.beforeHookedMethod(param);  

    }  
});

6.反射大法

 复制代码 隐藏代码
Class clazz = XposedHelpers.findClass("com.zj.wuaipojie.Demo", lpparam.classLoader);
XposedHelpers.findAndHookMethod("com.zj.wuaipojie.Demo$InnerClass", lpparam.classLoader, "innerFunc",String.class,  new XC_MethodHook() {  
    @Override  
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {  
        super.beforeHookedMethod(param);  
        //第一步找到类
        //找到方法,如果是私有方法就要setAccessible设置访问权限
        //invoke主动调用或者set修改值(变量)
        Class democlass = Class.forName("com.zj.wuaipojie.Demo",false,lpparam.classLoader);  
        Method demomethod = democlass.getDeclaredMethod("refl");  
        demomethod.setAccessible(true);  
        demomethod.invoke(clazz.newInstance());  
    }  
});

7.遍历所有类下的所有方法

 复制代码 隐藏代码
XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {  
    @Override  
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {  
        super.afterHookedMethod(param);  
        Class clazz = (Class) param.getResult();  
        String clazzName = clazz.getName();  
        //排除非包名的类  
        if(clazzName.contains("com.zj.wuaipojie")){  
            Method[] mds = clazz.getDeclaredMethods();  
            for(int i =0;i<mds.length;i++){  
                final Method md = mds[i];  
                int mod = mds[i].getModifiers();  
                //去除抽象、native、接口方法  
                if(!Modifier.isAbstract(mod)  
                    && !Modifier.isNative(mod)  
                    &&!Modifier.isAbstract(mod)){  
                    XposedBridge.hookMethod(mds[i], new XC_MethodHook() {  
                        @Override  
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {  
                            super.beforeHookedMethod(param);  
                            Log.d("zj2595",md.toString());  
                        }  
                    });  
                }  

           }  
        }  

    }  
});

8.Xposed妙用

字符串赋值定位:

 复制代码 隐藏代码
XposedHelpers.findAndHookMethod("android.widget.TextView", lpparam.classLoader, "setText", CharSequence.class, new XC_MethodHook() {  
    @Override  
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {  
        super.beforeHookedMethod(param);  
        Log.d("zj2595",param.args[0].toString());  
                if(param.args[0].equals("已过期")){  
                    printStackTrace();  
                }
    }  
});
private static void printStackTrace() {  
    Throwable ex = new Throwable();  
    StackTraceElement[] stackElements = ex.getStackTrace();  
    for (int i = 0; i < stackElements.length; i++) {  
        StackTraceElement element = stackElements[i];  
        Log.d("zj2595","at " + element.getClassName() + "." + element.getMethodName() + "(" + element.getFileName() + ":" + element.getLineNumber() + ")");  
    }  
}

点击事件监听:

 复制代码 隐藏代码
Class clazz = XposedHelpers.findClass("android.view.View", lpparam.classLoader);
XposedBridge.hookAllMethods(clazz, "performClick", new XC_MethodHook() {  
    @Override  
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {  
        super.afterHookedMethod(param);  
        Object listenerInfoObject = XposedHelpers.getObjectField(param.thisObject, "mListenerInfo");  
        Object mOnClickListenerObject = XposedHelpers.getObjectField(listenerInfoObject, "mOnClickListener");  
        String callbackType = mOnClickListenerObject.getClass().getName();  
        Log.d("zj2595",callbackType);  
    }  
});

改写布局:

 复制代码 隐藏代码
XposedHelpers.findAndHookMethod("com.zj.wuaipojie.ui.ChallengeSixth", lpparam.classLoader,  
        "onCreate", Bundle.class, new XC_MethodHook() {  
    @Override  
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {  
        super.afterHookedMethod(param);  
        View img = (View)XposedHelpers.callMethod(param.thisObject,  
                "findViewById", 0x7f0800de);  
        img.setVisibility(View.GONE);  

    }  
});

Xposed模块patch

LSPatch:https://github.com/LSPosed/LSPatch


PS:最低支持安卓9


Xposed快速Hook

SimpleHook:https://github.com/littleWhiteDuck/SimpleHook


jshook:https://github.com/Xposed-Modules-Repo/me.jsonet.jshook


Xpsoed源码

XPOSED魔改一:获取特征
Lsposed 技术原理探讨 && 基本安装使用
[原创]源码编译(2)——Xopsed源码编译详解

四、课后小作业


让我想想

五、答疑


提一嘴,我感觉肯定会有人问我的as怎么跟他的不一样,那是因为我用了一些插件。插件入口:左上角File->Settings->Plugins,在这里可以搜索并安装你想安装的插件,以下是我用的插件


六、视频及课件地址



百度云:

https://pan.baidu.com/s/1cFWTLn14jeWfpXxlx3syYw?pwd=nqu9

阿里云PS:

https://www.aliyundrive.com/s/TJoKMK6du6x

哔哩哔哩:

https://www.bilibili.com/video/BV1X24y1m7cj

PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压

七、其他章节


《安卓逆向这档事》一、模拟器环境搭建
《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改
《安卓逆向这档事》三、初识smail,vip终结者
《安卓逆向这档事》四、恭喜你获得广告&弹窗静默卡
《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩
《安卓逆向这档事》六、校验的N次方-签名校验对抗、PM代{过}{滤}理、IO重定向
《安卓逆向这档事》七、Sorry,会Hook真的可以为所欲为-Xposed快速上手(上)模块编写,常用Api


详细文字介绍、视频原件下载、视频所用到的程序下载、课后作业和学习交流参看论坛原文:

https://www.52pojie.cn/thread-1748081-1-1.html


点击左下角阅读原文,进入 B站 线观看视频教程,欢迎点赞、投币、收藏、转发~


-官方论坛

www.52pojie.cn


--推荐给朋友

公众微信号:吾爱破解论坛

或搜微信号:pojie_52

相关阅读

  • 40岁程序员谈修bug的心态问题

  • 【CSDN 编者按】于程序员而言,如果说写代码是一种能力的体现,那么解决问题的能力也同等重要,排查问题的能力或许能决定你的职业生涯走的有多远。因此,常有人戏言,程序员不是写代
  • ChatGPT在信息安全攻击与防御的实践

  • ‍‍‍01背景介绍‍‍‍‍ChatGPT是OpenAI开发的一个大型预训练语言模型。它是GPT-3模型的变体,GPT-3经过训练,可以在对话中生成类似人类的文本响应。ChatGPT 旨在用作聊天机
  • 【设计模式】面试中被问的最频繁的「策略模式」

  • 模拟面试、简历指导可私信找我,最低的价格收获最高的指导~前言大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。什么是设计模式?为
  • 华云安漏洞安全周报【第121期】

  • 根据国家信息安全漏洞库(CNNVD)统计,本周(2023.02.06~2023.02.12)CNNVD接报漏洞313个,其中信息技术产品漏洞(通用型漏洞)227个,网络信息系统漏洞(事件型漏洞)86个,CNNVD接报漏洞预警113
  • fastjson2为什么这么快?

  • 阿里妹导读本文作者从以下三个方面讲述了fastjson2 使用了哪些核心技术来提升速度。1、用「Lambda 生成函数映射」代替「高频的反射操作」2、对 String 做零拷贝优化3、常见
  • 工作一年,我重新理解了《重构》

  • 阿里妹导读把《重构:改善既有代码的设计》这本书推荐给已经接触了工程代码、工作一年左右的新同学,相信有了一定的经验积累,再结合日常项目实践中遇到的问题,对这本书的内容会有

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 【Android 原创】一个懒人的破解方式

  • 作者论坛账号:低调(d-iao)何为懒?对于我来说 基本上一个版本如果好好的 我会用到烂为止都不会去更新。再则只要不影响使用 我不会去优化到极致,除非我走心了。所以今天的教学
  • 3月3日全国爱耳日:这份爱耳指南请收好

  • 今年3月3日是第二十四次全国爱耳日,主题为“科学爱耳护耳,实现主动健康”。针对公众关心的耳朵那些事儿,昆明医科大学第一附属医院(以下简称“昆医大附一院”)耳咽喉一科副主任医
  • 【公告】感动吾爱2022优秀会员名单公布

  • 活动详情【活动】感动吾爱2022优秀会员评选活动(总方案)‍https://www.52pojie.cn/thread-1742850-1-1.html‍【会员推荐】感动吾爱2022优秀会员推荐贴(2023.2.7~2023.2.14)ht