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

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

那么本文就介绍一下这个功能点

条件断点

什么是条件断点呢?

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

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

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

初次分析

main函数

flag的格式

02707da462f6cc2abca6a2a49567f2ec.jpeg

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

bce396d94a8918db43f2b2a1fd9bbd1b.jpeg

继续分析

bbac993be667306cbd3db85702c591f7.jpeg

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

密文:

48df43c911306b2ca2a9809330652994.jpeg

cry1

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

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

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

d1cc3bfdc5f1c3f4201fbc96bb175e3f.jpeg

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

be0389aa6743559adaec8e57d42978f3.jpeg

初次分析到此结束

cry2

7c7cf643e027c1a360f8125ecb106554.jpeg d482f20bb83b9f78bd4b31c218910b8b.jpeg

条件断点妙用

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

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

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

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

使用了:条件断点

86e3b15b063c3406e1e694b78797823b.jpeg

这三个断点依次使用下面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")

4d07250ff41593afca27bba7cf92f0b2.jpeg

然后edit breakpoint

a63016f9251379253b3eebe9fbcda669.jpeg 368b260c4b079bc1738e13495f72cf22.jpeg

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

86c5d2b928c73fa50e1c0fa0a340b9bc.jpeg

推导

因为密文说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

2c3ce5b11d6b03aa5a770e8e0e5d6300.jpeg

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('无解')

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

3f886178fbed31da9300d0d7b1ad468a.jpeg

得到


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

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

9389ff49b08acc52f93c5b0e7d3b9143.jpeg

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

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

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

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

bc02b6d893b370a884be40d0353e4459.jpeg

成功验证!

603f4e2ffcd33e4f6b2beaeac84b68ae.jpeg

原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:edu@antvsion.com

文章类型:黑客极客技术、信息安全热点安全研究分析等安全相关

通过审核并发布能收获200-800元不等的稿酬。

更多详情,点我查看!

c9285e03a7fc238bb4f4efd67b2e61a8.gif

靶场实操,戳"阅读原文"

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kaggle竞赛入门级---泰坦尼克号飞船(0.80)

由于数据集需要翻墙,先附上数据集 链接:https://pan.baidu.com/s/10MTlK_3kXMRw6JsSTT8tVg?pwd6666 提取码:6666 注意正文会讲述我的步骤处理思路(代码可能并不会完整的放在正文中(这过于繁琐了)&#…

ArmSoM Rockchip系列产品 通用教程 之 HDMI-IN使用

1. HDMI-IN简介 HDMI IN功能可以通过桥接芯⽚的⽅式实现,将HDMI信号转换成MIPI信号接收RK3588芯⽚平台⾃带HDMI RX模块,可以直接接收HDMI信号,无需通过桥接芯⽚实现。在ArmSoM系列产品中,ArmSoM-W3支持HDMI-IN功能HDMI-IN功能框图…

华大基因护航沙特“2030愿景”实现,将“中国技术”带到中东市场

沙特“2030愿景”提出,要将国民平均寿命从74岁提高到80岁。沙特人民日益增长的医疗健康需求亟待更加全面、高效的医疗卫生体系。2023年,在沙特首都利雅得,由华大基因沙特全资子公司与当地合作方共同成立的综合精准医学检验实验室Genalive开业…

基于单片机的数字温度计设计

目 录 摘 要 I Abstract II 引 言 1 1 整体方案设计 3 1.1 主控芯片类型选择 3 1.2 测温电路选择 3 1.3 系统总体方案 4 2 系统的硬件电路设计 5 2.1 单片机系统设计 5 2.2 显示模块设计 8 2.3 温度读取电路的设计 10 3 系统软件设计 13 3.1 软件开发环境的介绍 13 3.2 系统重…

图像分类技术在城市垃圾分类与处理中的应用与实践

一、引言 在当今世界,城市化进程不断加快,随之而来的是日益增长的垃圾处理压力。城市生活垃圾、工业固体废物和危险废物的处理已经成为环境保护领域的一大挑战。为了应对这一挑战,卫生填埋、垃圾堆肥和垃圾焚烧等技术路线应运而生。其中&…

(文末送书)直击前沿技术:《低代码平台开发实践:基于React》

目录 前言 一、React与低代码平台的结合优势 二、基于React的低代码平台开发挑战 三、基于React的低代码平台开发实践 四、书籍推荐 《低代码平台开发实践:基于React》 1、图书介绍 2、适用人群 3、 作者简介 4、写书原由 5、解决问题 6、书…

2024年冲刺年薪40w,java面试常问知识点

