type
status
date
slug
summary
tags
category
icon
password
应用程序中有许多数据需要加密,例如数据传输过程中的数据加密、密码的存储和验证、序列号的验证。而在密码学中已有许多成熟的加密算法,在逆向程序时,如果对加密算法有了解,就可以更快地编写出注册机。

密码学相关知识:

在对各个算法进行分析前,首先大致介绍一下密码学的基础知识:
加密算法可以分为三类:对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)以及单项散列算法(Single-item Hash Algorithm).
对称加密即使用一个密钥来加密和解密信息,发送方和接收方使用相同的密钥,所以安全性取决于密钥的安全性,DES、3DES、AES、RC4、IDEA等均属于对称加密算法。
非对称加密也称为公钥加密,它使用一对公钥和私钥,每个用户有一对公钥和私钥,公钥加密的内容只有私钥才能解开,RSA、DSA、ECC等均属于非对称加密算法。
最后单项散列算法是将任意长度的消息压缩为固定长度的摘要,常见的有MD5、SHA-1、SHA-2、SHA-256等,它们只能用于加密,不能用于解密。
notion image
上图是平常刷题和比赛常见的一些加密算法分类,一些古典密码的实现原理在此不过多赘述,下面主要分析分组加密、流密码、非对称加密、单向散列算法的密码学原理和逆向方法。

一、分组密码:

也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。
分组密码通常由四个部分组成:加密模式、密钥、初始向量和填充算法。这些组件共同确定加密数据块的方式。加密模式确定了加密的模式,密钥用于控制加密的强度,初始向量用于避免重复的模式,而填充算法用于确保最后输出的数据大小与输入的数据大小一致。
分组密码的工作模式主要有:分组加密模式(ECB模式)、电子代码本模式(CBC模式)、计数器模式(CTR模式)和输出反馈模式(OFB模式)。其中ECB模式是最常用的模式,它简单易用,但是存在着明文攻击的风险。CBC模式和CTR模式则可以有效防止明文攻击,但是比ECB模式费时费力。OFB模式则是用到了流密码的思想,它可以有效防止密码泄露。
分组加密工作模式简介

1.DES加密:

Data Encryption Standard(DES),数据加密标准,是典型的块加密,其基本信息如下:
  • 将要机密的明文分成n个64 位的数据块进行输入
  • 加密后的密文同样为 64 位
  • 密钥长度为 64 位,使用 64 位密钥中的 56 位进行加密(原始密钥中每字节的最高位是没有被使用的),剩余的 8 位要么丢弃,要么作为奇偶校验位
  • Feistel 迭代结构:
    • 明文经过 16 轮迭代得到密文
    • 密文经过类似的 16 轮迭代得到明文
🕵️‍♂️
DES加密原理分析
逆向特征总结:
  1. 密文的长度必须是0x08字节的倍数。
  1. 秘钥的长度必须是 0x08字节。
  1. 可以尝试找一些表的特征比如循环左移表,置换表等等。

2.AES加密:

AES加密算法,作为代替DES加密的一种分组加密算法,其使用的并不是feistel结构。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示:
AES
密钥长度(32bytes)
分组长度(32bytes)
加密轮数
AES-128
4
4
10
AES-192
6
4
12
AES-256
8
4
14
🕵️‍♂️
AES加密原理分析

3.TEA加密

"TEA" 的全称为"Tiny Encryption Algorithm",是一种微型加密算法。TEA算法使用64位的明文分组和128位的密钥,使用feistel分组加框架,需要进行32轮循环得到最后的64位密文,其中magic number DELTA是由黄金分割点。
🕵️‍♂️
TEA算法加密原理分析
🕵️‍♂️
TEA系列逆向特征及实例
恶意代码分析软件分析与破解