hook APP 指定目标(方法)

最近遇到的加固app越来越多,很多时候不好动态调试。所以我修改了下逻辑,现在通过hook classLoader暴力枚举所有类和方法的加载,从而达到可以直接hook加固app的目的。

hook加固app的原理:

以360加固为例,首先我们看看加固app:

360加固

通常我们要hook加固的app需要先找到如上图所示的方法,拿到Context,再通过getClassLoader()来拿到壳的classLoader,然后就可以hook到加固app的函数了。

但是有个问题,如果换个app,加固的版本变了,或者用了别的加固,那这个地方又要重新找。

所以我们需要找到一个通用的方法,从而能hook所有加固的app。

我们需要这个classLoader的原因就是我们用xposed的时候经常用XposedHelper.findAndHookMethod()方法来hook我们的目标,这个方法就需要一个实际的classLoader去load目标函数。
我们查看下这个方法的源码:

会发现最终时调用了XposedBridge.hookMethod方法来hook的,所以我们也可以直接调用,传如我们的目标方法对象和一个callback就可以。
安卓引入mutiDex以后用loadClass来加载所有类。源码如下图所示:

loadclass

private void findContext() {
        XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                if (!param.hasThrowable()) {
                    try {
                        String strClazz = param.args[0].toString();
                        if (!strClazz.startsWith("android.")) {
                            Class<?> clazz = (Class<?>) param.getResult();
                            synchronized (this.getClass()) {
                                strClassName = strClazz;
                                // 获取被hook的目标类的名称
                                if (strClazz.equals(className)) { //这个className是事先在界面上填写的需要hook的类名
                                    Log.d(TAG, "loadClass: " + strClazz);
                                    Method[] methods = clazz.getDeclaredMethods();
                                    // 遍历类的所有方法
                                    if (methods.length > 0) {
                                        for (Method method : methods) {
                                            if (method.getName().equals(methodName)) {//methodName是事先在界面上填写的需要hook的方法名
                                                hook(method);
                                            }
                                        }
                                    }
                                }
                            }
                        }
 
                    } catch (Exception e) {
                    }
                }
            }
        });
    }

 

所以我想到的办法是直接hook这个loadClass方法,这个方法第一个参数是类名,返回值即为一个类对象。通过param.getResult()拿到返回的类,把类名与我们需要hook的类名匹配,从而拿到需要的目标类,再拿到这个类的所有方法,同样的方法,匹配到我们需要的方法,这样就可以达到我们hook加固app的目的。

 

还是上面的360加固的app,他报文里有个签名字段,先把一堆字符拼在一起最后再加密,脱壳后简单分析了下代码,发现其中一个字段来源是g.w.b.a.d.a().r()方法。

直接填写:

界面

链接:https://share.weiyun.com/nnOKnvWm 密码:dxg5g3

小青年资源网
免责声明 做视频的初衷是为了学习交流,是想让自己在分享过程中学习到更多的东西。 所发布的视频、环境、软件、脚本、文章、资料等,都是为了 粉丝们群友们能够更好的去理解安全测试的知识点。 本人发布的视频、环境、软件、脚本、文章、资料等,都只用于学习交流安全技术,请不要用于任何非法用途, 否则后果自付。 同时欢迎各位粉丝大佬,举报用 本人发布的环境、软件、脚本、文章、资料等,做任何违法犯罪事情的人。 根据二○一三年一月三十日《计算机软件保护条例》2次修订第17条规定: 为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存 储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬! 鉴于此,也希望大家按此说明研究软件! 本站所有源码都来源于网络收集修改或者交换!如果侵犯了您的权益,请及时告知我们,我们即刻处理! 最终解释权归本视频所有。
小青年技术网 » hook APP 指定目标(方法)