20.安卓逆向-frida基础-hook分析调试技巧2-hookDES

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

内容参考于:图灵Python学院

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

工具下载:

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

提取码:6tw3

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

上一个内容:19.安卓逆向-frida基础-hook分析调试技巧1-hookMD5

上一个内容里使用Frida hook了MD5算法并尝试了对一个app进行使用MD5hook找参数,本次接着继续

本次hook DES算法

下图是DES两种标准实现

package com.example.course1.suanfa;import android.util.Base64;import java.security.spec.AlgorithmParameterSpec;import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;public class AES {public static String des_1(String args) throws Exception{/*** SecretKeyFactory.getInstance("DES") 获取一个DES* generateSecret初始化DES的加密钥匙,专业术语叫做KEY* 一个des算法需要获取的就死key、iv、明文,有了这些之后就可以对参数模拟加密了*/SecretKey secretKey = SecretKeyFactory.getInstance("DES").generateSecret(new DESKeySpec("123456789".getBytes()));/***  new IvParameterSpec("87654321".getBytes()); IV**/AlgorithmParameterSpec iv = new IvParameterSpec("87654321".getBytes());/*** Cipher.getInstance("DES/CBC/PKCS5Padding"); 加密模式*/Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");/*** cipher.init(1, secretKey, iv); 初始化,1表示加密**/cipher.init(1, secretKey, iv);/***  cipher.update(args.getBytes()); 把明文放到缓存区准备加密*/cipher.update(args.getBytes());/*** cipher.doFinal() 加密*/return Base64.encodeToString(cipher.doFinal(), 0);}public static String des_2(String args) throws Exception{SecretKey secretKey = SecretKeyFactory.getInstance("DES").generateSecret(new DESKeySpec("123456789".getBytes()));AlgorithmParameterSpec iv = new IvParameterSpec("87654321".getBytes());Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");cipher.init(1, secretKey, iv);return Base64.encodeToString(cipher.doFinal(args.getBytes()), 0);}}

Frida hook脚本

