吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 18516|回复: 111
上一主题 下一主题
收起左侧

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

    [复制链接]
跳转到指定楼层
楼主
正己 发表于 2023-2-19 20:51 回帖奖励
本帖最后由 正己 于 2023-10-10 18:50 编辑





一、课程目标


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


PS:最低支持安卓9

Xposed快速Hook

SimpleHook


jshook

Xpsoed源码

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

四、课后小作业


让我想想

五、答疑


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

六、视频及课件地址


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

七、其他章节


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

免费评分

参与人数 64威望 +1 吾爱币 +93 热心值 +59 收起 理由
RMLin + 1 + 1 我很赞同!
niceqiezi + 1 + 1 热心回复!
HunterVv + 1 + 1 热心回复!
breezehan + 1 + 1 我很赞同!
ywx1987 + 1 + 1 谢谢@Thanks!
junjia215 + 1 + 1 用心讨论,共获提升!
wHoRU + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yejiejay + 1 我很赞同!
kolpo + 1 + 1 用心讨论,共获提升!
JCLees + 1 + 1 厉害
timer9527 + 1 + 1 谢谢@Thanks!
Intro + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
peninsula + 1 + 1 谢谢@Thanks!
jacktvt + 1 + 1 谢谢@Thanks!
cub1c2 + 1 + 1 谢谢@Thanks!
WZYang + 1 + 1 我很赞同!
Darkn1gh2 + 1 + 1 热心回复!
GenW + 4 + 1 用心讨论,共获提升!
liu13 + 1 + 1 谢谢@Thanks!
52PoJie20221111 + 1 + 1 谢谢@Thanks!
2016976438 + 1 + 1 谢谢@Thanks!
lwq123a + 1 + 1 用心讨论,共获提升!
linllz + 1 我很赞同!
weixu + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Golive180 + 1 + 1 谢谢@Thanks!
、神通广大 + 1 + 1 我很赞同!
zlnxlzht + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
kentish + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
LinkNow171 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhczf + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
维多利加 + 1 + 1 热心回复!
wu767877218 + 1 + 1 谢谢@Thanks!
weikechi626 + 1 + 1 用心讨论,共获提升!
zhangxu888 + 1 + 1 用心讨论,共获提升!
Doubts + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
liqualife001 + 1 + 1 谢谢@Thanks!
低调(d-iao) + 3 + 1 我很赞同!
shujukr + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
aaazws + 1 + 1 我很赞同!
rjlly + 2 + 1 用心讨论,共获提升!
xiaomin86 + 2 + 1 热心回复!
root000001 + 1 + 1 热心回复!
wangyftr + 1 + 1 我很赞同!
debug_cat + 1 + 1 用心讨论,共获提升!
Schwarz + 1 + 1 谢谢@Thanks!
vaycore + 1 + 1 谢谢@Thanks!
Promisess + 1 我很赞同!
牧尘凉凉 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wangdanq + 1 + 1 谢谢@Thanks!
From52pojie + 1 + 1 用心讨论,共获提升!
xmrrrrr + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
chinablank + 1 + 1 谢谢@Thanks!
yang10560 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Huibq120 + 1 + 1 谢谢@Thanks!
Chenda1 + 1 + 1 谢谢@Thanks!
littleWhiteDuck + 1 + 1 谢谢@Thanks!
Tonyha7 + 1 + 1 我很赞同!
MFC + 1 + 1 谢谢@Thanks!
chyuyuguo2004 + 1 + 1 热心回复!
plasd + 1 + 1 谢谢@Thanks!
zuiai125520 + 2 + 1 热心回复!
小骚 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yuanyxh + 1 + 1 热心回复!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

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

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
xiaomin86 + 2 + 1 热心回复!

查看全部评分

推荐
 楼主| 正己 发表于 2024-1-2 12:22 |楼主
niceqiezi 发表于 2024-1-1 20:43
我的学习之路在第六集遇到了困境,怎么都抓不到日志,OK,跳过
又死于第七集的硬件环境,看完了但是不太懂 ...

xposed需要学一下,可以哔哩哔哩搜一下android studio的安装配置,就可以跳过硬件环境,跟着开发就行
沙发
侃遍天下无二人 发表于 2023-2-19 20:56
本帖最后由 侃遍天下无二人 于 2023-2-19 20:59 编辑

老师老师,hook对被加固的应用有效吗(假定需要hook的方法脱壳后可以找到,壳子有np管理器绕不过去的签名校验,但不检测root或xposed框架)

另:把虚拟机和模拟器用【桥接模式】放到和电脑相同的ip段应该就能直接连上了,要是用NAT想连接确实很麻烦

点评

有效啊,上节课那个加固通杀,免费版基本都能hook  详情 回复 发表于 2023-2-19 20:59
3#
klxn0-0 发表于 2023-2-19 20:57
simplehook闪亮登场

点评

大佬就是隔壁np的快乐小牛吧  详情 回复 发表于 2023-2-19 20:59
5#
侃遍天下无二人 发表于 2023-2-19 20:59
klxn0-0 发表于 2023-2-19 20:57
simplehook闪亮登场

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

不是大佬楼主才是
7#
yuanyxh 发表于 2023-2-19 21:20
三百集之时,便是我攻破tx服务器之日

点评

简大仙现在就可以把tx服务器攻破了  详情 回复 发表于 2023-2-19 22:01
8#
hasoe 发表于 2023-2-19 21:21
支持一下 好教材
9#
潋天堂 发表于 2023-2-19 21:27
正己大佬,什么都不懂能学会不

点评

建议从第一课开始,有志者事竟成  详情 回复 发表于 2023-2-19 22:01
10#
zhr19970910 发表于 2023-2-19 21:33
感谢大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 15:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表