吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14832|回复: 81
收起左侧

[原创工具] easyHook,一个直接指定hook目标,无需重新写xposed代码重新启动的工具,支持加固app

    [复制链接]
zldtb19931116 发表于 2021-4-2 11:46
本帖最后由 zldtb19931116 于 2021-5-25 14:27 编辑

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

hook加固app的原理:

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

360加固

360加固


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

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

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

我们需要这个classLoader的原因就是我们用xposed的时候经常用XposedHelper.findAndHookMethod()方法来hook我们的目标,这个方法就需要一个实际的classLoader去load目标函数。
我们查看下这个方法的源码:
image.png
会发现最终时调用了XposedBridge.hookMethod方法来hook的,所以我们也可以直接调用,传如我们的目标方法对象和一个callback就可以。
安卓引入mutiDex以后用loadClass来加载所有类。源码如下图所示:

loadclass

loadclass


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


[Java] 纯文本查看 复制代码
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) {
                    }
                }
            }
        });
    }


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

直接填写:

界面

界面


然后打开app登录,即可看到成功打印了参数。由于是一个void方法,返回值为null。

效果图

效果图


经测试,360,腾讯,爱加密,梆梆的壳是可以hook。别的壳暂未测试,不过按理来说没啥问题。

最新成品:
easyHook 2.0.apk.zip (2.02 MB, 下载次数: 803)

源代码已开源更新,也可按照需求自行修改编译
https://github.com/safeYYY/easyHook

原文:
由于最近经常逆向android apk,很多时候没有动态调试的条件,于是xposed就成了我最常用的debug工具,遇到可疑的地方直接hook一下参数和返回值看是不是我要破解的地方。
这个方法确实很方便,但也有个问题,每次都要重新写xposed模块,然后安装,重启,太浪费时间,于是就想到了做一个可视化工具,直接把要hook的包名、类名、方法名填进去,就不需要每次都重新写代码打包安装重启了。
于是就有了这个想法,写了个简易小工具。此工具依赖xposed框架。

为了方便,我加入了悬浮窗,实时显示hook的结果,
例如,我自己写的一个app里有个test方法:

test方法

test方法

直接在小工具里填写对应的包名、类名、方法名,选择对应的参数类型(此处为了方便我列出了常用的基础参数类型,如果时其他类型或者自定义对象类型,直接填如完整的类名即可,例如“java.util.LinkedHashMap”)

主界面

主界面

填写完后,点击保存,并打开悬浮窗,运行我的app,效果如下:

hook结果

hook结果

确实hook到了我想要的东西。
为了确保可用性,我找了个某灵魂聊天软件实测。
这个软件默认用抓包工具抓包,是无法正常通信的,因为使用了双向证书校验,也就是客户端内藏了张证书。

抓包失败

抓包失败

详情见我的另一个帖子。
https://www.52pojie.cn/thread-1408337-1-1.html
这时候就要找客户端证书以及证书密码了,证书很好找,但是证书密码代码内没有直接硬编码,想分析代码比较困难,且耗费时间,因此我想到直接hook。
经常逆向的人应该都知道,android加载客户端证书使用的是java.security.KeyStore.open()方法。这个方法第一个参数是证书文件流,第二个参数是证书密码。简单定位代码,发现第二个参数来源为SoulNetworkSDK.r().c方法,所以我们直接hook这个c方法,c方法的返回值即为我们需要的证书密码。
image.png
直接填写对应包名类名方法名:
image.png

直接将包名类名方法名填入工具,点击保存,打开悬浮窗,运行目标app,效果如下:
image.png
可以看到,证书密码已经成功hook到,长按可将hook结果复制到剪切板,现在直接在charles或者burp里导入p12证书并填写密码即可正常抓包。
实战测试顺利通过。


代码比较粗糙,但是用起来很方便,所以各位如果喜欢或者有需要可以star一下。



2021年4月21日修改:
修复了开发者自定义参数类型导致方法hook不到的bug

我想升级,有没有免费评分帮我给个



easyHook 2.0.apk.zip

2.02 MB, 下载次数: 451, 下载积分: 吾爱币 -2 CB

免费评分