function bytesToHex(arr) {var str = "";for (var i = 0; i < arr.length; i++) {var tmp = arr[i];if (tmp < 0) {tmp = (255 + tmp + 1).toString(16);} else {tmp = tmp.toString(16);}if (tmp.length == 1) {tmp = "0" + tmp;}str += tmp;}return str;
}
function bytesToBase64(e) {var base64EncodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';var r, a, c, h, o, t;for (c = e.length, a = 0, r = ''; a < c;) {if (h = 255 & e[a++], a == c) {r += base64EncodeChars.charAt(h >> 2),r += base64EncodeChars.charAt((3 & h) << 4),r += '==';break}if (o = e[a++], a == c) {r += base64EncodeChars.charAt(h >> 2),r += base64EncodeChars.charAt((3 & h) << 4 | (240 & o) >> 4),r += base64EncodeChars.charAt((15 & o) << 2),r += '=';break}t = e[a++],r += base64EncodeChars.charAt(h >> 2),r += base64EncodeChars.charAt((3 & h) << 4 | (240 & o) >> 4),r += base64EncodeChars.charAt((15 & o) << 2 | (192 & t) >> 6),r += base64EncodeChars.charAt(63 & t)}return r
}
function bytesToString(arr) {if (typeof arr === 'string') {return arr;}var str = '',_arr = arr;for (var i = 0; i < _arr.length; i++) {var one = _arr[i].toString(2),v = one.match(/^1+?(?=0)/);if (v && one.length == 8) {var bytesLength = v[0].length;var store = _arr[i].toString(2).slice(7 - bytesLength);for (var st = 1; st < bytesLength; st++) {store += _arr[st + i].toString(2).slice(2);}str += String.fromCharCode(parseInt(store, 2));i += bytesLength - 1;} else {str += String.fromCharCode(_arr[i]);}}return str;
}function main() {Java.perform(function () {var SecretKeyFactory = Java.use("javax.crypto.SecretKeyFactory")SecretKeyFactory.getInstance.overload('java.lang.String').implementation = function(str) {console.log(`算法是----》${str}《------------------------------------------------------------》`)return this.getInstance(str)}// 获取 keyvar DESKeySpec = Java.use("javax.crypto.spec.DESKeySpec")DESKeySpec.$init.overload('[B').implementation = function(str) {console.log(`DESKeySpec.$init.overload--》DES的Key bytesToString:${bytesToString(str)}`)console.log(`DESKeySpec.$init.overload--》DES的key bytesToHexKey:${bytesToHex(str)}`)return this.$init(str)}// 获取 ivvar IvParameterSpec = Java.use("javax.crypto.spec.IvParameterSpec")IvParameterSpec.$init.overload("[B").implementation = function(str) {console.log(`DES IV bytesToString:${bytesToString(str)}`)console.log(`DES IV bytesToHex:${bytesToHex(str)}`)return this.$init(str)}var Cipher = Java.use("javax.crypto.Cipher")Cipher.getInstance.overload('java.lang.String').implementation = function(str) {console.log(`Cipher 加密模式 Cipher.getInstance.overload('java.lang.String'):${str}`)return this.getInstance(str)}Cipher.getInstance.overload('java.lang.String', 'java.lang.String').implementation = function(str1,str2) {console.log(`Cipher 加密模式 Cipher.getInstance.overload('java.lang.String', 'java.lang.String') :${str1} || ${str2}`)return this.getInstance(str1, str2)}Cipher.update.overload('[B').implementation = function(str) {console.log(`DES 明文  Cipher.update.overload('[B') bytesToString:${bytesToString(str)}`)return this.update(str)}Cipher.update.overload('[B', 'int', 'int').implementation = function(str,i1, i2) {console.log(`DES 明文 Cipher.update.overload('[B', 'int', 'int') :${bytesToString(str)} 入参2:${i1} 入参3:${i2}`)return this.update(str, i1, i2)}Cipher.doFinal.overload('[B').implementation = function(str) {console.log(`des密文入参 Cipher.doFinal.overload('[B') bytesToString:${bytesToString(str)}`)console.log(`des密文入参 Cipher.doFinal.overload('[B') bytesToHex:${bytesToHex(str)}`)var m = this.doFinal(str)console.log(`des密文返回值 Cipher.doFinal.overload('[B') bytesToHex:${bytesToHex(m)}`)console.log(`des密文返回值 Cipher.doFinal.overload('[B') bytesToBase64:${bytesToBase64(m)}`)return m}Cipher.doFinal.overload().implementation = function() {var m = this.doFinal()console.log(`des密文返回值 Cipher.doFinal.overload() bytesToHex:${bytesToHex(m)}`)console.log(`des密文返回值 Cipher.doFinal.overload() bytesToBase64:${bytesToBase64(m)}`)return m}})
}main()

效果图:加密的key

然后是iv,如下图iv的构造方法有两个,如果为了全面可以把两个都给使用Frida hook了(其它的方法也是一样为了全面可以把所有相同名的方法全部hook)

iv效果图,下图的Frida hook脚本里把iv的入参从字节转成了字符串,有的app这个字节的内容它是十六进制数(也就是传过来的也是被加密之后的信息)

获取加密之后的数据

使用DES在线加密网站测试,可以正常根据hook到的key、iv、明文加密成正确的密文


img

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

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

相关文章

【在Linux世界中追寻伟大的One Piece】DNS与ICMP

目录 1 -> DNS(Domain Name System) 1.1 -> DNS背景 2 -> 域名简介 2.1 -> 域名解析过程 3 -> 使用dig工具分析DNS 4 -> ICMP协议 4.1 -> ICMP功能 4.2 -> ICMP报文格式 4.3 -> Ping命令 4.4 -> traceroute命令 1 -> DNS(Domain Na…

HTB:Markup[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What version of Apache is running on the targets port 80? 2.What username:password combination logs in successfully? 使用Yakit并使用TOP1000字典对密码进行爆破 3.What is the word at the top of the page that accepts use…

Python基础之List列表用法

1、创建列表 names ["张三","李四","王五","Mary"] 2、列表分片 names[1]&#xff1a;获取数组的第2个元素。 names[1:3]&#xff1a;获取数组的第2、第3个元素。包含左侧&#xff0c;不包含右侧。 names[:3]等同于names[0:3]&…

AD中显示Selection includes locked items.Continue?

因为框选拖动组里包含锁定的元器件&#xff0c;所以出现如下提示&#xff1b; 可以单击锁定元器件&#xff0c;点击location的锁形标记即可显示解锁的状态。 解锁之后&#xff1a; 然后就可以拖动框选的元器件了。

项目管理系统:提升企业项目管理效率的关键

随着市场的快速变化和企业业务的日益复杂&#xff0c;项目管理已成为企业成功的关键因素。但现阶段&#xff0c;企业项目管理正遭遇诸多棘手的挑战&#xff0c;让项目的实施充满不确定性。好在项目管理系统应运而生&#xff0c;为企业带来了新的希望和转机。但面对琳琅满目的项…

天津自闭症孩子寄宿制学校:关注每个孩子的成长与幸福

自闭症&#xff0c;这一复杂且日益受到关注的神经发育障碍&#xff0c;给患儿及其家庭带来了诸多挑战。在天津及全国范围内&#xff0c;越来越多的自闭症寄宿学校应运而生&#xff0c;致力于为这些特殊孩子提供全面的教育、康复和生活支持。而在遥远的广州&#xff0c;星贝育园…

【万字长文】Word2Vec计算详解(三)分层Softmax与负采样

【万字长文】Word2Vec计算详解&#xff08;三&#xff09;分层Softmax与负采样 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解&#xff08;一&#xff09;CBOW模型 markdown行 9000 【万字长文】Word2Vec计算详解&#xff08;二&#xff0…

ComfyUI【基础篇】:小白都可以学会的ComfyUI安装教程(原生版安装包)

大家我是极客菌&#xff01;&#xff01;&#xff01;&#xff01; 自从Flux这一款最新黑马文生图模型推出以来&#xff0c;Flux的浪潮正以不可阻挡之势席卷全球&#xff0c;目前本地电脑环境要玩Flux, 支持方式主要是ComfyUI。但是ComfyUI工具安装一直是很多小白比较困惑的地…

C++ 非STL数据结构学习——1.2 并查集

并查集的基本原理&#xff1a;四海之内的人&#xff0c;通过祖宗放在关联在一起。 例如&#xff0c;A的祖宗是B&#xff0c;B的祖宗又是C&#xff0c;D的祖宗若是C&#xff0c;则认为A和C就是一个集合的。 也就是说&#xff0c;每个元素有自己的祖宗信息&#xff0c;如果两元…

磁盘整理工具 IObit Smart Defrag Pro 免安装版

IObit Smart Defrag Pro 是一款功能强大的磁盘碎片整理工具。IObit Smart Defrag Pro最新版具有世界领先的碎片整理能力&#xff0c;IObit Smart Defrag Pro最新版不仅可以提供碎片整理功能&#xff0c;还可以根据使用频率智能地简化文件&#xff0c;从而加快磁盘速度并提高整个…

UR5机器人DH参数及其雅克比矩阵

UR5机器人有6个旋转关节&#xff08;R关节&#xff09;&#xff0c;其DH参数如下&#xff1a; 关节 iiiaia_iai​ (m)did_idi​ (m)αi\alpha_iαi​ (rad)θi\theta_iθi​ (rad)100.089159π2\frac{\pi}{2}2π​θ1\theta_1θ1​2-0.42500θ2\theta_2θ2​3-0.3922500θ3\th…

基于vue框架的大学生职业测评系统j8ag1(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;学生,职业探索,职业分类,自我认知,绿色未来,测评报告 开题报告内容 基于Vue框架的大学生职业测评系统项目功能主要包括以下几个方面&#xff1a; 一、核心功能 学生信息管理 记录并管理学生的基本信息&#xff0c;如姓名、性别、年龄、…

MySQL五千万大表查询优化实战

背景 DBA同事在钉钉发了两张告警截图&#xff0c;作为“始作俑者”的我很心虚&#xff0c;因为刚才是我在管理后台查询数据&#xff0c;结果很久都没出来&#xff0c;并且用多个维度查了N次 问题分析 这是当天上线的功能&#xff0c;完事我立马锁定SQL然后开启排查 # 原SQL&a…

LED灯具分割系统源码&数据集分享

LED灯具分割系统源码&#xff06;数据集分享 [yolov8-seg-EfficientRepBiPAN&#xff06;yolov8-seg-dyhead等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global A…

Docker SDK for Python 交互

目录 1. 创建 Docker 客户端 2. 列出所有容器 3. 容器内执行命令 4. 启动和停止容器 5. 创建和运行新容器 6. 获取容器日志 7. 删除容器 8. 处理镜像 使用 Docker SDK for Python 进行交互非常方便&#xff0c;可以执行各种操作&#xff0c;如管理容器、镜像、网络等。…

科学化润滑方案:满足不同微型导轨需求的润滑策略!

随着工业4.0时代的到来&#xff0c;自动化、智能化生产已成为制造业发展的主流趋势。微型导轨以其高精度、高刚性、长寿命等优异性能&#xff0c;广泛应用于电子设备、医疗器械、精密仪器等领域。而润滑作为微型导轨性能的重要保障&#xff0c;直接关系到微型导轨的运行效果和寿…

界面控件DevExpress中文教程 - 如何拓展具有AI功能的文本编辑器(一)

本文重点介绍了DevExpress在近年来最热门领域——人工智能(AI)和自然语言处理(NLP)的改进&#xff01; NLP是人工智能的一个分支&#xff0c;它允许计算机与人类语言进行交互&#xff0c;这包括以有意义/有用的方式理解、解释、生成和回应文本(和语音)的能力。基于NLP的功能允…

Run the FPGA VI 选项的作用

Run the FPGA VI 选项的作用是决定当主机 VI 运行时&#xff0c;FPGA VI 是否会自动运行。 具体作用&#xff1a; 勾选 “Run the FPGA VI”&#xff1a; 当主机 VI 执行时&#xff0c;如果 FPGA VI 没有正在运行&#xff0c;系统将自动启动并运行该 FPGA VI。 这可以确保 FPG…

设计模式——门面模式 | 外观模式

哈喽&#xff0c;各位盆友们&#xff01;我是你们亲爱的学徒小z&#xff0c;今天给大家分享的文章是设计模式的——门面模式。 文章目录 定义通用类图1.通用结构2.优点3.缺点 使用场景注意事项1.一个子系统可以有多个门面2.门面不参与子系统内的业务逻辑 定义 定义&#xff1a;…