CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨

2024-05-08 22:04

本文主要是介绍CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

博主在刷题过程中遇上这样一个有意思的加密(如下图),苦苦思索其逆向运算,被硬控了很久,也没搜到什么资料来解释这个问题(也许是太简单??蒟蒻博主怀疑人生……)

经过博主不断猜想、写代码验证再配合已有的位运算知识,也算是总结出一些规律

直接先上结论:这个加密是(伪)对称加密,其解密就是加密本身!

此处的(伪)对称加密指的是,使用该函数加密、再解密的结果只有映射到ASCII表中才是对称的,即仅对字符数组满足对称加密


一,加密特征

本文标题其实已经揭露了该加密的特征,就是(x<<4) | (x >>4)

注意这里的4,很有可能被题目以其它等价运算的形式表现出来,例如<<4改成*16>>4改成/16等等

博主目前只遇到过左右移4的情况,但经过测试发现,位移操作数若是(4,8,12,16,24)这里面的数,也满足对称加密,但要注意的是,左右移的操作数应为同一个数,即不能是(x<<4) | (x>>8)这样的情况(左右移争对的是两个不同的数)

(注:32也满足,但按照位移运算的定义,左右移32位对于32位整数来说相当于未操作,因此不列入)

结论:f(x)=(x<<shift) | (x>>shift)且shift属于集合(4,8,12,16,24),则f(x)的结果映射到ASCII表(0,127)中是对称加密。


二,(伪)对称验证

#include <bits/stdc++.h>
using namespace std;
int func(int x) {int shift = 4;return (x << 8) | (x >> 8);//4,8,12,16,24
}
int main() {int x = 99;cout << "明文: " << x << " " << (char)x << endl;x = func(x); //加密cout << "密文: " << x << endl;x = func(x); //解密cout << "二次加密(伪明文): " << x << endl;cout << "伪明文%128: " << x % 128 << " " << (char)(x % 128) << endl; //将解密得到的伪明文%128(映射到ASCII码表)return 0;
}

 因此,在逆向分析过程中遇到满足此特征的加密,即可认为是(伪)对称加密,可直接使用原函数进行解密,但要牢记的是解密得到的结果应该%128(映射到ASCII码表)才是正确明文


三,证明过程

博主不是什么专业的密码学或数学学者,只能从位运算的本质出发,通过对比加解密后的结果明文的差异来得出结论

(或运算的规则:同位有1则1,同位都0则0)

函数f(x)=(x<<4) | (x>>4)

明文:        0000 0000 0000 0000 0000 0000 0001 0000

①明文<<4: 0000 0000 0000 0000 0000 0001 0000 0000

②明文>>4: 0000 0000 0000 0000 0000 0000 0000 0001

①|②:       0000 0000 0000 0000 0000 0001 0000 0001    <-此时完成加密得到密文

c密文<<4:0000 0000 0000 0000 0001 0000 0001 0000

d密文>>4:0000 0000 0000 0000 0000 0000 0001 0000

c|d:           0000 0000 0000 0000 0001 0000 0001 0000    <-此时完成解密得到伪明文

此时我们重点关注被f(x)加密再解密的结果与明文的差异:

明文:        0000 0000 0000 0000 0000 0000 0001 0000

c|d:           0000 0000 0000 0000 0001 0000 0001 0000(伪明文)

明文的十进制值为16,伪明文的十进制值为4112,满足4112%128=16

从它们的二进制值也能直观看出,伪明文与明文仅差在第13位(红色部分),而128等于2的8次方,因此模128的结果只会剩下最后8位(绿色部分),也就和明文一致了

根据该思路,不难证明当shift属于集合(4,8,12,16,24)中的数时,均满足此规律,此处便不再赘述

这篇关于CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

关于MyISAM和InnoDB对比分析

《关于MyISAM和InnoDB对比分析》:本文主要介绍关于MyISAM和InnoDB对比分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录开篇:从交通规则看存储引擎选择理解存储引擎的基本概念技术原理对比1. 事务支持:ACID的守护者2. 锁机制:并发控制的艺

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis