逆向分析中的密码学---tea

0x01 简介

TEA全称Tiny Encrypt Algorithm。在CTF逆向分析中经常会出现Tea或者魔改了DELTA的TEA算法。

0x02 算法原理

明文长度分组为64位(8字节),密钥长度为128位(16字节),明文和密钥进入32轮循环,得到最后的64位密文。其中magic number DELTA是由黄金分割点得到。
算法比较简单源码如下

#include<stdio.h>
#include<stdint.h>
#define DELTA 0x9981abcd

void tea_encrypt(unsigned int* v, unsigned int* key) {
  unsigned int l = v[0], r = v[1], sum = 0;
  for (size_t i = 0; i < 32; i++) { //进行32次迭代加密,Tea算法作者的建议迭代次数
    l += (((r << 4) ^ (r >> 5)) + r) ^ (sum + key[sum & 3]);
    sum += DELTA; //累加Delta的值
    r += (((l << 4) ^ (l >> 5)) + l) ^ (sum + key[(sum >> 11) & 3]); //利用多次双位移和异或将明文与密钥扩散混乱,并将两个明文互相加密
  }
  v[0] = l;
  v[1] = r;
}

void tea_decrypt(unsigned int* v, unsigned int* key) {
  unsigned int l = v[0], r = v[1], sum = 0;
  sum = DELTA * 32; //32次迭代累加后delta的值
  for (size_t i = 0; i < 32; i++) {
    r -= (((l << 4) ^ (l >> 5)) + l) ^ (sum + key[(sum >> 11) & 3]);
    sum -= DELTA;
    l -= (((r << 4) ^ (r >> 5)) + r) ^ (sum + key[sum & 3]);
  }
  v[0] = l;
  v[1] = r;
}


int main(int argc, char const *argv[])
{
    unsigned int key1[4]={0xa3eeb7be,0x50e7de9a,0x6dbcc2bc,0x78591fad};//key1
    unsigned int key2[4]={0x78591fad,0x6dbcc2bc,0xa3eeb7be,0x50e7de9a};//key2
    unsigned int v1[2] = {0x556E2853,0x4393DF16};
    unsigned int v2[2] = {0x1989FB2B,0x83F5A243};
    
    //encrypt(v1,key1);
    //printf("tea_encrypt:%x %x\n",v1[0],v1[1]);
    //encrypt(v2,key2);
    //printf("tea_encrypt:%x %x\n",v2[0],v2[1]);
    tea_decrypt(v1,key1);
    printf("tea_decrypt:%x %x\n",v1[0],v1[1]);
    tea_decrypt(v2,key2);
    printf("tea_decrypt:%x %x\n",v2[0],v2[1]);
    return 0;
}

//tea_decrypt:c0cacd59 38bb7623
//tea_decrypt:8757d16 a520cece
}

0x03 逆向分析识别tea算法

这次我在windows上用gcc tea.c -o tea.exe编译生成对应的程序。
利用PEiD的插件KANAL识别,能够识别出存在tea算法
在这里插入图片描述
下面用ida pro来识别一下tea算法。能够识别到tea中的常数,DELTA,
在这里插入图片描述
tea_encrypt
tea算法最关键的是要找到DELTA值和128位的key。
key明显是传进来的参数a2,当然程序的key不是参数传入,(4i64 * (v4 & 3) + a2) 可以知道a2是一个int数组,就是key
DELTA的识别,分析成的v4 -= 0x61C88647而不是我们源码中的sum += DELTA; ,通过简单计算可以得到v4 -= 0x61C88647v4 += 0x9e3779b9 是等价的
在这里插入图片描述

0x04 逆向分析识别魔改tea算法

tea算法可以魔改的地方主要是DELTA值,很多时候都会将这个值修改,让很多加密算法识别软件失效。下面就将DELTA魔改为0x1234567。
利用PEiD的插件KANAL识别,因为DELTA被修改了所以无法识别
在这里插入图片描述
ida pro也没有识别出来
在这里插入图片描述
tea_encrypt
关键还是DELTA和key的识别。有对源码的了解可以很容易的识别出DELTA为0x1234567,key为a2

0x05 总结

如果tea没有魔改,通过插件就能识别到对应的。
如果tea被魔改过,可以通过算法的结构找到DELTA和key

参考
《加密与解密第四版》

CVE-2020-0796漏洞,也被称为"SMBGhost",是一个影响微软Windows操作系统的严重漏洞。该漏洞存在于Windows 10版本1903和1909之间的SMBv3协议,攻击者可以利用此漏洞执行远程代码,从而控制受感染的系统。 对CVE-2020-0796漏洞进行逆向分析是为了深入了解其工作原理及漏洞利用的具体细节。逆向分析通常包括静态和动态分析两个方面。 首先,静态分析是通过对漏洞程序的反汇编、分析源代码或查看二进制文件等方法来了解漏洞的工作原理。这可以帮助研究人员识别漏洞的关键功能、漏洞的出现位置以及可能的漏洞利用方式。 其次,动态分析是在虚拟化环境或实际受感染的系统上运行漏洞程序,监视其行为并捕获关键信息。通过动态分析,研究人员能够观察到漏洞利用的具体过程,从而理解攻击者是如何利用漏洞来执行远程代码或获取系统权限的。 在逆向分析过程,研究人员需要使用一些特定的工具,如反汇编器、调试器以及网络分析工具等。这些工具可以帮助研究人员获取漏洞程序的内部结构、系统调用、网络通信等关键信息,有助于理解漏洞的利用方式和脆弱点。 通过逆向分析CVE-2020-0796漏洞,能够帮助安全专业人员更好地理解漏洞的工作原理,从而开发相应的补丁或安全措施以防止攻击者利用该漏洞入侵系统。此外,逆向分析还有助于提高安全分析人员的能力和知识,进一步提升网络安全的整体水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值