CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

谁有C#版的Microsoft Script Encoder解密代码?

楼主yingying0808(盈盈)2006-10-03 14:22:21 在 .NET技术 / C# 提问

有C的程序,但转换不过来,谁有转换好的代码或者帮忙转换一下,谢谢!  
  C的程序代码  
  http://www.virtualconspiracy.com/download/scrdec18.c 问题点数:100、回复次数:1Top

1 楼bobo0124(bobo0124)回复于 2006-10-03 14:29:39 得分 100

public   class   JSDecoder  
  {  
  private   const   int   STATE_COPY_INPUT   =   100;  
  private   const   int   STATE_READLEN   =   101;  
  private   const   int   STATE_DECODE   =   102;  
  private   const   int   STATE_UNESCAPE   =   103;  
   
  private   int[]   Pick_Encoding;  
  private   int[]   rawData;  
  private   int[,]   Transformed   =   new   int[3,   288];  
  private   int[]   Digits   =   new   int[123];  
   
  public   JSDecoder()  
  {  
  InitArrayData();  
  }  
  private   void   InitArrayData()  
  {  
  int   i;  
  int   j;  
  Pick_Encoding   =   new   int[]   {   1,   2,   0,   1,   2,   0,   2,   0,   0,   2,   0,   2,   1,   0,   2,   0,   1,   0,   2,   0,   1,   1,   2,   0,   0,   2,   1,   0,   2,   0,   0,   2,   1,   1,   0,   2,   0,   2,   0,   1,   0,   1,   1,   2,   0,   1,   0,   2,   1,   0,   2,   0,   1,   1,   2,   0,   0,   1,   1,   2,   0,   1,   0,   2   };  
   
  rawData   =   new   int[]   {   0x64,   0x37,   0x69,   0x50,   0x7E,   0x2C,   0x22,   0x5A,   0x65,   0x4A,   0x45,   0x72,   0x61,   0x3A,   0x5B,   0x5E,   0x79,   0x66,   0x5D,   0x59,   0x75,   0x5B,   0x27,   0x4C,   0x42,   0x76,   0x45,   0x60,   0x63,   0x76,   0x23,   0x62,   0x2A,   0x65,   0x4D,   0x43,   0x5F,   0x51,   0x33,   0x7E,   0x53,   0x42,   0x4F,   0x52,   0x20,   0x52,   0x20,   0x63,   0x7A,   0x26,   0x4A,   0x21,   0x54,   0x5A,   0x46,   0x71,   0x38,   0x20,   0x2B,   0x79,   0x26,   0x66,   0x32  
  ,   0x63,   0x2A,   0x57,   0x2A,   0x58,   0x6C,   0x76,   0x7F,   0x2B,   0x47,   0x7B,   0x46,   0x25,   0x30,   0x52,   0x2C,   0x31,   0x4F,   0x29,   0x6C,   0x3D,   0x69,   0x49,   0x70,   0x3F,   0x3F,   0x3F,   0x27,   0x78,   0x7B,   0x3F,   0x3F,   0x3F,   0x67,   0x5F,   0x51,   0x3F,   0x3F,   0x3F,   0x62,   0x29,   0x7A,   0x41,   0x24,   0x7E,   0x5A,   0x2F,   0x3B,   0x66,   0x39,   0x47,   0x32,   0x33,   0x41,   0x73,   0x6F,   0x77,   0x4D,   0x21,   0x56,   0x43,   0x75,   0x5F  
  ,   0x71,   0x28,   0x26,   0x39,   0x42,   0x78,   0x7C,   0x46,   0x6E,   0x53,   0x4A,   0x64,   0x48,   0x5C,   0x74,   0x31,   0x48,   0x67,   0x72,   0x36,   0x7D,   0x6E,   0x4B,   0x68,   0x70,   0x7D,   0x35,   0x49,   0x5D,   0x22,   0x3F,   0x6A,   0x55,   0x4B,   0x50,   0x3A,   0x6A,   0x69,   0x60,   0x2E,   0x23,   0x6A,   0x7F,   0x9,   0x71,   0x28,   0x70,   0x6F,   0x35,   0x65,   0x49,   0x7D,   0x74,   0x5C,   0x24,   0x2C,   0x5D,   0x2D,   0x77,   0x27,   0x54,   0x44,   0x59  
  ,   0x37,   0x3F,   0x25,   0x7B,   0x6D,   0x7C,   0x3D,   0x7C,   0x23,   0x6C,   0x43,   0x6D,   0x34,   0x38,   0x28,   0x6D,   0x5E,   0x31,   0x4E,   0x5B,   0x39,   0x2B,   0x6E,   0x7F,   0x30,   0x57,   0x36,   0x6F,   0x4C,   0x54,   0x74,   0x34,   0x34,   0x6B,   0x72,   0x62,   0x4C,   0x25,   0x4E,   0x33,   0x56,   0x30,   0x56,   0x73,   0x5E,   0x3A,   0x68,   0x73,   0x78,   0x55,   0x9,   0x57,   0x47,   0x4B,   0x77,   0x32,   0x61,   0x3B,   0x35,   0x24,   0x44,   0x2E,   0x4D  
  ,   0x2F,   0x64,   0x6B,   0x59,   0x4F,   0x44,   0x45,   0x3B,   0x21,   0x5C,   0x2D,   0x37,   0x68,   0x41,   0x53,   0x36,   0x61,   0x58,   0x58,   0x7A,   0x48,   0x79,   0x22,   0x2E,   0x9,   0x60,   0x50,   0x75,   0x6B,   0x2D,   0x38,   0x4E,   0x29,   0x55,   0x3D,   0x3F   };  
   
  for   (i   =   31;   i   <=   126;   i++)  
  {  
  for   (j   =   0;   j   <=   2;   j++)  
  {  
  Transformed[j,   rawData[(i   -   31)   *   3   +   j]]   =   i   ==   31   ?   9   :   i;  
  }  
  }  
  for   (i   =   0;   i   <=   25;   i++)  
  {  
  Digits[65   +   i]   =   i;  
  Digits[97   +   i]   =   i   +   26;  
  }  
  for   (i   =   0;   i   <=   9;   i++)  
  {  
  Digits[48   +   i]   =   i   +   52;  
  }  
  Digits[43]   =   62;  
  Digits[47]   =   63;  
  }  
  private   string   UnEscape(string   strChar)  
  {  
  string   escapes;  
  string   escaped;  
  int   iIndex;  
  escapes   =   "#&!*$";  
  escaped   =   '\r'   +   '\n'   +   "<>@";  
  if   (Strings.AscW(strChar.Substring(0,   1))   >   126)  
  {  
  return   strChar;  
  }  
  iIndex   =   escapes.IndexOf(strChar);  
  if   (iIndex   !=   -   1)  
  {  
  return   escaped.Substring(iIndex,   1);  
  }  
  return   "?";  
  }  
   
  private   int   DecodeBase64(string   strString)  
  {  
  int   iVal   =   0;  
  iVal   +=   Digits[Strings.AscW(strString.Substring(0,   1))]   <<   2;  
  iVal   +=   Digits[Strings.AscW(strString.Substring(1,   1))]   >>   4;  
  iVal   +=   (Digits[Strings.AscW(strString.Substring(1,   1))]   &   0xF)   <<   12;  
  iVal   +=   (Digits[Strings.AscW(strString.Substring(2,   1))]   >>   2)   <<   8;  
  iVal   +=   (Digits[Strings.AscW(strString.Substring(2,   1))]   &   0x3)   <<   22;  
  iVal   +=   Digits[Strings.AscW(strString.Substring(3,   1))]   <<   16;  
  return   iVal;  
   
  }  
   
  public   string   Decode(string   encodingString)  
  {  
   
                                string   unEncodingString   =   "";  
  string   Pattern;  
   
  unEncodingString   =   DecodeProcedure(encodingString);  
  Pattern   =   "(JScript|VBscript).encode";  
  unEncodingString   =   System.Text.RegularExpressions.Regex.Replace(unEncodingString,   Pattern,   "$1",   System.Text.RegularExpressions.RegexOptions.IgnoreCase);  
  return   unEncodingString;  
  }  
   
  private   string   DecodeProcedure(   string   encodingString)  
  {  
  string   marker   =   "#@~^";  
  int   stringIndex   =   0;  
  int   scriptIndex   =   -   1;  
  int   unEncodingIndex   =   0;  
  string   strChar   =   "";  
  string   getCodeString   =   "";  
  int   unEncodinglength   =   0;  
   
  int   state   =   100;  
  string   unEncodingString   =   "";  
   
  while   (state   !=   0)  
  {  
  switch   (state)  
  {  
  case   STATE_COPY_INPUT:  
   
  if   (stringIndex<0   ||   stringIndex   >=   encodingString.Length)  
  {  
  state   =   0;  
  return   unEncodingString;  
  }  
  scriptIndex   =   encodingString.IndexOf(marker,   stringIndex);  
  if   (scriptIndex   !=   -   1)  
  {  
  if   (stringIndex+1-1<0   ||   scriptIndex   -   stringIndex   >=   encodingString.Length)  
  {  
  state   =   0;  
  return   unEncodingString;  
  }  
  unEncodingString   +=   encodingString.Substring(stringIndex   +   1   -   1,   scriptIndex   -   stringIndex);  
  scriptIndex   +=   marker.Length;  
  state   =   STATE_READLEN;  
  }  
  else  
  {  
  if   (   stringIndex+1-1<0   ||   stringIndex+1-1   >=encodingString.Length)  
  {  
  state   =   0;  
  return   unEncodingString;  
  }  
  stringIndex   =   stringIndex   ==   0   ?   0   :   stringIndex;  
  unEncodingString   +=   encodingString.Substring(stringIndex   +   1   -   1);  
  state   =   0;  
  }  
  break;  
  case   STATE_READLEN:  
   
  if   (   stringIndex+1-1<0   ||   stringIndex+1-1   >=encodingString.Length)  
  {  
  state   =   0;  
  return   unEncodingString;  
  }  
  getCodeString   =   encodingString.Substring(scriptIndex   +   1   -   1,   6);  
  unEncodinglength   =   DecodeBase64(getCodeString);  
  scriptIndex   +=   8;  
  state   =   STATE_DECODE;  
  break;  
  case   STATE_DECODE:  
   
  if   (unEncodinglength   ==   0)  
  {  
  stringIndex   =   scriptIndex   +   "DQgAAA==^#~@".Length;  
  unEncodingIndex   =   0;  
  state   =   STATE_COPY_INPUT;  
  }  
  else  
  {  
  if   (   stringIndex+1-1<0   ||   scriptIndex   +   1   -   1   >=   encodingString.Length   )  
  {  
  state   =   0;  
  return   unEncodingString;  
  }  
  strChar   =   encodingString.Substring(scriptIndex   +   1   -   1,   1);  
  if   (strChar   ==   "@")  
  {  
  state   =   STATE_UNESCAPE;  
  unEncodingString   +=   UnEscape(encodingString.Substring(scriptIndex   +   2   -   1,   1));  
  scriptIndex   +=   2;  
  unEncodinglength   -=   2;  
  unEncodingIndex++;  
  state   =   STATE_DECODE;  
  }  
  else  
  {  
  if   (Strings.AscW(strChar)   <   0xFF)  
  {  
  unEncodingString   +=   Strings.Chr(Transformed[Pick_Encoding[unEncodingIndex   %   64],   Strings.AscW(strChar)]);  
  unEncodingIndex++;  
  }  
  else  
  {  
  unEncodingString   +=   strChar;  
  }  
  scriptIndex++;  
  unEncodinglength--;  
  }  
  }  
  break;  
  case   STATE_UNESCAPE:  
   
  if   (   stringIndex+1-1<0   )  
  {  
  state   =   0;  
  return   unEncodingString;  
  }  
  unEncodingString   +=   UnEscape(encodingString.Substring(   ++scriptIndex   -   1,   1));  
  scriptIndex++;  
  unEncodinglength   -=   2;  
  unEncodingIndex++;  
  state   =   STATE_DECODE;  
  break;  
  }  
  }  
  return   unEncodingString;  
  }  
  }  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:yingying0808
  • bobo0124

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo