首页
社区
课程
招聘
[求助]tea解密脚本哪写错了
发表于: 2024-12-13 21:54 1667

[求助]tea解密脚本哪写错了

2024-12-13 21:54
1667

RT,不知道哪里写错了,求各位大佬解答
孩子已经干了一下午了,明明看着很简单,5555555

伪代码:
图片描述
图片描述
图片描述

我写的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdint.h>
#include <stdio.h>
 
void decrypt(uint32_t *buf, uint32_t *key) {
    int i;
    uint32_t v4, v5, sum;
     
    for (i = 3; i >= 0; --i) {
        v4 = buf[2 * i];
        v5 = buf[2 * i + 1];
        sum = 0x61C88647 * 32;
 
        for (unsigned int j = 0; j < 32; ++j) {
            v5 -= (v4 + sum) ^ (16 * v4 + key[2]) ^ ((v4 >> 5) + key[3]);
            v4 -= (v5 + sum) ^ (16 * v5 + *key) ^ ((v5 >> 5) + key[1]);
            sum += 0x61C88647;
        }
         
        buf[2 * i] = v4;
        buf[2 * i + 1] = v5;
    }
}
 
int main() {
    uint32_t key[4] = { 2, 2, 3, 4 };
    uint32_t enc[8] = { 0xA85BBFA5, 0xB21C2C6A, 0xE29C1A1B, 0xCE7F8AAF,
                        0xAC46CCDC, 0x9A13C658, 0x803986D2, 0xAB72607A };
     
    decrypt(enc, key);
 
    for (int i = 0; i < 8; i++) {
        printf("buf[%d] = 0x%X\n", i, enc[i]);
    }
 
    return 0;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2024-12-13 22:38 被hopeee编辑 ,原因:
上传的附件:
收藏
免费
支持
分享
最新回复 (6)
雪    币: 2176
活跃值: (2147)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2

算法没有魔改过,直接原解密算法套过来解一下就好了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdint.h>
 
void decrypt(uint32_t *v, uint32_t *k)
{
    uint32_t v0 = v[0], v1 = v[1], i;
    uint32_t delta = 0x9e3779b9;
    uint32_t sum = delta * 32;
    uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3];
    for (i = 0; i < 32; i++)
    {
        v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
        v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
        sum -= delta;
    }
    v[0] = v0; v[1] = v1;
}
 
int main() {
    uint32_t key[4] = { 2, 2, 3, 4 };
    uint32_t enc[8] = { 0xA85BBFA5, 0xB21C2C6A, 0xE29C1A1B, 0xCE7F8AAF,
                        0xAC46CCDC, 0x9A13C658, 0x803986D2, 0xAB72607A };
     
    for (int i = 0; i < 8; i+=2)
        decrypt(enc + i, key);
  
    printf("%s", enc);
    // flag{tea_is_very_easy_Rry_solve}
    return 0;
}
2024-12-13 23:09
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
TubituX 算法没有魔改过,直接原解密算法套过来解一下就好了 ```c #include #include void decrypt(uint32_t *v, uint32_t *k) { ...
但是为啥我ida的那个delta值转16进制不是0x9e3779b9,而是被魔改过的0x61C88647
2024-12-13 23:23
0
雪    币: 2176
活跃值: (2147)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
注意变量类型,-0x61C88647 和 +0x9e3779b9计算出来实际上是一样的
2024-12-13 23:29
0
雪    币: 2176
活跃值: (2147)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
hopeee 但是为啥我ida的那个delta值转16进制不是0x9e3779b9,而是被魔改过的0x61C88647

你切到汇编视图就能看到是0x9e3779b9了,只是IDA反编译问题而已,实际上一样的

最后于 2024-12-13 23:32 被TubituX编辑 ,原因:
2024-12-13 23:31
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
TubituX 算法没有魔改过,直接原解密算法套过来解一下就好了 ```c #include #include void decrypt(uint32_t *v, uint32_t *k) { ...
但是确实是用没魔改过的delta值才对,所以我是被那个delta值给骗了是吧,我真是服了aaa
2024-12-13 23:33
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
TubituX 算法没有魔改过,直接原解密算法套过来解一下就好了 ```c #include #include void decrypt(uint32_t *v, uint32_t *k) { ...
感谢大佬
2024-12-13 23:36
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册
// // 统计代码