参与人数 47吾爱币 +55 热心值 +46 收起 理由
刘小志 + 1 + 1 我很赞同!
constanline + 1 + 1 用心讨论,共获提升!
wzmcay + 1 谢谢@Thanks!
QingYi. + 3 + 1 我很赞同!
文西思密达 + 2 + 1 很棒的软件,谢谢分享
15808244862 + 1 + 1 谢谢@Thanks!
CI.1000 + 1 + 1 谢谢@Thanks!
mrt0615 + 1 + 1 用心讨论,共获提升!
aini白痴 + 1 + 1 谢谢@Thanks!
D·v桅 + 1 + 1 厉害
溯雪 + 1 + 1 我很赞同!
yanjin + 1 谢谢@Thanks!
15235109295 + 1 + 1 用心讨论,共获提升!
eairou + 1 谢谢@Thanks!
超无奥义 + 1 + 1 热心回复!
大花头女装店 + 1 + 1 热心回复!
0基础萌新 + 1 + 1 我很赞同!
niecewo + 1 + 1 谢谢@Thanks!
longfei2017 + 1 + 1 谢谢@Thanks!
南山楠 + 1 + 1 我很赞同!
swhyy + 1 我很赞同!
chermy + 2 + 1 思路不错啊.
莫利花 + 1 + 1 谢谢@Thanks!
小公主々 + 1 + 1 谢谢@Thanks!
wang5 + 1 + 1 谢谢@Thanks!
gg3237 + 1 + 1 我很赞同!
zjwzlb + 1 + 1 我很赞同!
forever丶snow + 1 + 1 谢谢@Thanks!
zhaobisheng + 1 + 1 用心讨论,共获提升!
淡然遇事很淡然 + 1 + 1 我很赞同!
djxding + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
闷骚小贱男 + 3 + 1 鼓励转贴优秀软件安全工具和文档!
angguandianzi + 1 + 1 我很赞同!
qhjiao + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
duanjia0912 + 1 + 1 用心讨论,共获提升!
messier64 + 1 + 1 谢谢@Thanks!
52pojiewang52 + 1 + 1 顶顶你
笙若 + 1 + 1 谢谢@Thanks!
nws0507 + 1 + 1 谢谢@Thanks!
某些人 + 1 + 1 谢谢@Thanks!
Gilbert + 2 + 1 用心讨论,共获提升!
小楠 + 1 + 1 谢谢@Thanks!
风之暇想 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
CC520CC + 1 谢谢@Thanks!
Mariolll + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zzq1230820 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
noah88 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

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

小公主々 发表于 2021-5-25 15:00
本帖最后由 小公主々 于 2021-5-25 15:18 编辑

N5KX96O~P5D45637F(~7_(I.png I[$KA]~397(JN5$ILA)5GE8.png
zldtb19931116 发表于 2021-5-25 14:27
之前不知道什么bug,重新上传了下,现在可以了

问下,需要选择指定应用吗?我填上类、方法 信息,点了保存,然后点了悬浮窗,然后运行目标app后,啥也没显示,悬浮窗上一直空白

这个图是我填写的情况,按理说这个方法类似把token参数加密,每个请求都会调用的啊。
asvrk 发表于 2021-4-2 18:41
本帖最后由 asvrk 于 2021-4-2 19:38 编辑

zldtb19931116 发表于 2021-4-2 12:52
这个小工具基于xposed开发,需要xposed框架的

lsposed有效,原因找到了,我开启了文件隔离,模块写的txt被hook程序读取不到
原回复:
lsposed是一个新的xposed框架 https://github.com/LSPosed/LSPosed
我刚刚也试了下 不知道是不是操作问题也是失败的,另外对深色模式的适配些问题 希望可以修复下 应该是主题问题
noah88 发表于 2021-4-2 11:53
duddy 发表于 2021-4-2 12:02
份棒的思路!
头像被屏蔽
First丶云心 发表于 2021-4-2 12:05
提示: 作者被禁止或删除 内容自动屏蔽
xiaoA 发表于 2021-4-2 12:44
用不了 lsp
 楼主| zldtb19931116 发表于 2021-4-2 12:52

这个小工具基于xposed开发,需要xposed框架的
lorentutuve 发表于 2021-4-2 12:55
感谢大佬无私奉献
眷恋 发表于 2021-4-2 13:55
只想说,这东西太流弊了
kirinoooo 发表于 2021-4-2 13:56
挺方便的工具 有用
xbik 发表于 2021-4-2 14:20
挺方便的工具 方便你我他
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-21 23:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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