首页
社区
课程
招聘
[求助]一个加密算法的还原!
发表于: 2013-9-24 15:51 11079

[求助]一个加密算法的还原!

2013-9-24 15:51
11079
原来数组
data1[1] = 63
data2[1] = 43
data3[1] = c9
data4[1] = 55
加密后数组
data1[1] = 9f
data2[1] = f0
data3[1] = 56
data4[1] = 85

用来计算的全是加密前的数据!现在只知道加密后的数据,能计算出加密前的数据吗?
data1[1] = //这是加密后的
//加密前数据xor
(data1[1] + data1[1]) xor data2[1] xor (data2[1] + data2[1]) xor data3[1] xor data4[1]
data2[1] =
data1[1] xor (data2[1] + data2[1]) xor (data3[1] + data3[1]) xor data3[1] xor data4[1]
data3[1] =
data1[1] xor data2[1] xor (data3[1] + data3[1]) xor (data4[1] + data4[1]) xor data4[1]
data4[1] =
(data1[1] + data1[1]) xor data1[1] xor data2[1] xor data3[1] xor (data4[1] + data4[1])

有没有办法还原他!求大神指点下!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
经过分析,该加密算法是可逆的,可以由密文解8次线性方程组逆推出明文。
2013-9-24 19:23
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
帅哥能帮忙给个方向不!听不太懂,求大神解救
2013-9-25 09:02
0
雪    币: 1022
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
最好能给出明确的算法,
data2[1] =
data1[1] xor (data2[1] + data2[1]) xor (data3[1] + data3[1]) xor data3[1] xor data4[1]
这个data1[1] 是第一步(data1[1] + data1[1]) xor data2[1] xor (data2[1] + data2[1]) xor data3[1] xor data4[1]
计算的结果呢?还是明文data1[1]。
如果是代码就直接贴代码好了
2013-9-25 10:22
0
雪    币: 1022
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
若计算式是:         Out[0] = (In[0] + In[0]) ^ In[1] ^ (In[1] + In[1]) ^ In[2] ^ In[3];
                Out[1] = In[0] ^ (In[1] + In[1]) ^ (In[2] + In[2]) ^ In[2] ^ In[3];
                Out[2] = In[0] ^ In[1] ^ (In[2] + In[2]) ^ (In[3] + In[3]) ^ In[3];
                Out[3] = (In[0] + In[0]) ^ In[0] ^ In[1] ^ In[2] ^ (In[3] + In[3]);
那是可逆的,并且也可以计算
2013-9-25 11:38
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=lingyu;1224780]若计算式是:         Out[0] = (In[0] + In[0]) ^ In[1] ^ (In[1] + In[1]) ^ In[2] ^ In[3];
                Out[1] = In[0] ^ (In[1] + In[1]) ^ (In[2] + In[2]) ^ In[2] ^ In[...[/QUOTE]

帅哥有什么办法,教下!非常感激
2013-9-25 14:32
0
雪    币: 1022
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
#include <stdio.h>

void Decode(const unsigned char *Out, unsigned char *In)
{
        unsigned char data1 = 0;
        unsigned char data2 = 0;
        unsigned char data3 = 0;
        unsigned char data4 = 0;
        int i;

        for(i = 0; i < 8; i ++)
        {
                data4 = Out[0] ^ Out[1] ^ Out[2] ^ (data1 + data1) ^ (data4 + data4);
                data1 = Out[0] ^ Out[3] ^ (data2 + data2) ^ data4 ^ (data4 + data4);
                data2 = Out[0] ^ Out[1] ^ (data1 + data1) ^ data1 ^ (data3 + data3);
                data3 = Out[1] ^ Out[2] ^ (data2 + data2) ^ data2  ^ (data4 + data4);
        }

        In[0] = data1;
        In[1] = data2;
        In[2] = data3;
        In[3] = data4;
        return;
}

int main()
{
        unsigned char In[4] = {0};//{0x63, 0x43, 0xc9, 0x55};
        unsigned char Out[4] = {0};

        Out[0] = 0x9f, Out[1] = 0xeb, Out[2] = 0x4d, Out[3] = 0x85;
        Decode(Out, In);

        printf("In[0] = %02x, ", In[0]);
        printf("In[1] = %02x, ", In[1]);
        printf("In[2] = %02x, ", In[2]);
        printf("In[3] = %02x.\n", In[3]);

        if( Out[0] == (unsigned char)((In[0] + In[0]) ^ In[1] ^ (In[1] + In[1]) ^ In[2] ^ In[3]) && \
                Out[1] == (unsigned char)(In[0] ^ (In[1] + In[1]) ^ (In[2] + In[2]) ^ In[2] ^ In[3]) && \
                Out[2] == (unsigned char)(In[0] ^ In[1] ^ (In[2] + In[2]) ^ (In[3] + In[3]) ^ In[3]) && \
                Out[3] == (unsigned char)((In[0] + In[0]) ^ In[0] ^ In[1] ^ In[2] ^ (In[3] + In[3])) )
                printf("Ok.\n");
        else
                printf("Err!!!\n");

        printf("Out[0] = %02x, ", Out[0]);
        printf("Out[1] = %02x, ", Out[1]);
        printf("Out[2] = %02x, ", Out[2]);
        printf("Out[3] = %02x.\n", Out[3]);

        return 0;
}
2013-9-25 15:19
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最好是给LZ讲讲简单的分析思路和解题原理,这样感觉更好。
2013-9-25 18:52
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
多谢大神,已经搞定了!
2013-9-26 14:02
0
游客
登录 | 注册 方可回帖
返回
//