蓝色动力网络

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3044|回复: 0

读取GHO文件密码算法

[复制链接]
发表于 2012-9-20 15:08:38 | 显示全部楼层 |阅读模式
算法来源于GhoHash,由shuax写成了C语言的,方便集成到自己的程序中,收藏备用.
  1. #include <stdio.h>   
  2. #include <stdlib.h>   
  3. #include <string.h>   
  4.    
  5. unsigned short table[256];   
  6. int FillTable(int a, short b, int c)   
  7. {   
  8.     int d = a << 8;   
  9.     for ( int i = 8; i > 0 ; --i)   
  10.     {   
  11.         if ( (c ^ d) & 0x8000)   
  12.         {   
  13.             c = b ^ (2 * c);   
  14.         }   
  15.         else  
  16.         {   
  17.             c *= 2;   
  18.         }   
  19.         d *= 2;   
  20.     }   
  21.     return c;   
  22. }   
  23.    
  24. void decrypt(unsigned char *buf, int len, int key)   
  25. {   
  26.     for(int i=0;i<len;i++)   
  27.     {   
  28.         unsigned short temp = table[buf[i] ^ (key>>8) ] ^ (key<<8);   
  29.         buf[i] = buf[i] ^ key;   
  30.         key = temp;   
  31.     }   
  32. }   
  33. int main(int argc,char *argv[])   
  34. {   
  35.     if(argc<2)   
  36.     {   
  37.         printf("使用方法:GetGhoPwd.exe ghost.gho");   
  38.     }   
  39.     else  
  40.     {   
  41.         //   
  42.         for (int i=0;i<256;i++)   
  43.         {   
  44.             table[i] = FillTable(i, 4129, 1954);   
  45.         }   
  46.            
  47.         //   
  48.         FILE * fp = fopen(argv[1],"rb");   
  49.         if(fp)   
  50.         {   
  51.             fseek(fp, 11, SEEK_SET);   
  52.             char flag = fgetc(fp);   
  53.             if(flag)   
  54.             {   
  55.                 unsigned char encrypted1[15];   
  56.                 unsigned char encrypted2[10];   
  57.                 fread(encrypted1,1,15,fp);   
  58.                 fread(encrypted2,1,10,fp);   
  59.                   
  60.                 //   
  61.                 int key = 0;   
  62.                 while(1)   
  63.                 {   
  64.                     unsigned char temp[15];   
  65.                     memcpy(temp, encrypted1, 15);   
  66.                        
  67.                     decrypt(temp, 15, key);   
  68.                        
  69.                     if( memcmp(temp,"BinaryResearch",15) ==0 )   
  70.                     {   
  71.                         break;   
  72.                     }   
  73.                        
  74.                     key++;   
  75.                 }   
  76.                   
  77.                 //   
  78.                 decrypt(encrypted2, 10, key);   
  79.                 printf("此文件的密码是:%s", encrypted2);   
  80.             }   
  81.             else  
  82.             {   
  83.                 printf("此文件没有密码保护。");   
  84.             }   
  85.             fclose(fp);   
  86.         }   
  87.     }   
  88.     getchar();   
  89.     return 0;   
  90. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

蓝色动力网络微信平台
网站管理,业务合作联系邮箱: admin#lansedongli.com    QQ:13412492 限网站业务问题.
网站帐号、密码、密保找回请使用注册邮箱,发送邮件至 password#lansedongli.com ,否则不予受理.
免责声明:本论坛所有文字和图片仅代表其个人观点.
本站某些资料或文章来自于互联网,不代表本站观点,如果侵犯了您的权益,请来信告知,我们会在三天内删除.
为了给大家一个更好的交流场所,请勿在本论坛发表与中华人民共和国法律相抵触的言论,请合作,谢谢!
Copyright © 2007-2019 Corporation Powered by网吧系统 版权所有    转载请注明!
浙ICP备11043737号-1 程序:Discuz! x3.4

湘公网安备 43018102000145号

手机版|Archiver|蓝色动力网络   

快速回复 返回顶部 返回列表