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

news2025/1/16 6:50:55

说明

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

说明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 指令心法(四)`touch` 创建一个新的空文件

文章目录 命令的概述和用途命令的用法命令行选项和参数的详细说明命令的示例命令的注意事项或提示 命令的概述和用途 touch 是一个用于在 Linux 和 Unix 系统中创建空文件或更改现有文件的访问和修改时间的命令。如果指定的文件不存在,touch会创建一个新的空文件&a…

九、idSpanMap使用基数树代替原本的unordered_map 十、使用基数树前后性能对比

九、idSpanMap使用基数树代替原本的unordered_map 我们原本的idSpanMap用的是STL容器中的unordered_map哈希桶,因为STL的容器本身是不保证线程安全的,所以我们在访问时需要加锁保证线程安全,这也就是我们写的内存池的性能的瓶颈点。因为我做…

【MySQL】基础知识(二)

MySQL基础知识(二) 文章目录 MySQL基础知识(二)01 表操作1.1 创建表1.2 查看所有表1.3 查看指定表的结构1.4 删除表练习 02 CURD2.1 新增2.1.1 指定列插入2.1.2 datetime类型插入 2.2 查询2.2.1 全列查询2.2.2 指定列查询2.2.3 查询字段为表达式2.2.4 别名查询2.2.5 去重2.2.6 …

【Cookie和Session的那些事儿】

🌠作者:TheMythWS. 🎆专栏:《集合与数据结构》 🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 目录 认识Cookie和Session Cookie Cookie对象的特点 Cookie对…

【算法日志】动态规划刷题:股票买卖附加问题(day42)

代码随想录刷题60Day 目录 前言 含冷冻期的股票买卖最佳时期 含手续费的股票买卖最佳时期 前言 今天的股票买卖问题会附加一些条件,但总体难度不大。 含冷冻期的股票买卖最佳时期 该问题难点在于对几个状态进行解构并写出相应的状态转移方程。 int maxProfit(ve…

每日一博 - 漫谈流控小妙招

文章目录 Pre概述实现方式固定窗口算法(计数器法)定义实现 滑动窗口算法定义实现 漏桶算法定义实现 令牌桶算法定义实现每秒产生5个令牌应对突发流量平滑预热 网关限流流量整形中间件限流 Pre 深入理解分布式技术 - 限流 并发编程-25 高并发处理手段之…

Revit SDK:AutoParameter 添加参数

前言 这个例子介绍如果往族文件里添加参数。 内容 Revit 的参数,参考官方文档: 这个例子的关键接口: // 通过 FamilyManager 添加参数 FamilyParameter AddParameter(string parameterName, BuiltInParameterGroup parameterGroup, Categ…

【JS案例】JS实现积分抽奖(内附源码)

JS案例实现积分抽奖 🌟效果展示 🌟HTML结构 🌟CSS样式 🌟实现思路 🌟具体实现 1.定义抽奖次数渲染 2.点击抽奖按钮,实现滚动抽奖效果 3.弹窗处理 🌟完整代码 🌟写在最后 &#x1f3…

阿里面试经验分享:从被回绝到Offer,详解应聘阿里技术岗位注意事项

本文是《谈谈应聘阿里全流程》的姊妹篇,《谈谈应聘阿里全流程》发布后,收到了很多读者的积极反馈,但其中也反映出读者普遍的困惑:清楚了应聘流程,该如何有针对性地做应聘准备呢?这个问题从正面并不好回答&a…

windows自带远程桌面连接的正确使用姿势

摘要 目前远程办公场景日趋广泛,对远程控制的需求也更加多样化,windows系统自带了远程桌面控制,在局域网内可以实现流程的远程桌面访问及控制。互联网使用远程桌面则通常需要使用arp等内网穿透软件,市场上teamviewer、Todesk、向…

浅探Android 逆向前景趋势~

前段时间,我和朋友偶然间谈起安卓逆向,他问我安卓逆向具体是什么,能给我们带来什么实质性的东西,我也和朋友大概的说了一下,今天在这里拿出来和大家讨论讨论,也希望帮助大家来了解安卓逆向。 谈起安卓逆向…

C++面试题(叁)---操作系统篇

目录 操作系统篇 1 Linux中查看进程运行状态的指令、查看内存使用情况的指令、 tar解压文件的参数。 2 文件权限怎么修改 3 说说常用的Linux命令 4 说说如何以root权限运行某个程序。 5 说说软链接和硬链接的区别。 6 说说静态库和动态库怎么制作及如何使用,区…

sql:SQL优化知识点记录(六)

(1)索引优化1 查看一下有没有建立索引: 用到索引中的一个:type中的ref决定访问性能 用到索引中的两个:通过key_len的长度可以看出来,比第一个大一点。或者通过ref:中用到了两个常量const 用到了…

ubuntu系统安装QQ音乐

前言 要问程序员除了编程软件最离不开的最重要的是什么软件,个人觉得就是音乐软件了,所以QQ音乐单独拿出来整理一下,其他的软件放在一起整理一下。“一起长大的约定,那样真心,与你聊不完的曾经,而我已经分…

图像扭曲之万花筒

源码: void kaleidoscope(cv::Mat& src,cv::Mat& dst,double angle,double radius) {dst.create(src.rows, src.cols, CV_8UC3);dst.setTo(0);int cx src.cols / 2;int cy src.rows / 2;//angle PI / 4;double angle2 PI / 4;double sides radius / 3…

【板栗糖GIS】——360浏览器的下载图标隐藏在内部不方便,怎么修改

目录 1. 设置前的本来样子 2. 登录360的皮肤中心 3. 使用se13的经典皮肤 最近edge浏览器最近使用bilibili和notion都非常卡,时不时崩溃,不得不换浏览器使用,试来试去360浏览器最得我心,只不过广告太多,调教也是花了…

复杂性分析与算法设计:解锁计算机科学的奥秘

文章目录 算法复杂性分析的基本概念时间复杂度空间复杂度 常见的算法设计策略1. 分治法2. 贪心法3. 动态规划 算法设计的实际应用1. 网络路由2. 图像处理3. 人工智能 算法的选择和性能分析结论 🎉欢迎来到数据结构学习专栏~复杂性分析与算法设计:解锁计算…

excel 无法删除有合并单元格的列内容时的替代方法

背景: hp 笔记本电脑;win10 64位;excel 版本 16.0; office 2016自带excel 问题: 把pdf转excel后,由于原 pdf 图表本身的原因,转换后有不规则合并单元格的现象。 而在选择某列进行“删除” &a…

完整开发实现公众号主动消息推送,精彩内容即刻到达

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

【爬虫】实验项目三:验证码处理与识别

目录 一、实验目的 二、实验预习提示 三、实验内容 实验要求 基本要求: 改进要求A: 改进要求B: 四、实验过程 基本要求 五、源码如下 六、资料 一、实验目的 部分网站可能会使用验证机制来阻止用户无效登录或者是验证用户不是用程…