【CTF-Reverse中的加密算法】密码算法特征识别,变种密码算法分析

news2024/11/23 15:26:08

上一章中我们带领大家了解了加密算法——RC4,TEA,Base64算法的原理,但是加密算法远不止这些,需要大家自行去学习,在这一章中,我来带领大家了解密码算法特征识别,变种密码算法分析。

一.密码算法特征识别

1.什么是特征常量

在我们逆向过程中,经常遇到一些开源的代码,如果我们能找到这些开源的代码,可以减少很多工作量。
例如:AES算法对于初学者来说非常复杂,如果初学者未曾学习过AES代码,那么它将很难看懂IDA生成的AES伪代码。如果这道这段代码是AES后,就可以使用AES开源的代码或者其他的材料作为逆向参考,降低逆向的难度。

  • 如何找到某段代码中的开源代码?
    一般来说,我们会使用特征常量作为关键字搜索。特征常量是算法中用到的特征整数或字符串数组。

  • 常见特征常量:

    • 整数特征
    • 字符串特征
    • 字节数据特征

    我们在使用IDA的时候,也可以安装FindCrypt插件来自动分析算法常量。

  • 除了加密算法以外,还有其他代码的特征常量一可以用于源码查找:

    • 例如:sqlite3库有大量的字符串常量,用这些字符串常量可以确定:
        1. 程序使用了sqlite3库
        1. 确定部分关键sqlite3的函数名

二. 变种密码算法分析

1. 变种 RC4

我们先来看看上一篇文章中讲解到的RC4加密算法魔改方法:

  • 由于RC4的加密就是生成密钥流和输入进行异或,所以通常魔改就是添加一些可逆预算。
    1. 魔改初始化算法,可以将S盒初始化值不设置为0-255,可以设置为其他的,也可以在s的初始置换过程添加可逆计算。
    1. 由于最后加密flag是利用密钥流来进行单字节加密的,所以也有人在这个地方加一些可你运算来进行魔改。

2. 变种TEA

常见的魔改方法:

    1. 将dalta的值进行修改,不咋是默认的0x9e3779b9
    1. 在每轮的迭代加密中添加可逆运算
    1. 在迭代完之后,再赋值回去的时候,添加可逆运算
  • 实际上还有一些加密模式的TEA:
    CBC模式的TEA:CBC模式(Ciphre Block Chaining):其实主要就是将明文分组与前一个密文分组进行异或运算,然后再进行加密,对于第一组的话就iu是设置一个初始值来和第一组明文进行异或。
    比如:CBC模式循环加密64字节,每次循环加密8个字节:
    CBC模式TEA
    每一轮是get_data取我们的v0hev1,data1和data2和v0或v1异或,异或之后的data1和data2传入指针进行TEA加密,之后再将加密后的赋值回我们的v0和v1。
  • 我们理解了CBC模式的TEA之后,我们该如何逆向它呢?首先我们是有每一轮加密后的v0和v1的,就是加密数据,TEA我们也是能够逆向的,那么就剩下逆向每一轮的data1=0和data2=v1了,而后面的轮数的data1和data2是会被我们的加密结果更新的,我们只有第一轮的data1和data2,那么我们就从这个地方下手,先解密第一轮得到第一轮的v0和v1明文,再重新去加密更新data1和data2用于下一轮的加密。

三. 变种AES

1. AES常见的魔改:

    1. 字节代换的时候使用逆S盒进行代换
    1. 对行位移进行魔改,状态矩阵的第0行左移0字节,第一行左移1字节,第二行左移2字节,第三行左移3字节,每一行的元素左移的字节数是可以更改的。
    1. 对列混合进行魔改,虽然可以,但是一般不会有人这样做,状态矩阵与固定的矩阵相乘后得到混淆后的状态矩阵,如果这个固定矩阵被更改,那么求你想的时候要重新计算另外一个矩阵。
    1. 对中间轮数的加密顺序进行更改。

这篇文章的分享就到这里,对于逆向过程中的算法,还是需要大家多多实战练习。

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

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

相关文章

详解MySQL的常用数据类型

文章目录 一、MySQL 数据类型1.1、mysql中编码和字符 二、数值类型2.1、整数类型的长度2.2、浮点型 三、字符串类型3.1、字符串类型长度 四、日期和时间类型4.1、DATETIME 五、二进制数据类型六、使用建议 一、MySQL 数据类型 MySQL支持很多数据类型,以便我们能在复…

实现定时任务

