frida动态调试入门02——hook加密函数

说明

frida是一款Python工具可以方便对内存进行hook修改代码逻辑在移动端安全和逆向过程中常用到。

前置知识

frida动态调试入门01——定位关键代码
https://blog.csdn.net/qq_41690468/article/details/132607065

定位函数

在这里插入图片描述

关键函数

String code = RequestUtil.paraMap(addMap, Config.BASE_APPEND, "sign");

String encrypt = RequestUtil.encodeDesMap(code, this.desKey, this.desIV);

这个关键部分,有3个部分,2个逗号也就是有三个参数

其中code这个参数是从上面一个函数的值
在这里插入图片描述

RequestUtil.paraMap 又是调用RequestUtil类下面的一个函数在这里插入图片描述


拼接字符串后在进行md5 hash签名一下

builder.append("key=" + append);

            String checkCode = Utils.md5(builder.toString()).toUpperCase();

在这里插入图片描述

hook md5加密部分

复制类名
com.dodonew.online.util.Utils
在这里插入图片描述

因为是string类型的所有要return 一个结果

hook md5 部分代码

// 继续往下分析确定了加密的关键函数
// 依旧var一个对象,拿到这个类
    var utils = Java.use("com.dodonew.online.util.Utils");
    utils.md5.implementation = function(a){
        console.log("utils params:", a);

        // 因为是string类型的函数,需要有返回值
        var retval = this.md5(a);

        console.log("md5 retval:", retval);
        return retval;

    }

命令frida -UF -l .\hook.js

点击后发现hook到md5 部分
在这里插入图片描述


这个是一个标准的md5算法
在这里插入图片描述

hook DES算法加密

Ctrl+鼠标左键 点进encrypt = RequestUtil.encodeDesMap(code, this.desKey, this.desIV);
中的 encodeDesMap 跳转到 com.dodonew.online.http.RequestUtil这个类中

在这里插入图片描述
在这里插入图片描述

hook DES加密,重载报错,加上报错提示的部分就可以了,代码是3个参数的那个,所以选择3个参数的重载方法
在这里插入图片描述

代码部分

	// hook DES加密部分,com.dodonew.online.http.RequestUtil
	// var一个对象,拿到要hook的类
    var requestUtil = Java.use("com.dodonew.online.http.RequestUtil");
    requestUtil.encodeDesMap.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function(a, b, c){
        console.log("encodeDesMap params:", a);
        console.log("encodeDesMap key:", b);
        console.log("encodeDesMap iv:", c);


        var retval = this.encodeDesMap(a, b, c);
        console.log(retval);

        return retval;

    }

运行
在这里插入图片描述

抓包验证

了解抓包请看
postern + charles

https://xz.aliyun.com/t/11817

在这里插入图片描述

可以在hook代码中修改返回值或者是修改传入的参数,可以在hook的地方修改输入数据,修改返回包等操作。类似于js逆向下了一个断点,可以任意编辑。

在这里插入图片描述

完整代码

//如果是java hook的话代码都要放到java.perform包括起来

Java.perform(function(){

    // 拿到这个类,打印一下确认是否拿到类了
    var JsonRequest = Java.use("com.dodonew.online.http.JsonRequest")
    console.log("JsonRequest:",JsonRequest)

    // 调用类中的方法,实现,也就是将原来的函数修改掉 
    JsonRequest.paraMap.implementation = function(a){
        console.log("params1:", a);
        this.paraMap(a);
    }

    // addRequestMap,可能的另外一个加密函数,调用到这个函数但是还没开始加密
    // 参数类型或者是参数数量不同为一个重载函数
    JsonRequest.addRequestMap.overload('java.util.Map', 'int').implementation = function(a,b){
        console.log("addRequestMap params:", a, b);

        var bb =Java.cast(a, Java.use("java.util.HashMap"));
        console.log("addRequestMap params:", bb.toString());

        this.addRequestMap (a, b);

    }

    // 继续往下分析确定了加密的关键函数
    // 依旧var一个对象,拿到这个类
    var utils = Java.use("com.dodonew.online.util.Utils");
    utils.md5.implementation = function(a){
        console.log("utils params:", a);

        // 因为是
        var retval = this.md5(a);

        console.log("md5 retval:", retval);
        return retval;

    }

    



    // hook DES加密部分,com.dodonew.online.http.RequestUtil
    // var一个对象,拿到要hook的类
    var requestUtil = Java.use("com.dodonew.online.http.RequestUtil");
    requestUtil.encodeDesMap.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function(a, b, c){
        console.log("encodeDesMap params:", a);
        console.log("encodeDesMap key:", b);
        console.log("encodeDesMap iv:", c);

        var retval = this.encodeDesMap(a, b, c)
        console.log(retval)

        return retval

    }
    


});

参考文章

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

说明

文章仅做技术交流,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。请勿对非授权目标进行测试。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Frida 是一款强大的动态分析工具,可以用于在运行时对应用程序进行动态修改,例如 Hook 某些函数、修改函数的返回值、修改变量的值等。下面是使用 Frida 进行动态调试的步骤: 1. 安装 Frida:在命令行中使用 pip install frida 进行安装。 2. 在需要进行动态调试的应用程序中添加 Frida 的依赖:在 Gradle 文件中添加以下依赖: ``` implementation 'com.github.frida:frida-gson:12.4.5' implementation 'com.github.frida:frida-android:12.4.5' ``` 3. 在应用程序中初始化 Frida: ``` FridaAndroid.initialize(); ``` 4. 在需要进行动态调试的地方添加 FridaHook 代码: ``` FridaAndroid.attach(this); FridaAndroid.executeJavaScript("Interceptor.attach(Module.findExportByName(null, '函数名'), {onEnter: function(args) {console.log('参数1:', args[0].readCString());console.log('参数2:', args[1].readCString());}});"); ``` 其中,函数名为需要进行动态调试函数名。 5. 运行应用程序,并在命令行中使用 Frida 的命令进行 Hook: ``` frida -U com.example.packagename -l hook.js --no-pause ``` 其中,com.example.packagename 为需要进行动态调试的应用程序的包名,hook.js 为 Hook 代码所在的 JavaScript 文件。 6. 在命令行的输出中查看 Hook 的结果,以及在 Android Studio 的 Logcat 中查看输出信息。 需要注意的是,在使用 Frida 进行动态调试时,需要先将应用程序安装在设备上,并且需要在设备上启动应用程序后才能进行动态调试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值