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

上一章中我们带领大家了解了加密算法——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. 对中间轮数的加密顺序进行更改。

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shad0w-2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值