1 问题 定时任务中,每天统计一下今日博客的各项数据,并以邮件的形式发送给自己。 2 方法 .首先在某目录下新建任务文件 crontest.cron,用于存在定时任务语句。.相同目录新建 hello.py 文件,并且编辑这个文件写一句简单的 print(He…

【JUC进阶】05. 偏向锁

目录 1、前言 2、偏向锁 2.1、基本原理 2.2、使用场景 3、获取偏向锁 4、何时撤销 4.1、到达安全点 4.2、其他线程尝试竞争偏向锁 4.3、重新计算hashcode 5、小结 1、前言 偏向锁是Java并发编程中一种重要的锁机制,它针对特定的线程进行优化,…

项目集活动—项目集收尾阶段活动

项目集收尾阶段活动从项目集组件完成了所有输出的交付,且项目集开始交付预期效益。某些情况下,项目集治理可能决定在所有组件完成之前就提前执行项目集收尾。无论哪种情况,此阶段项目集活动的目标都是释放项目集资源,支持将剩余项…

区分BOM和DOM,区分window、document、html、body

https://blog.csdn.net/xswl134679/article/details/128795161 JavaScript三大组成部分 1. ECMAScript ECMAScript是JavaScript的语法标准,由ECMA(欧洲计算机厂家协会)制定的。 2. BOM BOM即浏览器对象模型(brower object mode…

Contrastive Learning in Image (CVPR 2023)

文章目录 1. Open Vocabulary Semantic Segmentation with Patch Aligned Contrastive Learning (图文匹配)1.目标2.任务类型3.解决思路4. 总结 2. MaskCLIP: Masked Self-Distillation Advances Contrastive Language-Image Pretraining (图…

数学模型在水环境评价、防洪评价、排污口论证、水质、水量、水生态、水动力等方面的应用

目录 专题一、一维水动力模型模拟一河道水流的应用 专题二、一维复杂河网模型构建及建筑物设置 专题三、一维水质模型在环境影响评价中的应用 专题四、平面二维水动力模型的构建河验证 专题五、平面二维水动力模型在防洪影响评价中的应用 专题六、平面二维水动力水质模型…

抖音kol投放模型怎么打造,营销策略规划

这是一个内容为王的时代,想要在小红书这种内容平台做好内容营销,一定要了解抖音kol投放模型怎么打造,营销策略规划。 一、如何进行kol投放 品牌想要完成一次高效而准确的完成kol投放模型,需要完整的品牌投放策略。针对于小红书平台…

如何驯化机器狗读懂人类手势,手把手教你!

作为全国普通高校大学生竞赛榜单内竞赛,“中国软件杯”大学生软件设计大赛-智能四足机器狗电力巡检系统开发赛项,目前已吸引了全国2041支队伍参加。经过激烈的目标检测与分割算法打榜赛,最终,有153支团队成功晋级区域赛。在即将于…

知乎财报预测:知乎2023年Q2收入将继续下滑,净亏损将扩大一倍

来源:猛兽财经 作者:猛兽财经 华尔街分析师对知乎2023年第二季度财报的预测 在5月24日发布第一季度业绩时,知乎(ZH)并未对2023年第二季度或2023财年全年提供任何具体的指引。但目前卖方分析师的一致财务预测表明&…

F-35飞控系统详解

基于非线性动态逆(NDI)的控制律 1. F-35飞控控制律 F-35采用了由三台冗余机载管理计算机(VMC,Vehicle Management Computers)中运行的非线性动态逆控制架构来提供电传飞行控制。F-35的控制律不仅能增强飞机动力学特性实现增稳,还…

java学习记录之JDBC2

1 JDBC回顾  Statement 语句执行者 Connection conn null; Statement st null; ResultSet rs null; try{ //1 通过工具类获得连接 conn JdbcUtils.getConnection(); //2 获得语句执行者 st conn.createStatement() --> 参数 结果集类型、并发参数 (滚动结…

如何在 Spring Boot 中使用定时任务

如何在 Spring Boot 中使用定时任务 引言 在实际的项目中,我们经常需要编写定时任务来执行一些周期性的任务,比如定时备份数据库、定时发送邮件等。在 Spring Boot 中,我们可以使用 Spring 的 Task Execution 和 Scheduling 来实现定时任务…

用BERT做命名实体识别任务

命名实体识别NER任务是NLP的一个常见任务, 它是Named Entity Recognization的简称。 简单地说,就是识别一个句子中的各种 名称实体。 诸如:人名,地名,机构 等。 例如对于下面这句话: 小明对小红说:"你…

佩戴舒适度的蓝牙耳机品牌有哪些?佩戴舒适性蓝牙耳机排行榜推荐

​对于年轻人来说,耳机使用场景丰富,时尚追求度高,喜好的音乐类型也是多种多样,需求侧重也不尽相同。下面我来推荐几款相当不错的蓝牙耳机给大家,总会有喜欢那款! 一、南卡OE PRO开放式耳机 南卡OE PRO是国…

带你阅读 Flutter Demo(flutter 保姆级入门教程)

dart、flutter Flutter Demo 解析 - 文章信息 - Author: Jack Lee (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChineAddress of this article:https://blog.csdn.net/qq_28550263/article/details/xxxxxx 【介绍】:本…

RFID技术的革新与应用:连接智能物联网的关键

在日益数字化的时代,物联网(IoT)技术正迅速发展,并为我们的生活带来了无数的便利。而射频识别(RFID)技术作为物联网的关键支撑之一,正在推动着智能化、自动化的进程。本文将深入探讨RFID技术的基…

INTERSPEECH 2023论文|基于自监督学习表示的具有持久性口音记忆的口音识别

论文题目: Self-supervised Learning Representation based Accent Recognition with Persistent Accent Memory 作者列表: 李睿,谢志伟,徐海华,彭亦周,刘和鑫,黄浩,Chng Eng Sio…

神州设备IPV6路由综合运用

实训拓扑图 一、基本配置: SW-1: SW-1>ena SW-1#conf SW-1(config)#vlan 10;100 SW-1(config)#int l1 SW-1(config-if-loopback1)#ip add 1.1.1.1 255.255.255.255 SW-1(config-if-loopback1)#ipv6 add 2001:1::1/128 SW-1(config-if-loopback1)#exit

前端系列18集-权限,nginx成功,屏幕分辨率,vue3

vue3.0 使用原生websocket通信 // Websoket连接成功事件const websocketonopen (res: any) > {console.log("WebSocket连接成功", res);};// Websoket接收消息事件const websocketonmessage (res: any) > {console.log("数据", res);};// Websoket…