DOSUG CZ– розовая кнопка на сайте!
Logo

Шифрация/дешифрация скриптов (ASP)

Наверное, многие из вас сталкивались с проблемой поддержки кодов написанных до вас кем-то еще. И все вы знаете как это тяжко изучать чужой код и выполнять его сопровождение. Но в довесок к проблеме сопровождения чужого кода я недавно натолкнулся на коды, спрятанные моим хитрым предшественником за абсолютно нечитабельными строками типа:

<TR BGCOLOR="<%=#@~^EQAAAA==~zN./k+x4+m[ZKV~JQYAAA==^#~@%>">
<TD ALIGN="RIGHT" VALIGN="MIDDLE">&nbsp; <%#@~^LAAAAA==~&0~"+$E+kYvEHKN;/r#~@!@*PJ.A+boh.V+rP:tnx~hg0AAA==^#~@%>

Тем кто еще не догадался о чем сейчас пойдет речь, я рекомендую заглянуть на сайт Microsoft и прочесть там со всех сторон замечательную статью Using Script Encoder. Для совсем непосвященным вкратце поясню: если вам не очень хочется показывать свои коды (включая клиентские скрипты) кому не попало, то вы всегда можете воспользоваться системой кодирования, предложенной фирмой Microsoft, это вовсе не означает, что прочесть эти коды, после их кодирования, совсем невозможно, о чем, впрочем, и будет эта статься - как их прочесть. Но, как бы то оно не было, всякие любознательные люди с малым количеством знаний и большим эго, которых принято обычно называть ламерами, с первого взгляда придут в дикое замешательство, увидав полную непотребность вместо ожидаемого чистого кода.
К сожалению Microsoft не написала, что такие выкрутасы с кодом приводят к замедлению их использования, но.. увы многие, и мой предшественник в частности, пользуются этой технологией "припрятывания" своей работы за внешне нечитабельным кодом.

Итак, ежели вы увидели где-то в начале asp файла что-то типа:
<%@ LANGUAGE = VBScript.Encode %>, а ниже по тексту всякую тарабарщину, граничащую с непотребностями заключенными в asp-шные скобочки, знайте SRCENC - потрудился над эти файлом на славу. Как это делается написано тут: http://msdn.microsoft.com/library/en-us/script56/html/seconencodingsample.asp?frame=true, а как вот прочесть этот код после его кодирования не написано там абсолютно.

Не думаю, что стоит пускаться в долгие и нудные объяснения алгоритма декодирования… Давайте я просто приведу один из самых распространенных в сети кодов декодирования с некоторыми изменениями сделанными мной для удобства.

Вы можете использовать код приведенный ниже для декодирования je, vbe, asp, hta, htm, html… файлов. Думаю особо нуждающимся, также не составит большого труда перенести, ниже приведенный код, со скриптового WSH на, скажем, VB. Да, информация не особенно продвинутым программистам, для запуска нижеприведенного файла вы должны иметь на свое машине wscript, который вы также найдете на сайте Microsoft или у себя на диске в директории system32 или просто наберите в ситемном "RUN" - wscript.

option explicit
Dim oArgs, NomFichier
'Optional argument : the encoded filename
NomFichier=""
Set oArgs = WScript.Arguments
Select Case oArgs.Count
Case 0 'No Arg, popup a dialog box to choose the file
NomFichier=BrowseForFolder("Choose an encoded file", &H4031, &H0011)
Case 1
If Instr(oArgs(0),"?")=0 Then '-? ou /? => aide
NomFichier=oArgs(0)
End If
Case Else
WScript.Echo "Too many parameters"
End Select
Set oArgs = Nothing

If NomFichier<>"" Then
Dim fso
Dim a
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(NomFichier) Then
Dim fic,contenu
Set fic = fso.OpenTextFile(NomFichier, 1)
Contenu=fic.readAll
fic.close
Set fic=Nothing

Const TagInit="#@~^" '#@~^awQAAA==
Const TagFin="==^#~@" '& chr(0)
Dim DebutCode, FinCode
Do
FinCode=0
DebutCode=Instr(Contenu,TagInit)
If DebutCode>0 Then
If (Instr(DebutCode,Contenu,"==")-DebutCode)=10 Then 'If "==" follows the tag
FinCode=Instr(DebutCode,Contenu,TagFin)
If FinCode>0 Then
Contenu=Left(Contenu,DebutCode-1) & _
Decode(Mid(Contenu,DebutCode+12,FinCode-DebutCode-12-6)) & _
Mid(Contenu,FinCode+6)
End If
End If
End If
Loop Until FinCode=0
'WScript.Echo NomFichier
set a = fso.CreateTextFile(NomFichier & ".txt",1)
a.WriteLine Contenu
a.Close
'WScript.Echo Contenu
Else
WScript.Echo Nomfichier & " not found"
End If
Set fso=Nothing
Else
WScript.Echo "Please give a filename"
WScript.Echo "Usage : " & wscript.fullname & " " & WScript.ScriptFullName & " <filename>"
End If

Function Decode(Chaine)
Dim se,i,c,j,index,ChaineTemp
Dim tDecode(127)
Const Combinaison="1231232332321323132311233213233211323231311231321323112331123132"

Set se=WSCript.CreateObject("Scripting.Encoder")
For i=9 to 127
tDecode(i)="JLA"
Next
For i=9 to 127
ChaineTemp=Mid(se.EncodeScriptFile(".vbs",string(3,i),0,""),13,3)
For j=1 to 3
c=Asc(Mid(ChaineTemp,j,1))
tDecode(c)=Left(tDecode(c),j-1) & chr(i) & Mid(tDecode(c),j+1)
Next
Next
'Next line we correct a bug, otherwise a ")" could be decoded to a ">"
tDecode(42)=Left(tDecode(42),1) & ")" & Right(tDecode(42),1)
Set se=Nothing

Chaine=Replace(Replace(Chaine,"@&",chr(10)),"@#",chr(13))
Chaine=Replace(Replace(Chaine,"@*",">"),"@!","<")
Chaine=Replace(Chaine,"@$","@")
index=-1
For i=1 to Len(Chaine)
c=asc(Mid(Chaine,i,1))
If c<128 Then index=index+1
If (c=9) or ((c>31) and (c<128)) Then
If (c<>60) and (c<>62) and (c<>64) Then
Chaine=Left(Chaine,i-1) & Mid(tDecode(c),Mid(Combinaison,(index mod 64)+1,1),1) & Mid(Chaine,i+1)
End If
End If
Next
Decode=Chaine
End Function

Function BrowseForFolder(ByVal pstrPrompt, ByVal pintBrowseType, ByVal pintLocation)
Dim ShellObject, pstrTempFolder, x
Set ShellObject=WScript.CreateObject("Shell.Application")
On Error Resume Next
Set pstrTempFolder=ShellObject.BrowseForFolder(&H0,pstrPrompt,pintBrowseType,pintLocation)
BrowseForFolder=pstrTempFolder.ParentFolder.ParseName(pstrTempFolder.Title).Path
If Err.Number<>0 Then BrowseForFolder=""
Set pstrTempFolder=Nothing
Set ShellObject=Nothing
End Function


Просто сохраните этот код с любым понравившимся вам именем и расширением vbs. Для декодирования вам всего лишь и надо, что перетянуть файл-источник на иконку сохраненного вами файла. Все остальное произойдет автоматически.

Anri.

Полный текст статьи в формате Microsoft Word

главная - о проекте - контакты - реклама на сайте
 
LBN100 Elite

SoftStudio.Ru - студия разработки программ
LBN100 Elite