日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2025/3/15 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows脚本编码器算法分析与破译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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脚本编码器算法分析与破译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。