矩阵爆破逆向之条件断点的妙用

news2024/10/5 15:24:07

不知道你是否使用过IDA的条件断点呢?在IDA进阶使用中,它的很多功能都有大作用,比如:ida-trace来跟踪调用流程。同时IDA的断点功能也十分强大,配合IDA-python的输出语句能够大杀特杀!

那么本文就介绍一下这个功能点,使用z3来秒解题目。

条件断点

什么是条件断点呢?

条件断点(Conditional
Breakpoint)是一种在代码调试过程中设置的断点,它可以根据特定的条件暂停程序的执行。当程序执行到设置了条件断点的代码行时,如果该条件为真,则程序会暂停执行;如果该条件为假,则程序会继续执行。这种调试技术常用于复杂的程序调试,能够帮助程序员更快地发现程序中的错误,并提高调试的效率。条件断点可以应用于多种编程语言和开发环境中,如C++、Java、Python等。

与普通的断点大差不差,不同点在于,程序运行到条件断点处时,不会让程序暂停,而是继续执行,并执行我们设置好的脚本。

OK,接下来让我们分析这道题目

初次分析

main函数

flag的格式

打开main函数,发现使用了SIMD指令赋值了一些关键数据

继续分析

看来cry1和cry2是很关键的函数

密文:

cry1

发现对我们的输入flag,进行一些转换:

比如:位置顺序和对我们的flag异或一个固定的值。

异或的值是由上下文决定的,但是总是单字节固定

将输入的flag运算完后,转换为 一个int类型的矩阵

初次分析到此结束

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

cry2

条件断点妙用

经过动调,我发现关键的加密就这三个汇编指令。

意思:取flag->与一个固定的矩阵相乘->输出加密之后的矩阵

如果我们能够打印,加密前的flag和相乘的矩阵元素,就可以逆推明文啦

主要是不清楚,矩阵相乘的顺序,可能是打乱的,那样只能这样来做。

使用了:条件断点

这三个断点依次使用下面3个条件输出

主要是这两个命令:

get_reg_value(“rbx”) 获取rbx寄存器的值

