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

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

内容参考于:图灵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() {// hookjsonvar 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.xdnf.cn/news/1551747.html

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

相关文章

揭秘网络钓鱼:如何识破并防范这场数字时代的诈骗游戏

网络钓鱼是一种网络攻击,它利用伪装的电子邮件欺骗收件人提供信息、下载恶意软件或采取其他期望的行动。 网络钓鱼是网络害虫,自20世纪90年代初从暗网出现以来,至今仍危害全球。根据SlashNext的报告,2023年平均每天有31,000次网络…

解决$‘r‘ command not found或者文件夹显示’tvsf 33‘$‘r‘

问题现象: 某客户反馈在执行脚本的时候文件夹显示存在问题,如下图: 但是脚本文件中的内容并没有\r字符,如下图: 也有客户反馈如下: 问题分析: $\r’是回车符的转义表示。在Unix和Linux系统中,回车符是一个不可见的控制字符,它通常用于文本文件中的行结尾。以上…

国内ChatGPT镜像网站整理汇总【OpenAI o1/GPT 4o】-2024/10月最新

一、中文镜像站 ①yixiaai.com 支持GPT4、4o以及o1,支持MJ绘画、文件上传 ②chat.lify.vip 支持通用全模型,支持文件读取、插件、绘画、AIPPT ③AI Chat 支持GPT3.5/4,4o以及MJ绘画 1. 什么是镜像站 镜像站(mirrored site&am…

NAL 网络提取层(Network Abstraction Layer)

1.NAL全称Network Abstract Layer, 即网络抽象层。 在H.264/AVC视频编码标准中,无论是存储还是网络传输,H264 原始码流是由一个接一个 NALU(NAL Unit) 组成,整个系统框架被分为两个层面:视频编码层面&#…

敏感内容识别是如何实现的?5大妙招教你快速筛选敏感词!

敏感内容识别是现代信息安全领域的重要课题,其实现依赖于多种技术和策略的综合运用。 以下是五种快速筛选敏感词的妙招: 一、关键词匹配 方法:通过使用安企神这类敏感词识别软件预设敏感词库,将待检测内容与敏感词库进行比对&am…

安达发|纺织行业APS系统中的物料替代解决方案

在纺织行业中,物料替代是应对原材料短缺、成本波动和供应链不确定性的一种重要策略。高级计划与排程系统(APS)通过集成物料替代功能,可以帮助企业在保持生产效率的同时,灵活应对市场变化。本文将探讨纺织行业在APS系统…

OpenFeign-快速使用-连接池-使用的最佳方案-日志配置

OpenFeign 我们利用Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。但是远程调用的代码太复杂了: 其实远程调用的关键点就在于四个: 请求方式 请求路径 请求参数 返回值类型 所以,OpenFeign就利用SpringMVC的相关注解来声明上述4个参数,然后基于动态代理…

PHP人才机遇桥梁招聘求职全能系统小程序源码

人才机遇桥梁 —— 招聘求职全能系统全解析 💼🚀 🌉 搭建人才与机遇的桥梁 在这个竞争激烈的职场环境中,找到一份心仪的工作或招募到合适的人才,往往不是一件容易的事。但幸运的是,我们有了“人才机遇桥梁…

JDK1.8 新的特性

一 Lambda 使用 Lambda表达式应用场景:任何有函数式接口的地方,只有一个抽象方法(Object类中的方法除外)的接口是函数式接口。就像Runnable接口中,只有一个run方法。 1、Runnable //在JDK1.8之前的写法new Thread(new Runnable() {public v…

养老院管理系统(含源码+sql+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 养老院管理系统拥有两种角色:管理员和护工 管理员:用户管理、老人信息管理、事故记录管理、入住费用管理、护工薪资管理、护工请假管理、床位管理、请假管理等 护…

【机器学习基础】Transformer学习

Transformer学习 梯度消失FeedForward层激活函数的主要作用是在网络中加入非线性变换 梯度消失 梯度爆炸 FeedForward层 Transformer结构: Transformer结构主要分为两大部分: 一是Encoder层结构:Encoder 的输入由 Input Embedding 和 Positional Embedding 求和输入Multi…

大模型部署——NVIDIA NIM 和 LangChain 如何彻底改变 AI 集成和性能

DigiOps与人工智能 人工智能已经从一个未来主义的想法变成了改变全球行业的强大力量。人工智能驱动的解决方案正在改变医疗保健、金融、制造和零售等行业的企业运营方式。它们不仅提高了效率和准确性,还增强了决策能力。人工智能的价值不断增长,这从它处…

汽修行业的知识库搭建:赋能在线教育与知识付费

随着汽修行业的蓬勃发展,其业务范围和技术要求日益多元化。为了应对这一趋势,许多汽修公司开始探索线上教育模式,通过开设汽修知识课程,实现知识的有偿分享与传播。这一转变不仅拓宽了企业的盈利渠道,也为广大汽修爱好…

环境变量

见一见环境变量: 查看环境变量的命令 命令行: echo &PATH echo &HOME env ps ajx ps aux ps -f -o pid code.c中获取环境变量 main(char* env[]) char* getenv(env_name) 本地变量 shell…

腾讯云新开端口

检查防火墙设置 890 2024-09-30 20:47:18 netstat -tuln | grep 1213891 2024-09-30 20:47:49 ping 110.40.130.231892 2024-09-30 20:48:38 sudo firewall-cmd --zonepublic --add-port1213/tcp --permanent893 2024-09-30 20:48:51 sudo firewall-cmd --reload894 2024-…

[Everything] 文件搜索工具的下载及详细安装使用过程(附有下载文件)

快速搜索文件名及其所在路径 下载链接在文末 下载压缩包后解压 !!安装路径不要有中文 解压后得到文件 双击exe文件得到 选择简体中文,点击OK 点击“我接受” 更改安装目录,最好不要放在C盘,点击下一步 点击下一步 点…

动态时钟控件:Qt/C++ 项目代码解读

基于Qt的动态时钟控件项目。该项目展示了如何通过Qt的绘图系统绘制一个带有表盘背景、时针、分针、秒针、以及时间日期显示的时钟。同时,这个时钟控件支持背景切换,并且每秒钟刷新一次,实时显示当前时间。 项目结构与功能概述 该时钟控件主…

如何利用 StarRocks 加速 Iceberg 数据湖的查询效率

数据湖作为一种存储各种类型数据的集中式存储系统,以其灵活性、可扩展性和低成本的优势受到越来越多企业的青睐。然而,数据湖虽然降低了数据存储成本,但在数据分析尤其是实时数据分析场景下,其性能仍存在一定瓶颈。 本文将探讨如何…

Python的异步编程

什么是协程? 协程不是计算机系统提供,程序员人为创造。 协程也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。 实现协程有那么几种方法: greenlet&…

Windows——解除Windows系统中文件名和目录路径的最大长度限制

第一步:打开本地组策略编辑器 按下Win R键打开运行窗口,输入 gpedit.msc 并回车,打开本地组策略编辑器。 第二步:开启 长路径设置 第三步:重启计算机