Windows脚本编码器算法分析与破译
by lake2(http://mrhupo.126.com)
大家对脚本一定很熟悉吧,呵呵,脚本编写简单无需编译所以非常方便。不过,脚本的一个缺点是它不能保护脚本的内容,因为随便谁拿到一个脚本程序都可以用记事本打开来看内容。这样就不安全了嘛,比如你的知识产权可能不保;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==^#~@”,注意这里仅仅是为了分析算法,所以并不去管程序的语法。