Windows脚本编码器算法分析与破译
Windows腳本編碼器算法分析與破譯
作者:lake2
??? 大家對(duì)腳本一定很熟悉吧,呵呵,腳本編寫簡(jiǎn)單無需編譯所以非常方便。不過,腳本的一個(gè)缺點(diǎn)是它不能保護(hù)腳本的內(nèi)容,因?yàn)殡S便誰拿到一個(gè)腳本程序都可以用記事本打開來看內(nèi)容。這樣就不安全了嘛,比如你的知識(shí)產(chǎn)權(quán)可能不保;web服務(wù)器上連接數(shù)據(jù)庫的asp文件會(huì)泄露sql的用戶名密碼;分析源代碼找到設(shè)計(jì)漏洞......
??? 呵呵,不過微軟開發(fā)了一個(gè)腳本編碼器(Script encoder)來彌補(bǔ)腳本的不足。腳本編碼器對(duì)文件中的腳本代碼進(jìn)行編碼,其他內(nèi)容不動(dòng)且以普通文本形式顯示,而經(jīng)過編碼后的程序可以直接由相應(yīng)的程序執(zhí)行,執(zhí)行結(jié)果與未編碼的程序相同。這個(gè)不是本文的討論范圍,感興趣就去下載吧,微軟還附贈(zèng)了中文使用說明的哦。下載地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=6a326d9c-f47e-4c92-b42a-b3d43029e96f&displaylang=zh-cn
??? 本文的目的就是對(duì)腳本編碼器的加密算法進(jìn)行分析并找出破譯方法,內(nèi)容可能枯燥無味,若你有興趣就繼續(xù)看吧。先說一下,腳本編碼器的解密軟件早已經(jīng)有了(你可以see http://www.csdn.net/cnshare/soft/13/13303.shtm),這里是分析——"授人以魚,不如授人以漁"。
??? 你還有興趣啊?呵呵,那好,待我準(zhǔn)備好工具就開始。東西也不多,記事本程序、Script encoder程序、ascii碼表、一張草稿紙足矣。呵呵,我是用純密碼學(xué)去分析破譯,所以用不著對(duì)程序進(jìn)行反匯編(再說我還不會(huì)匯編):P
??? 這里先給出個(gè)密碼學(xué)術(shù)語——選擇明文攻擊:攻擊者能夠得到任意明文所對(duì)應(yīng)的密文。現(xiàn)在我們手上有加密程序,就可以構(gòu)造任意明文來加密得到密文,符合選擇明文攻擊的條件。
??? 腳本編碼器能夠處理asp、htm、vbs、js等類型的文件,都是將文件中的腳本加密。比如asp、htm,就加密"<%""%>"和"<SCRIPT>""</SCRIPT>"之間的內(nèi)容;vbs、js則加密整個(gè)文件。程序會(huì)自動(dòng)改掉原來的語言標(biāo)識(shí)。比如我的asp文件原來是"LANGUAGE="VBScript"",現(xiàn)在成了"LANGUAGE="VBScript.Encode""。
??? 現(xiàn)在我的內(nèi)容是"2004年12月16日",加密之后就成了"#@~^CwAAAA==+Z!*年8 月8v日kAEAAA==^#~@",注意這里僅僅是為了分析算法,所以并不去管程序的語法。
??? 多分析幾個(gè)密文就可以發(fā)現(xiàn)規(guī)律:密文以"#@~^******=="(*代表任意字母)開始(方便敘述以后就叫前綴,后面類同);中間是與明文等長(zhǎng)度的字符(中間密文);又以"******==^#~@"(*代表任意字母)結(jié)束(后綴)。
??? 下面就分別來分析。
??? 先來說說中間密文,這個(gè)最復(fù)雜也最重要,因?yàn)樗怯擅魑募用芏?#xff0c;只與明文和算法有關(guān),如果要想知道代碼內(nèi)容的話只需要能破譯中間密文就行了。
??? 中間密文長(zhǎng)度與明文相同,但是明文中的英文字母、數(shù)字和英文符號(hào)(也就是ascii碼9和32~127)是經(jīng)過加密了的,而其他字符不變。中間密文不是對(duì)明文的簡(jiǎn)單替換,也就是說"a"加密之后不會(huì)是同一個(gè)字符,但是也是有規(guī)律可循。以下是對(duì)10個(gè)"a"加密后的結(jié)果:#@~^CgAAAA==CmlCmlmllmygMAAA==^#~@
??? 去掉前綴后綴看看有什么規(guī)律,呵呵,對(duì),中間密文里始終只出現(xiàn)"C"、"m"、"l"三個(gè)字符,也就是說每個(gè)字符只由三個(gè)字符來替換(注意有四個(gè)例外:回車始終用"@#@&"、"<"用"@!",">"用"@*"、"@"用"@$")。你還將發(fā)現(xiàn)不同明文的密文出現(xiàn)的位置始終一樣。比如若干個(gè)a的密文,第1、4、13、17、21、......位是C;若干個(gè)b的密文也只有第1、4、13、17、21、......位是8。也就是說密文中的三個(gè)字符出現(xiàn)的位置是固定的。不知道你理解沒有,看例子:
?????????? 10個(gè)a的密文:CmlCmlmllm
?????????? 10個(gè)b的密文:8(48(4(44(
??? 不過即使這樣我怎么知道密文哪一位出現(xiàn)哪個(gè)字符呢?呵呵,那就把長(zhǎng)度加到150來看看。呵呵,發(fā)現(xiàn)規(guī)律了:密文中三個(gè)字符出現(xiàn)的位置是以64為周期的序列。現(xiàn)在我們只需知道前面64位的排列序列就行了。
??? 這里我把序列提取出來了,這里用"1"、"2"、"3"來代替字符,序列是:1231232332321323132311233213233211323231311231321323112331123132
??? 舉個(gè)例子,a的密文第一個(gè)是C,查找上面的序列,1就代表C了,所以凡是出現(xiàn)1的位置都會(huì)出現(xiàn)C(如果在那個(gè)位置明文是a的話),超過了又從頭開始查找。
??? 序列搞定了,不過字符替換規(guī)則的公式一直找不到(或許沒有^_^),沒辦法,只好用窮舉法了。下表列出了所有字符的替換規(guī)則:
_____________________________________
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的字符,似乎顯不出來
_____________________________________
??? 呵呵,很多是吧,我是寫了個(gè)asp文件來輸出字符,腳本的便利性又一次體現(xiàn)出來了。
??? 這里要說一下,前面不是列出了四個(gè)特例么,它們都是以@開始的字符,雖然占了兩個(gè)位置,但是只算作一位("@#@&"算兩位),所以注意中間密文中的"@"不記入長(zhǎng)度計(jì)算中哦。
??? 現(xiàn)在知道怎么解密了吧:先獲得密文位置,匹配字符序列,得到一個(gè)數(shù)字,然后查替換表找到數(shù)字對(duì)應(yīng)的密文字符,密文字符所對(duì)應(yīng)的就是明文。
??? 比如這里有個(gè)中間密文:"@#@&kW",@#@&是回車占兩位,所以k在第三位,查序列,得到3,再查替換表3的縱行,就找到了k對(duì)應(yīng)的明文i;同理,W對(duì)應(yīng)明文f。呵呵,怎么樣,你譯對(duì)了嗎?
??? 到了這里你就可以自己破譯密文了。要是有興趣可以自己寫個(gè)程序,不過既然已經(jīng)有人寫了那就實(shí)行"拿來主義"吧。這里我不介意羅嗦兩句吧。這個(gè)算法雖然屬于替換密碼,不過密文與位置還有關(guān),所以密文隱藏了明文的統(tǒng)計(jì)特征,要是沒有選擇明文攻擊的話還是很難破的。呵呵,舉個(gè)例子來看看這算法的好處。"紅粉佳人"這個(gè)asp木馬你該知道吧,可殺毒軟件會(huì)將它列為病毒,嗯,為了躲避追殺我們可以用腳本編碼器對(duì)"紅粉佳人"加密,雖然實(shí)際上加密之后殺毒軟件查不到了,不過我們可以假設(shè)殺毒軟件公司又從加密代碼里提出了特征碼,現(xiàn)在又可以查殺了。呵呵,由于這個(gè)算法的性質(zhì),其實(shí)我們?cè)诩用軙r(shí)可以在源代碼里多添幾個(gè)回車、空格,那么密文就完全變了,嘿嘿,看它怎么殺。
??? 中間密文分析完了,現(xiàn)在來看看前綴后綴吧。
??? 前綴的中的"#@~^"和"=="是不變的,而接下來的六個(gè)字母與明文的長(zhǎng)度有關(guān)系。注意一個(gè)漢字長(zhǎng)度為1,回車長(zhǎng)度為2。通過分析發(fā)現(xiàn)六字母的第二位只能是A、Q、g、w,且是循環(huán)的。每循環(huán)一次第一位改變一次。第一位以A開頭依次按大寫字母順序、小寫字母、數(shù)字、符號(hào)變換。下面是明文長(zhǎng)度從1至10的六字母:
??? AQAAAA
??? AgAAAA
??? AwAAAA
??? BAAAAA
??? BQAAAA
??? BgAAAA
??? BwAAAA
??? CAAAAA
??? CQAAAA
??? CgAAAA
??? 很容易我們可以推出當(dāng)明文長(zhǎng)度為100時(shí)的六個(gè)字母:ZAAAAA
??? 這里有個(gè)特殊情況要注意:在asp文件中類似"<%response.write("lake2")%>"的格式可以簡(jiǎn)寫為"<%="lake2"%>",腳本編碼器在加密"<%="lake2"%>"時(shí)會(huì)保留"<%=",所以明文長(zhǎng)度不能算上"="。
??? 這個(gè),前綴的六個(gè)字母如果只用前兩位來表示長(zhǎng)度的話可能會(huì)碰到不夠的情況,這時(shí)候就會(huì)向第三位變動(dòng),第三位變動(dòng)規(guī)則與第一位一樣;當(dāng)然可能第三位也會(huì)不夠,不過在實(shí)際中幾乎是不可能的,除非你蓄意制造如此長(zhǎng)的明文。
??? 同前綴類似,后綴也是六個(gè)字母在變動(dòng)。這六個(gè)字母與明文的ascii碼有關(guān)。你會(huì)發(fā)現(xiàn)"ac"與"bd"的后綴相同,因?yàn)?#34;ac"與"bd"ascii碼和相同。這里計(jì)算ascii時(shí)只計(jì)算替換規(guī)則表里的字符,漢字不算。它的變動(dòng)規(guī)則同前綴的六字母,這里就不討論了。
??? 呵呵,到這里分析差不多完了,不知道你頭暈了沒有,反正我是分不清東西南北了:)
??? 感謝你看完我的文章,呵呵,不知你看懂了沒有,下面有個(gè)去掉了前后綴的密文,試試解密啊^_^
??? "uVsK~sXP6Dbnx9"(注意第二個(gè)是ascii碼為127的字符,而不是空格喲)
轉(zhuǎn)載于:https://www.cnblogs.com/F4ncy/archive/2005/01/08/88643.html
總結(jié)
以上是生活随笔為你收集整理的Windows脚本编码器算法分析与破译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IndentationError: ex
- 下一篇: zsh of kali