16.安卓逆向-frida基础-HOOK类方法2

news2024/11/6 8:46:15

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:15.安卓逆向-frida基础-HOOK类方法1

上一个内容里hook了一些逆向时常用类和方法,本次接着继续

有一个app,如下图是通过青花瓷抓的包,它的参数加密了,就用它来进行实战

然后对它进行HOOK,它的参数可能会出现在解析json的时候,使用HashMap的时候

首先HOOK HashMap,可以看到下面两个图,HOOK它之后可以看到明文、密文、接口返回值

代码

function demo6() {
    var hashMap = Java.use("java.util.HashMap");
    hashMap.put.implementation = function (a, b) {
        console.log('输出-》',a,b);
        return this.put(a, b)
    }

}

Java.perform(function (){ // 调用java代码也就是getCalc方法
    // demo1()
    // demo2()
    // demo5()
    demo6()
})

然后下图是密文的k,所以用Encrypt它做一个判断,如果等于Encrypt的时候查看它的调用栈

打印调用栈的代码

function showStacks() {
    Java.perform(function (){
        console.log(Java.use("android.util.Log").getStackTraceString(
            Java.use("java.lang.Throwable").$new()
        ))
    })
}

实战:下图把调用栈打印了出来,然后可以逆向了

function demo6() {
    var hashMap = Java.use("java.util.HashMap");
    hashMap.put.implementation = function (a, b) {
        if(a == 'Encrypt'){
            showStacks();
        }
        console.log('输出-》',a,b);
        return this.put(a, b)
    }

}

function showStacks() {
    Java.perform(function (){
        console.log(Java.use("android.util.Log").getStackTraceString(
            Java.use("java.lang.Throwable").$new()
        ))
    })
}

Java.perform(function (){ // 调用java代码也就是getCalc方法
    // demo1()
    // demo2()
    // demo5()
    demo6()
})

有了调用栈开始逆向分析,打开jadx-gui-1.4.7.exe并把apk拖进去进行反编译

然后下图红框是HashMap put的位置,这里是java提供的所以这里不用看,然后下图皇框里是json库里的方法所以也不用看,然后下图绿框是自己写的

不确定是不是自己写的就把下图红框位置,就是前面三个部分复制一下去百度,如果能百度到那就不是自己写的

然后如下图,搜索

双击下图红框进入类

双击之后

然后来到116行,来到之后如下图看到它添加加密数据的位置了,然后开始分析

然后看到加密的数据从 RequestUtil.encodeDesMap(code, this.desKey, this.desIV); 得到的,所以接下来去encodeDesMap里看

按住CTRL鼠标左键单机下图红框位置,就可以跳转进去了

然后就来到下图红框位置

然后右击选择复制为frida片段,也就是它会给我们生成frida的HOOK代码并复制,HOOK之后看它的入参

然后粘贴的代码

然后执行 frida -UF -l 指令执行hook代码,如下图可以看到它的明文和用来加密的字符

然后如下图红框,它里面有个 sign 的值也被加密了

通过Python代码加密,发现它的key有问题,与上图加密内容不一样

然后再回到apk反编译的代码,如下图红框,它把key放到了DesSecurity里

进入 DesSecurity 里,如下图红框,可以看到它对key进行了加密,所以用hook得到的key进行加密,它是可以加密但是加密的结果不对

然后分析InitCipher里面逻辑,不认识的代码可以复制去百度搜,加密的后面再写,这里先这样

然后分析 sign,sign在下图红框位置添加的

然后 Config.BASE_APPEND 的值是 sdlkjsdljf0j2fsjk

然后进入paraMap方法里分析,对sign进行了md5加密

进入md5方法里,如下图红框,它是标准md5加密

然后现在需要知道md5方法的入参是什么,所以要hook它,让他给我们生成代码

下图红框是要加密的数据,也就是sign的值

使用在线的md5加密,结果与它的加密一样

然后这个字符串值的来源如下图,sdlkjsdljf0j2fsjk来自于Config.BASE_APPEND(上面有找到)

