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

查看 117|回复 10
作者:klxn0-0   


9502d04fe683e2e0775f0eea93924366.gif (996 KB, 下载次数: 0)
下载附件
2023-2-19 20:48 上传

一、课程目标
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() {  
        home.php?mod=space&uid=1892347  
        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
    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
    点击事件监听:
    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


    dnplayer_qUCN2yUJlq.png (67.76 KB, 下载次数: 0)
    下载附件
    2023-2-19 20:47 上传

    PS:最低支持安卓9
    Xposed快速Hook
    SimpleHook


    QQ_knFUZCInga.png (119.39 KB, 下载次数: 0)
    下载附件
    2023-2-19 20:47 上传

    jshook
    Xpsoed源码
    XPOSED魔改一:获取特征
    Lsposed 技术原理探讨 && 基本安装使用
    [原创]源码编译(2)——Xopsed源码编译详解
    四、课后小作业
    让我想想
    五、答疑
    提一嘴,我感觉肯定会有人问我的as怎么跟他的不一样,那是因为我用了一些插件。插件入口:左上角File->Settings->Plugins,在这里可以搜索并安装你想安装的插件,以下是我用的插件


    Carnac汉化版_idTud4rn99.png (85.28 KB, 下载次数: 0)
    下载附件
    2023-2-19 20:47 上传



    Carnac汉化版_EZcNo1ldtJ.png (77.57 KB, 下载次数: 1)
    下载附件
    2023-2-19 20:47 上传

    六、视频及课件地址
    百度云
    阿里云
    哔哩哔哩
    PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压
    七、其他章节
    《安卓逆向这档事》一、模拟器环境搭建
    《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改
    《安卓逆向这档事》三、初识smail,vip终结者
    《安卓逆向这档事》四、恭喜你获得广告&弹窗静默卡
    《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩
    《安卓逆向这档事》六、校验的N次方-签名校验对抗、PM代{过}{滤}理、IO重定向
    《安卓逆向这档事》七、Sorry,会Hook真的可以为所欲为-Xposed快速上手(上)模块编写,常用Api

    变量, 方法

  • klxn0-0
    OP
      

    我遇到过有的app会延迟加载(动态加载?multiDex?不懂安卓)一些类,这些好像用xposed的findClass找不到,例如穿山甲的广告,这时可以loadClass暴力搜索来hook
    参考代码
    easyHook,一个直接指定hook目标,无需重新写xposed代码重新启动的工具,支持加固app
    https://www.52pojie.cn/thread-1408286-1-1.html
    (出处: 吾爱破解论坛)
    yuanyxh   

    老师老师,hook对被加固的应用有效吗(假定需要hook的方法脱壳后可以找到,壳子有np管理器绕不过去的签名校验,但不检测root或xposed框架)
    另:把虚拟机和模拟器用【桥接模式】放到和电脑相同的ip段应该就能直接连上了,要是用NAT想连接确实很麻烦
    hasoe   

    simplehook闪亮登场
    潋天堂   


    侃遍天下无二人 发表于 2023-2-19 20:56
    老师老师,hook对被加固的应用有效吗(假定需要hook的方法脱壳后可以找到,壳子有np管理器绕不过去的签名校 ...

    有效啊,上节课那个加固通杀,免费版基本都能hook
    zhr19970910   


    klxn0-0 发表于 2023-2-19 20:57
    simplehook闪亮登场

    大佬就是隔壁np的快乐小牛吧
    zhr19970910   


    侃遍天下无二人 发表于 2023-2-19 20:59
    大佬就是隔壁np的快乐小牛吧

    不是大佬楼主才是
    klxn0-0
    OP
      

    三百集之时,便是我攻破tx服务器之日
    klxn0-0
    OP
      

    支持一下 好教材
    yuanyxh   

    正己大佬,什么都不懂能学会不
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部