首页
社区
课程
招聘
[求助]如果已知明文和密文,长度不变,可能采用哪些加密方法
发表于: 2010-8-13 10:35 10548

[求助]如果已知明文和密文,长度不变,可能采用哪些加密方法

2010-8-13 10:35
10548
如果已知明文和密文,长度不变,可能采用哪些加密方法?
如果是简单的XOR方式,如何反求其使用的BLOCK内容?

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 998
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
达到这种效果的加密方式太多了。XOR的话再做一次XOR就解密了。
2010-8-13 14:22
0
雪    币: 220
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
demo.rar中的BIN文件是加密后的文字,TXT是原文。
有什么方法或工具可以帮助推导出XOR用到的BLOCK?
2010-8-14 08:17
0
雪    币: 391
活跃值: (135)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
4
如果真是XOR,自己写一个程序把BIN文件和TXT文件相互XOR一下,不就得到KEY FILE了么
给你个程序参考下
#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>

size_t MyGetFileSize(char const *szFileName)
{
  FILE *file = NULL;
  fpos_t pos;
  file = fopen(szFileName,"rb");
  if(file != NULL)  
      if(fseek(file,0,SEEK_END) == 0)
        if(fgetpos(file,&pos) == 0)
      {
        fclose(file);
          return (size_t)pos;
      }
  fclose(file);
  return -1;
}

int main()
{
  char const *szFile1 = "source.txt";
  char const *szFile2 = "encoded.bin";
  char const *szFile3 = "output.bin";
  FILE *sourcefile = NULL;
  FILE *destfile = NULL;
  FILE *outputfile = NULL;
  void *pMem1 = NULL;
  void *pMem2 = NULL;
  void *temp = NULL;
  size_t stsize = 0;
  size_t stsize1 = 0;
  stsize = MyGetFileSize(szFile1);
  if(stsize <= 0 || stsize >= 65535)
    return -1;
  pMem1 = calloc(1,stsize);
  if(pMem1 == NULL)
  {
    printf("failed to allocate memory!");
    system("pause");
    return -1;
  }
  temp = pMem1;
  stsize1 = MyGetFileSize(szFile2);
  if(stsize1 < 0 || stsize1 >= 65535)
    return -1;
  pMem2 = calloc(1,stsize1);
  if(pMem2 == NULL)
  {
    printf("failed to allocate memory!");
    system("pause");
    return -1;
  }
  sourcefile = fopen(szFile1,"rb");
  if(sourcefile == NULL)
  {
    printf("failed to open file!");
    system("pause");
    return -1;
  }
  destfile = fopen(szFile2,"rb");
  if(destfile == NULL)
  {
    printf("failed to open file!");
    system("pause");
    return -1;
  }
  outputfile = fopen(szFile3,"wb");
  if(outputfile == NULL)
  {
    printf("failed to open file!");
    system("pause");
    return -1;
  }
  if(fread(pMem1,1,stsize,sourcefile) != stsize)
  {
    printf("fread failed!");
    system("pause");
    return -1;
  }
  if(fread(pMem2,1,stsize1,destfile) != stsize1)
  {
    printf("fread failed!");
    system("pause");
    return -1;
  }
  while(stsize--)
    *((unsigned char*)pMem1)++ ^= *((unsigned char*)pMem2)++;
  fwrite(temp,1,stsize1,outputfile);
  fclose(sourcefile);
  fclose(destfile);
  fclose(outputfile);
  printf("I am done^_^\n");
  system("pause");
  return 0;
}
2010-8-14 09:44
0
雪    币: 220
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不好意思,问一个笨问题。
我不会C,直接把你的代码粘贴到VC6里面编译,编译器报了一个错,不会改:
c:\program files\microsoft visual studio\myprojects\xor1\xor1.cpp(89) : error C2105: '++' needs l-value
c:\program files\microsoft visual studio\myprojects\xor1\xor1.cpp(89) : error C2105: '++' needs l-value

也就是指*((unsigned char*)pMem1)++ ^= *((unsigned char*)pMem2)++;这一句。
如果您有时间,帮我看看怎么搞。
2010-8-16 09:35
0
雪    币: 998
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
*((unsigned char*)pMem1)^= *((unsigned char*)pMem2);
pMem1++;
pMem2++;
2010-8-17 01:37
0
雪    币: 391
活跃值: (135)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
7
VC++6.0编译正常,报错的原因是因为你把C语言程序保存为.CPP
请保存为.C,谢谢,我是用标准C语言写的,跟CPP没有任何关系
2010-8-17 08:36
0
雪    币: 220
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不行,还是报错,似乎必须要*((unsigned char*)pMem1)的形式。
2010-8-17 08:42
0
雪    币: 220
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
万分感谢。
project Settings里面设置为不使用预补偿页眉后一次编译成功。谢谢啦。
2010-8-17 08:48
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
10
不是简单的XOR, 即如是, 也不是简单的重复Key, Key的长度至少在0x80字节以上.
更有可能是ROT13或是DES/3DES之类的对称算法.
2010-8-17 20:55
0
雪    币: 375
活跃值: (181)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
看来只能穷举了
2010-8-18 12:57
0
雪    币: 220
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢大家都分析。的确不是简单的XOR.
分析对象是一个VFP的系统,使用了金天地或叫彩虹天地NETDOGSHELL加的密。
获得加密算法的途径当然是获得源程序最好了。只是这个NETDOG SHELL对VFP程序进行了变码,无法直接逆向获得可读的VFP程序。不过,逆向反编译工具FOXTOOL作者DM提到了以下内容,有谁了解更具体的细节吗?
--------------======================--------------
3、  彩虹软件狗所有加密方式加密的程序可反编译
     彩虹软件狗所有加密方式其实相当于vfp加密方式的变形,其设计上有一个重大的bug,不管它加密的程序无狗能不能运行,都可在很短的时间内还原出app文件。



--------------======================--------------

哪里能找到这个“金天地密钥穷举工具”?
2010-8-19 09:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
看有一下,学习一下
2010-8-19 10:48
0
雪    币: 348
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
看了,粘贴的那个程序,有点眉目,谢谢!
2010-8-19 15:15
0
游客
登录 | 注册 方可回帖
返回
//