Windows脚本编码器算法分析与破译

作者:lake2

大家对脚本一定很熟悉吧,呵呵,脚本编写简单无需编译所以非常方便。不过,脚本的一个缺点是它不能保护脚本的内容,因为随便谁拿到一个脚本程序都可以用记事本打开来看内容。这样就不安全了嘛,比如你的知识产权可能不保;web服务器上连接数据库的asp文件会泄露sql的用户名密码;分析源代码找到设计漏洞......

呵呵,不过微软开发了一个脚本编码器(Script encoder)来弥补脚本的不足。脚本编码器对文件中的脚本代码进行编码,其他内容不动且以普通文本形式显示,而经过编码后的程序可以直接由相应的程序执行,执行结果与未编码的程序相同。这个不是本文的讨论范围,感兴趣就去下载吧,微软还附赠了中文使用说明的哦。下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=6a326d9c-f47e-4c92-b42a-b3d43029e96f&displaylang=zh-cn

本文的目的就是对脚本编码器的加密算法进行分析并找出破译方法,内容可能枯燥无味,若你有兴趣就继续看吧。先说一下,脚本编码器的解密软件早已经有了(你可以see http://www.csdn.net/cnshare/soft/13/13303.shtm),这里是分析——"授人以鱼,不如授人以渔"。

你还有兴趣啊?呵呵,那好,待我准备好工具就开始。东西也不多,记事本程序、Script encoder程序、ascii码表、一张草稿纸足矣。呵呵,我是用纯密码学去分析破译,所以用不着对程序进行反汇编(再说我还不会汇编):P

这里先给出个密码学术语——选择明文攻击:攻击者能够得到任意明文所对应的密文。现在我们手上有加密程序,就可以构造任意明文来加密得到密文,符合选择明文攻击的条件。

脚本编码器能够处理asp、htm、vbs、js等类型的文件,都是将文件中的脚本加密。比如asp、htm,就加密"<%""%>"和"<SCRIPT>""</SCRIPT>"之间的内容;vbs、js则加密整个文件。程序会自动改掉原来的语言标识。比如我的asp文件原来是"LANGUAGE="VBScript"",现在成了"LANGUAGE="VBScript.Encode""。

现在我的内容是"2004年12月16日",加密之后就成了"#@~^CwAAAA==+Z!*年8 月8v日kAEAAA==^#~@",注意这里仅仅是为了分析算法,所以并不去管程序的语法。

多分析几个密文就可以发现规律:密文以"#@~^******=="(*代表任意字母)开始(方便叙述以后就叫前缀,后面类同);中间是与明文等长度的字符(中间密文);又以"******==^#~@"(*代表任意字母)结束(后缀)。

下面就分别来分析。

先来说说中间密文,这个最复杂也最重要,因为它是由明文加密而得,只与明文和算法有关,如果要想知道代码内容的话只需要能破译中间密文就行了。

中间密文长度与明文相同,但是明文中的英文字母、数字和英文符号(也就是ascii码9和32~127)是经过加密了的,而其他字符不变。中间密文不是对明文的简单替换,也就是说"a"加密之后不会是同一个字符,但是也是有规律可循。以下是对10个"a"加密后的结果:#@~^CgAAAA==CmlCmlmllmygMAAA==^#~@

去掉前缀后缀看看有什么规律,呵呵,对,中间密文里始终只出现"C"、"m"、"l"三个字符,也就是说每个字符只由三个字符来替换(注意有四个例外:回车始终用"@#@&"、"<"用"@!",">"用"@*"、"@"用"@$")。你还将发现不同明文的密文出现的位置始终一样。比如若干个a的密文,第1、4、13、17、21、......位是C;若干个b的密文也只有第1、4、13、17、21、......位是8。也就是说密文中的三个字符出现的位置是固定的。不知道你理解没有,看例子:

10个a的密文:CmlCmlmllm
           10个b的密文:8(48(4(44(

不过即使这样我怎么知道密文哪一位出现哪个字符呢?呵呵,那就把长度加到150来看看。呵呵,发现规律了:密文中三个字符出现的位置是以64为周期的序列。现在我们只需知道前面64位的排列序列就行了。

这里我把序列提取出来了,这里用"1"、"2"、"3"来代替字符,序列是:1231232332321323132311233213233211323231311231321323112331123132

举个例子,a的密文第一个是C,查找上面的序列,1就代表C了,所以凡是出现1的位置都会出现C(如果在那个位置明文是a的话),超过了又从头开始查找。

序列搞定了,不过字符替换规则的公式一直找不到(或许没有^_^),没办法,只好用穷举法了。下表列出了所有字符的替换规则:

_____________________________________
ASCII | Char  |  1   |  2   |  3   |
-------------------------------------
   9     (Tab)    7      i      d
  13      (CR)   @#@&   @#@&   @#@&
  32    (Space)   ~      ,      P
  33       !      Z      e      "
  34       "      E      r      J
  35       #      :      [      a
  36       $      y      f      ^
  37       %      Y      u      ]
  38       &      '      L      [
  39       '      v      E      B
  40       (      c      v      `
  41       )      b      *      #
  42       *      M      C      e
  43       +      Q      3      _
  44       ,      S      B      ~
  45       -      R   (Space)   O
  46       .   (Space)   c      R
  47       /      &      J      z
  48       0      T      Z      !
  49       1      q      8      F
  50       2      +      y    (Space)
  51       3      f      2      &
  52       4      *      W      c
  53       5      X      l      *
  54       6            +      v
  55       7      {      F      G
  56       8      0      R      %
  57       9      1      0      ,
  58       :      l      =      )
  59       ;      I      p      i
  60       <      @!     @!     @!
  61       =      x      {      '
  62       >      @*     @*     @*
  63       ?      _      Q      g
  64       @      @$     @$     @$
  65       A      )      z      b
  66       B      $      ~      A
  67       C      /      ;      Z
  68       D      9      G      f
  69       E      3      A      2
  70       F      o      w      s
  71       G      !      V      M
  72       H      u      _      C
  73       I      (      &      q
  74       J      B      x      9
  75       K      F      n      |
  76       L      J      d      S
  77       M      \      t      H
  78       N      H      g      1
  79       O      6      }      r
  80       P      K      h      n
  81       Q      }      5      p
  82       R      ]      "      I
  83       S      j      U      ?
  84       T      P      :      ?
  85       U      i      `      j
  86       V      #      j      .
  87       W    (Tab)    q     
  88       X      p      o      (
  89       Y      e      I      5
  90       Z      t      \      }
  91       [      ,      ]      $
  92       \      w      '      -
  93       ]      D      Y      T
  94       ^      ?      %      7
  95       _      m      |      {
  96       '      |      #      =
  97       a      C      m      l
  98       b      8      (      4
  99       c      ^      1      m
100       d      [      9      N
101       e      n            +
102       f      W      6      0
103       g      L      T      o
104       h      4      4      t
105       i      r      b      k
106       j      %      N      L
107       k      V      0      3
108       l      s      ^      V
109       m      h      s      :
110       n      U    (Tab)    x
111       o      G      K      W
112       p      2      a      w
113       q      5      $      ;
114       r      .      M      D
115       s      d      k      /
116       t      O      D      Y
117       u      ;      !      E
118       v      -      7      \
119       w      A      S      h
120       x      a      X      6
121       y      z      H      X
122       z      "      .      y
123       {      `      P    (Tab)
124       |      k      -      u
125       }      N      )      8
126       ~      =      ?      U
127             g      /      Q
-------------------------------------
(Tab)——Tab键
(CR)——回车
(Space)——空格
——ascii码为127的字符,似乎显不出来
_____________________________________

呵呵,很多是吧,我是写了个asp文件来输出字符,脚本的便利性又一次体现出来了。

这里要说一下,前面不是列出了四个特例么,它们都是以@开始的字符,虽然占了两个位置,但是只算作一位("@#@&"算两位),所以注意中间密文中的"@"不记入长度计算中哦。

现在知道怎么解密了吧:先获得密文位置,匹配字符序列,得到一个数字,然后查替换表找到数字对应的密文字符,密文字符所对应的就是明文。

比如这里有个中间密文:"@#@&kW",@#@&是回车占两位,所以k在第三位,查序列,得到3,再查替换表3的纵行,就找到了k对应的明文i;同理,W对应明文f。呵呵,怎么样,你译对了吗?

到了这里你就可以自己破译密文了。要是有兴趣可以自己写个程序,不过既然已经有人写了那就实行"拿来主义"吧。这里我不介意罗嗦两句吧。这个算法虽然属于替换密码,不过密文与位置还有关,所以密文隐藏了明文的统计特征,要是没有选择明文攻击的话还是很难破的。呵呵,举个例子来看看这算法的好处。"红粉佳人"这个asp木马你该知道吧,可杀毒软件会将它列为病毒,嗯,为了躲避追杀我们可以用脚本编码器对"红粉佳人"加密,虽然实际上加密之后杀毒软件查不到了,不过我们可以假设杀毒软件公司又从加密代码里提出了特征码,现在又可以查杀了。呵呵,由于这个算法的性质,其实我们在加密时可以在源代码里多添几个回车、空格,那么密文就完全变了,嘿嘿,看它怎么杀。

中间密文分析完了,现在来看看前缀后缀吧。

前缀的中的"#@~^"和"=="是不变的,而接下来的六个字母与明文的长度有关系。注意一个汉字长度为1,回车长度为2。通过分析发现六字母的第二位只能是A、Q、g、w,且是循环的。每循环一次第一位改变一次。第一位以A开头依次按大写字母顺序、小写字母、数字、符号变换。下面是明文长度从1至10的六字母:

AQAAAA
    AgAAAA
    AwAAAA
    BAAAAA
    BQAAAA
    BgAAAA
    BwAAAA
    CAAAAA
    CQAAAA
    CgAAAA

很容易我们可以推出当明文长度为100时的六个字母:ZAAAAA

这里有个特殊情况要注意:在asp文件中类似"<%response.write("lake2")%>"的格式可以简写为"<%="lake2"%>",脚本编码器在加密"<%="lake2"%>"时会保留"<%=",所以明文长度不能算上"="。

这个,前缀的六个字母如果只用前两位来表示长度的话可能会碰到不够的情况,这时候就会向第三位变动,第三位变动规则与第一位一样;当然可能第三位也会不够,不过在实际中几乎是不可能的,除非你蓄意制造如此长的明文。

同前缀类似,后缀也是六个字母在变动。这六个字母与明文的ascii码有关。你会发现"ac"与"bd"的后缀相同,因为"ac"与"bd"ascii码和相同。这里计算ascii时只计算替换规则表里的字符,汉字不算。它的变动规则同前缀的六字母,这里就不讨论了。

呵呵,到这里分析差不多完了,不知道你头晕了没有,反正我是分不清东西南北了:)

感谢你看完我的文章,呵呵,不知你看懂了没有,下面有个去掉了前后缀的密文,试试解密啊^_^

"uVsK~sXP6Dbnx9"(注意第二个是ascii码为127的字符,而不是空格哟)

转载于:https://www.cnblogs.com/F4ncy/archive/2005/01/08/88643.html

Windows脚本编码器算法分析与破译相关推荐

  1. 在c#中调用windows脚本的方法

    在c#中调用windows脚本的方法 方法1:直接调用   CODE:   System.Diagnostics.Process proc = new System.Diagnostics.Proce ...

  2. windows脚本编制引擎_说说 Windows 脚本宿主运行的几种方式

    1.在命令提示符下运行脚本 使用 Windows 脚本宿主,可以在命令提示符下运行脚本.CScript.exe 提供了用于设置脚本属性的命令行开关. 使用 CScript.exe 运行脚本 用下列语法 ...

  3. autohotkey编写windows脚本实现test.lab试验数据快速导出

    autohotkey编写windows脚本实现test.lab试验数据快速导出 #x:: MouseGetPos,x,y MsgBox,4,MousePosition,"%x%,%y%&qu ...

  4. 菜鸟也来编程序 Windows脚本一日通

    看点: 你知道吗?为什么现在脚本病毒如此猖獗? 你知道吗?编写一个脚本病毒其实非常简单! 你知道吗?根本不懂编程的你只要稍加操练也能编出不错的软件! Windows脚本就像魔法卷轴般神奇,编写起来也很 ...

  5. 2022年中职——网络搭建国赛windows脚本写法(正式题详细解析)

    2022年网络搭建国赛windows脚本写法(正式题详细解析) 通过本项目竞赛,使中职学生能熟练运用网络信息安全技术 对网络.操作系统.应用.服务器等目标进行信息和数据安全防 护与渗透,具有分析.处理 ...

  6. 【Windows脚本】打印机脚本1-添加打印机(无需物理打印机)

    环境 系统:win7x64 sp1 1.在Win7操作系统下添加打印机(不需要连接物理打印机) 步骤一.Win + r 快捷方式,键入control Printers.点击"添加打印机&qu ...

  7. VBScript之Windows 脚本宿主

    文章目录 1 WSH 的概念 1.1 脚本文件类型 1.2 使用 Windows 脚本宿主运行脚本 1.2.1 命令行执行 1.2.2 在 Windows 环境中执行 WSH 1.2.3 两种脚本区别 ...

  8. Windows脚本初探之Windows Script Host(WSH)

    Windows脚本是一种解释型语言编写的程序,它是通过COM对象模型访问OS组件.至于什么是COM对象模型,可参见网址http://baike.baidu.com/link?url=TCoRIQ2ff ...

  9. 使用 Windows 脚本文件 (.wsf)

    使用 Windows 脚本文件 (.wsf) Windows 脚本文件 (*.wsf) 是含有可扩展标记语言 (XML) 代码的文本文档.它综合了几个可增强脚本灵活性的功能.由于 Windows 脚本 ...

最新文章

  1. DSVS7050签名服务器的网站,吉大正元数字签名服务器-安装部署手册(COM版 VCTK_S接口)2.1.1.doc...
  2. android php mysql json 查询_使用json从PHP-MySql服务器到Android获取图像
  3. 《Python编程初学者指南》——1.2 Python简介
  4. mysql iscsi_iscsi共享存储的简单配置和应用
  5. JDK 1.5新特性
  6. dedecms怎么改php版本_PHP程序员进阶之路
  7. 计算机对口高考文化试卷,计算机对口高考模拟试卷
  8. DistBelief 框架下的并行随机梯度下降法 - Downpour SGD
  9. CloudStack 配置高级网络简明手册
  10. Visual Studio Code 1.51 发布
  11. 国家中长期教育改革和发展规划纲要(2010-2020年)
  12. 鼠标右键快速连接wifi
  13. paip.http发文汉字乱码变问号的解决
  14. java 10000阶乘_java大数阶乘优化
  15. Python编程从入门到实践(基础入门)
  16. 便签pc android同步,微软电脑sticky notes便签软件怎么和安卓手机便签同步?
  17. 线粒体靶向的纳米递送PCN-224 纳米粒子-瑞禧
  18. POJ 3295.Tautology
  19. 苹果怎么给app上锁_苹果APP日常使用时一直闪退怎么办?
  20. FPS游戏中的同步算法

热门文章

  1. android js 代码混淆工具,好用的JS(Javascript)混淆加密工具-HDS JSObfuscator 2.14版
  2. android线程优先级大小,android 设置线程优先级 两种方式
  3. c语言数组最大可定义多少位_C语言求数组的最大值三种方法
  4. lumen php命令,php – 如何使用命令行手动运行laravel / lumen作业
  5. bs4 乱码_Python BeautifulSoup中文乱码问题的2种解决方法
  6. JAVA中自己写的util中的chop,Java StringUtils.chop方法代碼示例
  7. linux自启动配置文件,Linux中如何设置服务自启动?
  8. python类和oop基础知识
  9. 深入剖析:Super Jumping! Jumping! Jumping! (动规)
  10. python程序分析,用Python编写分析Python程序性能的工具的教程