HOOK JSON

function hookjson() {// hookjson
    var JSONObject = Java.use("org.json.JSONObject");
    JSONObject.put.overload('java.lang.String','java.lang.Object').implementation=function (key, value) {
        console.log('Hook JSONObjdect.put')
        console.log(`key:${key}`)
        console.log(`value:${value}`)
        return this.put(key, value)
    }

    JSONObject.getString.overload('java.lang.String').implementation=function (key) {
        console.log('Hook JSONObjdect.getString')
        console.log(`key:${key}`)
        var res = this.getString(key)
        return res;
    }
}

Java.perform(function (){ // 调用java代码也就是getCalc方法
    // demo1()
    // demo2()
    // demo5()
    // encodeDesMap()
    // wmd5()
    hookjson()
})

它有时候HOOK之后没反应,感觉还是HOOK map的put方法好用


img

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

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

相关文章

链表的基础知识

文章目录 概要整体架构流程 小结 概要 链表是一种常见的数据结构,它通过节点之间的连接关系实现数据的存储和访问。链表由一系列节点(Node)组成,每个节点包含数据和指向下一个节点的指针。链表的特点是物理存储单元上非连续、非顺…

《基于多视角深度学习技术的乳腺X线分类:图网络与Transformer架构的研究》|文献速递-基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Mammography classification with multi-view deep learning techniques:Investigating graph and transformer-based architectures 《基于多视角深度学习技术的乳腺X线分类:图网络与Transformer架构的研究》 01 文献速递介绍 乳腺X线摄影是乳腺癌…

鸿蒙开发(NEXT/API 12)【请求用户授权】手机侧应用开发

为保护用户隐私,Wear Engine的API需要用户授权才可以正常访问。建议开发者在用户首次调用Wear Engine开放能力的时候执行本章节操作。 申请用户穿戴设备权限 应用拉起华为账号登录和授权界面,由用户授权相应的数据访问权限。用户可以自主选择授权的数据…

828华为云征文|华为云Flexus云服务器X实例——uniapp功能开发、搭建股票系统选择用什么服务器比较好?

在二次开发、安装搭建股票系统时,选择华为云Flexus X服务器是一个值得考虑的优质选项。以下是一些具体的建议: 测试环境:Linux系统CentOS7.6、宝塔、PHP7.3、MySQL5.7,根目录public,伪静态thinkphp,开启ssl…

1、深入理解Redis线程模型

文章目录 一、Redis是什么?有什么用?1、Redis是什么?2、2024年的Redis是什么样的? 二、Redis到底是单线程还是多线程?三、Redis如何保证指令原子性1、复合指令2、Redis事务3、Pipeline4、lua脚本5、Redis Function6、R…

CTFshow信息搜集web1~web20详解

目录 1、web1 源码泄露 2、web2 页面源代码泄露 3、 web3 响应头泄露 4、web4 robots协议 5、web5 phps源码泄露 6、web6 源码压缩包泄露 7、web7 GIT泄露 8、web8 SVN泄露 9、web9 vim缓存 10、web10 cookie 11、web11 域名解析 12、web12 网站公开信息 13、web13 技…

python4_画方格

python4_画方格 import turtledef cell():# 画第一个方格# 设置画笔宽度为1turtle.width(1)# 下笔,这样,路径就会画出来turtle.pendown()# 前进30px像素turtle.forward(30)# 设置为黑色turtle.color("black")# 方向转90度turtle.left(90)# 前进30px像素t…

HTML+CSS基础 第二季课堂笔记

一、列表 列表都不是单打独斗的,通常都是一组标签组成 1 无序列表 作用:定义一个没有顺序的列表结构 由两个标签组成,ul(容器级标签),li(容器级) ul:英文ulordered …

828华为云征文 | 华为云Flexus云服务器X实例搭建企业内部VPN私有隧道,以实现安全远程办公

VPN虚拟专用网络适用于企业内部人员流动频繁和远程办公的情况,出差员工或在家办公的员工利用当地ISP就可以和企业的VPN网关建立私有的隧道连接。 通过拨入当地的ISP进入Internet再连接企业的VPN网关,在用户和VPN网关之间建立一个安全的“隧道”&#xff…

探索顶级低代码开发平台,实现创新

文章盘点ZohoCreator、OutSystems等10款顶尖低代码开发平台,各平台以快速开发、集成、数据安全等为主要特点,适用于不同企业需求,助力数字化转型。 一、Zoho Creator Zoho Creator 是一个低代码开发平台,它简化了应用开发中的复杂…

解决MySQL命令行中出现乱码问题

在MySQL命令行中遇到乱码问题通常是由于字符编码设置不正确导致的。以下是一些解决步骤: 1. **检查和设置字符集**: 首先,您需要确保MySQL服务器、客户端和数据库使用的是正确的字符集。您可以通过执行以下命令来查看当前的字符集设置&…

领英(LinkedIn)高效开发国外客户的6个技巧

社媒开发客户大家现在用的都挺多,每个社媒平台都有自己的特点,领英(LinkedIn)因为他特殊的职场定位,这上面有非常多的大客户,适合做B端的外贸企业,今天就来给大家分享一下如何利用领英高效开发国…

【无人机设计与控制】Multi-UAV|多无人机多场景路径规划算法MATLAB

摘要 本研究探讨了多无人机路径规划问题,提出了三种不同算法的对比分析,包括粒子群优化(PSO)、灰狼优化(GWO)和鲸鱼优化算法(WOA)。利用MATLAB实现了多场景仿真实验,验证…

关于 JVM 个人 NOTE

目录 1、JVM 的体系结构 2、双亲委派机制 3、堆内存调优 4、关于GC垃圾回收机制 4.1 GC中的复制算法 4.2 GC中的标记清除算法 1、JVM 的体系结构 "堆"中存在垃圾而"栈"中不存在垃圾的原因: 堆(Heap) 用途&#xff…

python-金币/打分/小理学数列3

一:金币 题目描述 国王将金币作为工资,发放给忠诚的骑士。 第一天,骑士收到一枚金币;之后两天(第二天和第三天)里,每天收到两枚金币;之后三天(第四、五、六天&#xff09…

数值计算 --- 平方根倒数快速算法(下)

平方根倒数快速算法(下) --- 向Greg Walsh致敬! 数值计算 --- 平方根倒数快速算法(上)_开根号倒数快速-CSDN博客文章浏览阅读712次,点赞31次,收藏30次。由于平方根倒数快速算法实在是太过经典,出于对code中magic number"0x5f…

Temu、亚马逊如何建立稳固的测评系统、避免挂单?

在跨境电商的测评与补单过程中,许多卖家和测评工作室常常面临由于技术环境不足导致的下单成功率低的问题。尤其是新账号在首次下单时,往往会遇到F号或砍单的困扰,进而陷入频繁购买和账号损失的恶性循环。这不仅消耗了大量时间和精力&#xff…

【真实访问】那些选择土木专业的学生,后来怎么样了?

“你会让孩子报土木专业吗?” 7月15日,澎湃新闻在微博上发起线上调研,截至16日12时,8000多人参与了投票,结果显示近7000人选择“不会,天坑专业”。短短几年时间,土木工程专业的报考从“香饽饽”…

Android Studio 新版本 Logcat 的使用详解

点击进入官方Logcat介绍 一个好的Android程序员要会使用AndroidStudio自带的Logcat查看日志,会Log定位也是查找程序bug的第一关键。同时Logcat是一个查看和处理日志消息的工具,它可以更快的帮助开发者调试应用程序。 步入正题,看图说话。 点…

如何实现Mybatis自定义插件

背景 MyBatis的插件机制,也可称为拦截器,是一种强大的扩展工具。它允许开发者在不修改MyBatis框架源代码的情况下,通过拦截和修改MyBatis执行过程中的行为来定制和增强功能。 MyBatis插件可以拦截四大核心组件的方法调用:Executor…