前言 刚刚过去的双十一,让“高性能”“高可用”“亿级”这3个词变成了技术热点词汇,也让很多人再次萌发成为「架构师」的想法。先问大家一个问题:你觉得把代码熟练、完成需求加上点勤奋,就能成为架构师么?如果你这么认…

数据结构详解①——诸论

目录 前言 引入: 基本概念和术语 数据 数据元素 数据项 数据对象 数据结构 逻辑结构 物理结构 数据类型 为什么要设计出来数据类型呢? 数据类型的分类 抽象数据类型 数据结构与算法的关系 算法 定义 特性 设计要求 效率度量方法 事…

nodejs版本管理工具nvm安装和环境变量配置

1、下载nvm.exe https://github.com/coreybutler/nvm-windows/releases2、安装 1.在D盘根目录新建一个dev文件夹,在dev里面再新建一个nodejs。 2.双击下载好的nvm.exe 修改文件路径,且路径中不能有中文 3.安装完成后在D:\dev\nvm打开settings.txt&…

网络信息安全:11个常见漏洞类型汇总

一、SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。 在设计程序,忽略了对输入字符串中夹带的SQL指令的检查&…

C语言写学生信息管理系统

说明:本博文来自CSDN-问答板块,题主提问。 需要:用C语言设计一个学生信息管理系统(尽量不使用指针),学生信息包括学号,姓名,数学成绩,C语言成绩,英语成绩和每个学生的总成绩这几项。系统要实现如下几个功能:1.添加学生2.删除学生3.修改学生信息4.查询学生信息5进行学…

阿里云服务器ECS u1实例性能怎么样?有用过的吗?

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xff0c…

自学高效备考2024年AMC10:2000-2023年1250道AMC10真题解析

我们今天继续来随机看5道AMC10真题,以及详细解析,这些题目来自1250道完整的官方历年AMC10真题库。通过系统研究和吃透AMC10的历年真题,参加AMC10的竞赛就能拿到好名次。即使不参加AMC10竞赛,初中和高中数学一定会学得比较轻松、游…

【深度学习应用】基于Bert模型的中文语义相似度匹配算法[离线模式]

1、准备中文离线模型 配置文件夹 文件获取方法: 访问官网:https://huggingface.co/bert-base-chinese/tree/main 下载以下文件 2、测试代码 # -*- coding: utf-8 -*- #pip install transformers -i https://mirrors.aliyun.com/pypi/simple/ #pip …

在整个价值链构建负责任的 AI

在整个价值链构建负责任的 AI:从数据到部署,以合乎伦理道德的方式构建 AI 构建合乎伦理道德的 AI 是所有人工智能企业的责任,这一点再怎么强调都不为过。负责任或合乎伦理道德的 AI 能够做到公正、公平,并能改善AI服务人群的生活…

2024年主攻外贸爆款产品,聚焦10个重要国家

2024年中企出海趋势明显,中小微企业纷纷布局。提供15个国家重点进口产品供参考,助力选品和行业开发。 以下是15个重点国家的爆款产品: 一、美国进口频次前10位 二、俄罗斯进口频次前10位 三、英国进口频次前10位 四、越南进口频次前10位 五…

Claude 3超越GPT-4?Anthropic发布新一代AI模型,Opus在多领域展现行业新水准,你不得不看的全面解析!

Anthropic发布了新一代AI模型——Claude 3。 这个系列包括Haiku、Sonnet和Opus三个模型。 特别是Opus,在多个基准测试中,它的表现都超过了我们熟知的GPT-4和Gemini 1.0 Ultra。 在数学、编程、多语言理解和视觉处理等多个方面,Opus都展现了…

期货开户交易切勿满仓操作

平时我们交易主要是仓位管理风险,切勿不要满仓操作,满仓相当于一锤子买卖,我们做交易要有交易计划,计划中除了开仓点.止损点.止盈点外,还有加仓点,所以我们要留下充足的加仓仓位,有很多投资者是…

如何处理Docker容器占用空间不断变大

在使用Docker容器时,一个常见的问题是容器占用的空间会不断增大,导致磁盘空间的快速耗尽。这种情况可能会给系统带来不必要的负担,因此需要及时处理。本文将介绍一些解决Docker容器占用空间不断增大问题的方法。 首先,我们需要了…

基于vgg16进行迁移学习服装分类

pytorch深度学习项目实战100例 的学习记录 我的环境: 白票大王: google colab 用其他的话,其实实现也行,但是让小白来重环境来开始安装的话,浪费时间 数据集 Clothing dataset 20 个不同类别的 5000 多张图片。 该…