idc.get_wide_dword() 获取某地址的值(4字节读取)


  print("[rbx] = ",hex(idc.get_wide_dword(get_reg_value("rbx"))))
  
  print("rax = ",hex(get_reg_value("rax")),"[rdi]=
  ",hex(idc.get_wide_dword(get_reg_value("rdi"))))
  
  print("output,rax = ",hex(get_reg_value("rax")),"n")

然后edit breakpoint

OK,见证奇迹的时刻到了,运行程序,成功输出:

推导

因为密文说16字节的,我们将真正的密文提取出来和我们输入假flag产生的密文也提取出来,进行对比


Python

 密文
  unsigned int data[16] = {
  0x00000436, 0x000002B4, 0x000002AF, 0x00000312, 0x000002EA, 0x00000253,
  0x0000020A, 0x0000028E,
  0x000001C6, 0x0000015C, 0x0000017C, 0x0000017A, 0x0000069E, 0x000004AE,
  0x000004B1, 0x00000522
  };
  
  假flag输出的结果密文
  unsigned int data[16] = {
  0x00000466, 0x000002F9, 0x00000329, 0x0000046E, 0x00000290, 0x00000184,
  0x000001E4, 0x0000023A,
  0x00000183, 0x000000C1, 0x0000011E, 0x00000122, 0x00000646, 0x00000467,
  0x000004F7, 0x000005EA
  };
  
  这是根据条件输出得到的规律;
  
  x1*1+x2*5+x3*4+x4*3=0x436
  y1*1+y2*5+y3*4+y4*3=0x2B4
  z1*1+z2*5+z3*4+z4*3=0x2AF
  n1*1+n2*5+n3*4+n4*3=0x312
  
  x1*2+x2*1+x3*2+x4*3=0x2EA
  y1*2+y2*1+y3*2+y4*3=0x253
  z1*2+z2*1+z3*2+z4*3=0x20A
  n1*2+n2*1+n3*2+n4*3=0x28E
  
  x1*2+x2+x3+x4=0x1c6
  y1*2+y2+y3+y4=0x15c
  z1*2+z2+z3+z4=0x17c
  n1*2+n2+n3+n4=0x17a
  
  x1*3+x2*5+x3*4+x4*7=0x69e
  y1*3+y2*5+y3*4+y4*7=0x4ae
  z1*3+z2*5+z3*4+z4*7=0x4b1
  n1*3+n2*5+n3*4+n4*7=0x522

z3解密

解密脚本:


Python

 from z3 import *
  
  # 定义变量
  x = [Int(f'x{i}') for i in range(1, 5)]
  y = [Int(f'y{i}') for i in range(1, 5)]
  z = [Int(f'z{i}') for i in range(1, 5)]
  n = [Int(f'n{i}') for i in range(1, 5)]
  
  # 定义目标值
  goal = [
  0x466,
  0x2f9,
  0x329,
  0x46e,
  0x290,
  0x184,
  0x1e4,
  0x23a,
  0x183,
  0xc1,
  0x11e,
  0x122,
  0x646,
  0x467,
  0x4f7,
  0x5ea
  ]
  
  # 定义约束条件
  constraints = [
  x[0]*1 + x[1]*5 + x[2]*4 + x[3]*3 == goal[0],
  y[0]*1 + y[1]*5 + y[2]*4 + y[3]*3 == goal[1],
  z[0]*1 + z[1]*5 + z[2]*4 + z[3]*3 == goal[2],
  n[0]*1 + n[1]*5 + n[2]*4 + n[3]*3 == goal[3],
  x[0]*2 + x[1]*1 + x[2]*2 + x[3]*3 == goal[4],
  y[0]*2 + y[1]*1 + y[2]*2 + y[3]*3 == goal[5],
  z[0]*2 + z[1]*1 + z[2]*2 + z[3]*3 == goal[6],
  n[0]*2 + n[1]*1 + n[2]*2 + n[3]*3 == goal[7],
  x[0]*2 + x[1] + x[2] + x[3] == goal[8],
  y[0]*2 + y[1] + y[2] + y[3] == goal[9],
  z[0]*2 + z[1] + z[2] + z[3] == goal[10],
  n[0]*2 + n[1] + n[2] + n[3] == goal[11],
  x[0]*3 + x[1]*5 + x[2]*4 + x[3]*7 == goal[12],
  y[0]*3 + y[1]*5 + y[2]*4 + y[3]*7 == goal[13],
  z[0]*3 + z[1]*5 + z[2]*4 + z[3]*7 == goal[14],
  n[0]*3 + n[1]*5 + n[2]*4 + n[3]*7 == goal[15]
  ]
  
  # 创建求解器
  solver = Solver()
  
  # 添加约束条件
  solver.add(constraints)
  
  # 求解
  if solver.check() == sat:
  model = solver.model()
  for i in range(1, 5):
  print(f'x{i} = {model[x[i-1]]}')
  print(f'y{i} = {model[y[i-1]]}')
  print(f'z{i} = {model[z[i-1]]}')
  print(f'n{i} = {model[n[i-1]]}')
  else:
  print('无解')

得到的结果,将其按照数组来填充

得到


Python

这是真flag解密后的结果:
  x1 = 100
  y1 = 89
  z1 = 119
  n1 = 92
  
  x2 = 66
  y2 = 5
  z2 = 69
  n2 = 4
  
  x3 = 84
  y3 = 83
  z3 = 4
  n3 = 104
  
  x4 = 104
  y4 = 82
  z4 = 69
  n4 = 86
  
  100,89,119,92,66,5,69,4,84,83,4,104,104,82,69,86
  

这是假flag解密后的结果:

x1 = 60
  y1 = 1
  z1 = 47
  n1 = 4
  
  x2 = 88
  y2 = 87
  z2 = 86
  n2 = 95
  
  x3 = 89
  y3 = 13
  z3 = 14
  n3 = 94
  x4 = 90
  y4 = 91
  z4 = 92
  n4 = 93
  
  60,1,47,4,88,87,86,95,89,13,14,94,90,91,92,93

按照我的思路来填充结果数组;

因为刚才说了,异或的值不清楚,但是一直为单字节固定值,所以使用Cybe的爆破功能。

根据程序的验证功能可知,flag以Sn@K开头,所以找到了真正的flag

但是顺序发生了变化,下面是假flag生成密文解密之后的结果,发现密文变化了

±----------------------------------------------------------------------+
| Sn@ku2r3cd3__era |
| Sn@k78906ba15432 |
| |
| Sn@k0123456789ab |
| |
| 经过交换后的结果: |
| |
| Sn@k78906ba15432 |
| |
| 按照我们构造的flag交换顺序后的字符串来恢复 |
| 恢复 |
| Sn@k3_are_cu2r3 |
±----------------------------------------------------------------------+

成功验证!

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

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

相关文章

gpt生成器,批量gpt文章生成器

GPT(生成式预训练模型)生成器软件在当今的数字化时代扮演着越来越重要的角色,它们通过人工智能技术,可以自动生成各种类型的文章内容,为用户提供了无限的创作可能性。本文将介绍6款不同的GPT生成器软件,并介…

NX二次开发:ListingWindow窗口的应用

一、概述 在NX二次开发的学习中,浏览博客时发现看到[社恐猫]和[王牌飞行员_里海]这两篇博客中写道有关信息窗口内容的打印和将窗口内容保存为txt,个人人为在二次开发项目很有必要,因此做以下记录。 ListingWindow信息窗口发送信息四种位置类型 设置Listi…

LVGL常用部件使用总结之图片部件

图片部件可用于显示图片,图片源可以是 C 语言数组格式的文件、二进制的.bin 文件以及图标字体。值得注意的是,图片部件要显示 BMP、JPEG 等格式的图片,则必须经过解码。 图片部件的组成部分仅有一个:主体(LV_PART_MAIN…

USB4之ASM2464PD与ASM2464PDX兼容与运用

首先在NVMe上运用: 一:ASM2464PD(现在可以做带PD的方案) 二:ASM2464PDX 1: Application Guide- CFX card reader NVMe SSD 2:ASM2464PDX Application Guide- NVMe SSD x4 with data clone 三&#xff…

Day09:基础入门-算法逆向散列对称非对称JS源码逆向AESDESRSASHA

目录 算法加密-概念&分类&类型 加密解密-识别特征&解密条件 解密实例-密文存储&数据传输 思维导图 章节知识点: 应用架构:Web/APP/云应用/三方服务/负载均衡等 安全产品:CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&am…

【数据分享】2000~2023年MOD15A2H 061 光合有效辐射分数FPAR数据集

​各位同学们好,今天和大伙儿分享的是2000~2023年MOD15A2H 061 光合有效辐射分数FPAR数据集。如果大家有下载处理数据等方面的问题,可以评论或私信。 Myneni, R., Y. Knyazikhin, T. Park. MODIS/Terra Leaf Area Index/FPAR 8-Day L4 Global 500m SIN G…

ESU毅速:3D打印随形水路为模具制造带来革命性飞跃

随着科技的飞速发展,3D打印技术已逐渐成为制造业的重要支柱。它通过逐层堆积材料,为我们带来了前所未有的生产方式和可能性。在众多3D打印技术中,随形水路技术以其独特的优势,正引领着制造业的一场革命性变革。 3D打印随形水路的定…

git安装与使用4.3

一、git的安装 1、下载git包 下载git包url:https://git-scm.com/download/win 下载包分为:64位和32位 2、点击安装包 2、选择安装路径 3、 点击下一步 4、点击next 5、点击next 6、点击next 7、 8、 9、 10、 11、 12、在桌面空白处,右键…

AI智能分析网关V4智慧商场方案,打造智慧化商业管理生态

AI智能视频检测技术在商场楼宇管理中的应用越来越广泛。通过实时监控、自动识别异常事件和智能预警,这项技术为商场管理提供了更高效、更安全的保障。今天我们以TSINGSEE青犀视频AI智能分析网关为例,给大家介绍一下AI视频智能分析技术如何应用在商场楼宇…

全排列 全排列 II N皇后

46.全排列 力扣题目链接(opens new window) 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 递归终止条件:当收集元素的数组path的大小达到和nums数组…

动态规划DP之背包问题2---完全背包问题

目录 DP分析: 状态转移方程: 代码: 例子: 与 01背包问题 不同点在于,每种物品可以使用无限次。 有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。 第 i 种物品的体积是 vi,价值是…

CV论文--2024.3.1

1、UniMODE: Unified Monocular 3D Object Detection 中文标题:UniMODE: 统一的单目三维物体检测 简介:实现统一的单目3D物体检测对于机器人导航等应用至关重要,涵盖了室内和室外场景。然而,训练模型需要涉及各种场景的数据&…

解决ODOO12 恢复数据库提示内存不够报错

1. 现象 点击 ‘restore database’ 控制台报错: 2. 解决措施 a. 进入启动脚本的文件夹 cd odoo/odoo-12.0/输入命令 ./odoo-bin --addons-pathaddons --databaseodoo --db_userodoo --db_passwordodoo --db_hostlocalhost --db_port5432 -i INITb. 刷新页面…

巧用眼精星票证识别系统将车辆合格证快速转为结构化excel数据,简单方便

眼精星票证识别系统是一款高效且精准的OCR软件,它的魔力在于能将纸质文档迅速转化为电子文档,并实现自动化的数据结构化处理。它拥有一双"火眼金睛",无论是各类发票、护照,还是车辆合格证等,都能一一识别。而…

谷歌seo推广秒收录怎么做?

谷歌SEO推广秒收录想要做到,可以利用我们光算科技独家技术,GSI快速收录,通过技术手段和操作,帮你的网站快速被谷歌发现和记录 这项技术具体核心就是GPC爬虫池系统,这个系统是专门研究谷歌搜索引擎优化的规律和算法创造…

vulhub中Tomcat PUT方法任意写文件漏洞复现(CVE-2017-12615)

漏洞原理 漏洞本质Tomcat配置了可写&#xff08;readonlyfalse&#xff09;&#xff0c;导致我们可以往服务器写文件&#xff1a; <servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</s…

Rocky Linux 安装部署 Zabbix 6.4

一、Zabbix的简介 Zabbix是一种开源的企业级监控解决方案&#xff0c;用于实时监测服务器、网络设备和应用程序的性能和可用性。它提供了强大的数据收集、处理和可视化功能&#xff0c;同时支持事件触发、报警通知和自动化任务等功能。Zabbix易于安装和配置&#xff0c;支持跨平…

SD NAND:为车载显示器注入智能与安全的心脏

SD NAND 在车载显示器的应用 在车载显示器上&#xff0c;SD NAND&#xff08;Secure Digital NAND&#xff09;可以有多种应用&#xff0c;其中一些可能包括&#xff1a; 导航数据存储&#xff1a; SD NAND 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…

[数据集][目标检测]鸡蛋破蛋数据集VOC+YOLO格式792张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;792 标注数量(xml文件个数)&#xff1a;792 标注数量(txt文件个数)&#xff1a;792 标注类别…

了解处理器

了解处理器 摘要写在前面1. 计算机简介1.1.计算机发展简史1.2.计算机分类1.3.PC机结构 2.初识处理器2.1.处理器的硬件模型2.2.处理器的编程模型2.3.处理器的分层模型2.4.如何选择处理器 3.指令集体系结构3.1.处理器编程模型3.2.指令集发展历程3.3.指令集分类3.4.汇编语言格式3.…