由于时间紧迫,要为一个小公司建立站点,迫不得已用了风讯4.0 sp7

看来是国内比较好的免费CMS了,拿下来那当然要修改了,但是在我改代码的过程中发现了太多奇怪的代码,很多垃圾代码(暂时姑且说是垃圾代码吧),很多大段大段注释掉的代码.我看不明白,因为程序相当的不具可读性...

偶然间我发现管理后台有个JS 发送我的服务器信息等到风讯,这引起了我的高度重视

<mce:script language="JavaScript" type="text/javascript" src="http://PassPort.foosun.net/passport?User=<%=MF_Site_lock%><!-- &URL=<%=Request.ServerVariables("SERVER_NAME")%>&Email=<%=request.Cookies("FoosunMFCookies")("FoosunMFEmail")%>"> // --></mce:script>

于是我开始查找里面的变量 包括  MF_Site_lock FoosunMFEmail COOKIES等..这一找不要紧,发现 SYSINFO.asp里面检测版本的函数找不到,接着我就一个一个函数的倒推,让我发现了风讯代码的 无聊之处,就是隐藏部分代码从而悄悄发送信息到他服务器,尤其email 要知道站长的email是很重要的,现在我把这些部分代码贴出来,

首先在 sysinfo.asp里面检测版本的这段JS

<script language="JavaScript"> <!-- function Get_Foosun_Server(){ var Userid=""; GetInfo(String.fromCharCode(83,121,115,67,104,101,99,107,86,101,114,46,97,115,112),String.fromCharCode(65,99,116,61,86,101,114)); GetInfo(String.fromCharCode(83,121,115,67,104,101,99,107,86,101,114,46,97,115,112),String.fromCharCode(65,99,116,61,78,101,119,115)); } function GetInfo(url,Action){ var myAjax = new Ajax.Request( url, {method:'post', parameters:Action, onComplete:GetInfo_Receive } ); } function GetInfo_Receive(OriginalRequest){ var Info=""; var Str_Info=""; Info=OriginalRequest.responseText.split("||"); if (Info[0]=="True"){ Str_Info=Info[2]; }else{ Str_Info=""; } if (Info[1]=="Ver"){ $('Foosun_server_version').innerHTML=Str_Info; }else if (Info[1]=="News"){ $('Foosun_server_announce').innerHTML=Str_Info; } } window.οnlοad=Get_Foosun_Server; //-->

它没有直接写文件名字,而是办ASIIC  代码中 getinfo的地址转换出来就是SysCheckVer.asp

这个AJax传递数据的文件找到了,打开SysCheckVer.asp一看: OH..GOD 这么长的代码 首先是Function Replace_MF_default_Flag  这个干什么的,定义了大堆的变量,但是找不到和版本相关的东西,代码拉到最后才发现,上面这些都是没有用的,风讯骗人的玩意儿...

Str_Act = Trim(Request.Form("Act"))
If Str_Act = "" Then Str_Act = "Ver"
Select Case Str_Act
    Case "Ver"
        StrInfo = Str_get(1)
    Case "News"
        StrInfo = Str_get(2)
    Case Else
        StrInfo = "||"
End Select
StrInfo = Split(StrInfo,"||")
If StrInfo(0)="True" Then
    Response.Write "True||"&Str_Act&"||"&StrInfo(1)
ElseIf StrInfo(0)="False" Then
    Response.Write "False||"&Str_Act&"||"
End If

这里才是关键,检测版本了,那么回到上面那个

tring.fromCharCode(65,99,116,61,86,101,114)是Act=Ver,String.fromCharCode(65,99,116,61,78,101,119,115)是Act=News

现在分析这个运作过程.FS_InterFace/MF_Function.asp里找到

Function Str_get(Number) On Error Resume Next Str_UserID = Server.UrlEncode(Session("SessionCode")) ThisIp = Server.UrlEncode(Request.ServerVariables("LOCAL_ADDR")) ThisDomain = Server.UrlEncode(Request.ServerVariables("SERVER_NAME")) ThisPort = Server.UrlEncode(Request.ServerVariables("SERVER_PORT")) Str_Para = "?"&"VUsIp="&ThisIp&"&VUsDN="&ThisDomain&"&VUsPort="&ThisPort&"&UserID="&Str_UserID If Number = 1 Then:Str_get = GetInfo(Recv(Session("SessionComm"))&Recv(Session("SessionComV"))&Str_Para):Else:Str_get = GetInfo(Recv(Session("SessionComm"))&Recv(Session("SessionComN"))&Str_Para):End If End Function

噢噢...这里就是收集信息的东东了,  那么这几个  SESSION值就有得解释了..

它会收集服务器的IP、服务器域名、服务器端口、序列号。调用GetInfo()过程,

GetInfo()在FS_Inc/Function.asp里

Function GetInfo(GetPath)
    Dim http,ErrContentLength,Report,ContentLength,ErrContent
    ErrContent = ""
    On Error Resume Next
    Response.Clear
    Set http=Server.CreateObject("Microsoft.XMLHTTP")
    If Err Then
        Err.Clear
        Set http = Server.CreateObject("Msxml2.XMLHTTP")
        If Err Then
            ErrContent = "服务器不支持XML对象"
            Err.Clear
        End If
    End If
    If ErrContent<>"" Then
        GetInfo = "False||"&ErrContent
    Else
        http.Open "GET",GetPath,False
        http.Send
        If http.readyState<>4 Then
            GetInfo = "False||读取失败"
        Else
            GetInfo = "True||"&http.ResponseText
        End If
    End If
End Function

这个GetInfo(GetPath)就是使用XML通过GET方式访问,然后返回信息。参数GetPath就是要访问的地址,再往回看Str_get(Number)调用GetInfo()是这样的Str_get = GetInfo(Recv(a)&Recv(b)&Str_Para),再查找过程Recv(),也是在FS_Inc/Function.asp里

Function Recv(Str_Number)
    Dim Arr_Number,Str_Return,Temp_i
    Arr_Number = Split(Str_Number,chr(108))
    Str_Return = ""
    For Temp_i = LBound(Arr_Number) To UBound(Arr_Number)
        Str_Return = Str_Return & Chr(Arr_Number(Temp_i)+31)
    Next
    Recv = Str_Return
End Function

Recv(Str_Number)就是还原字符串,通过ASCII码加31。现在主要就是要知道Str_get(Number)里的Session("SessionCode")、Session("SessionComm")、Session("SessionComV")、Session("SessionComN")里什么值了,使用Response.Write写出来,得到

Session("SessionCode")="111-1111111111111"
Session("SessionComm")="73l85l85l81l27l16l16l81l66l84l84l81l80l83l85l15l71l80l80l84l86l79l15l79l70l85l16"
Session("SessionComV")="87l70l83l15l66l84l81"
Session("SessionComN")="79l70l88l84l15l66l84l81"

这些值通过Recv(Str_Number)还原,得到

Recv(Session("SessionComm"))="http://passport.foosun.net/"
Recv( Session("SessionComV"))="ver.asp"
Recv( Session("SessionComN"))="news.asp"

而且大家都知道 小写"L" 和"1"长得很像,想让人看到迷惑就放弃分析...哎

累人啊 .

同时我还发现了一个检测SESSION的地方  真不知道风讯程序员是干什么这么无聊

Str_Tags = False If Replace(Session("SessionComm"),chr(108),"")<>"738585812716168166848481808385157180808486791579708516" Then Str_Tags = True If Replace(Session("SessionComV"),chr(108),"")<>"87708315668481" Then Str_Tags = True If Replace(Session("SessionComN"),chr(108),"")<>"7970888415668481" Then Str_Tags = True If Str_Tags Then Response.Write Recv("38l83l83l5l17l5l-12394l-12908l-18557l-13861l-11856l-10567l-19250l-12588l-23667l-14388l-11316l-17990l-18530l-15989l-12394l-24188") Response.End End If

当然我要说这代码还是有一定的技术含量,但是我们写程序是为了要程序的执行效率高,而不是绕过去绕过来的增加服务器的负荷,在风讯的代码里面 这样绕来绕去的代码太多了,还有大量的代码由于什么问题注释掉了  也不说明,或者直接删除,代码巨大.  在数据库里面有些表直接没有用到..... 几个public里面大量重复代码.  我不知道为什么这样一个  私下悄悄收集用户信息的程序,一个绕来绕去增加服务器负担的程序,一个有着大量垃圾代码的程序,一个说着开源却故意让人看不懂的程序,可以如此招摇的走到今天,

我是一个新手,或许我还不会怎么写程序,但是我们写一个程序的原则是要具备可读性,高效性这道理我知道.记得N年前上学的时候老师就告诉我们,别人用几十行代码可以解决的你如果用了几百行代码,执行通过了你也是失败的,一个程序不仅要达到功能 还要满足效率...

算了,51休息随便写两句...工作又要开始忙了.....

风讯CMS免费源代码不为人知的片段相关推荐

  1. frameset 后台管理_易达CMS下载-易达CMS(免费开源网站管理系统)v3.0.0.1103免费版

    易达CMS(免费开源网站管理系统)是基于微软的WINDOWS IIS平台,采用ASP语言ACCESS和MSSQL双数据库开发完成,整体系统采用强大的HTML引擎,模板设计和程序语言完全分开,这会让您在 ...

  2. 风讯CMS常见问题锦集

    点评:关键字描述:常见问题 &rdquo &ldquo 系统 是否 文件 如果 提示 权限 风讯CMS系统在使用的时候可能出现各种情况,根据详细的提示信息,分别找到解决的办法,目前遇到 ...

  3. [导入]网易娱乐频道也在用风讯CMS

    最近在做一个cms,参考了风讯.net cms ,发现网易娱乐频道也在用风讯CMS 大家打开下列链接看看: http://ent.163.com/08/0710/05/4GFGDSJU00032DGD ...

  4. git 源代码自动检查_除了GitHub,你还知道那些免费源代码托管网站?

    开源代码仓库网站对于开发应用软件的科技公司和开发者社区来说是至关重要的.对于需要 Git 版本控制系统的项目来说,GitHub 无疑是其中最佳的免费源代码托管网站.本文列出了可以用作 Git 代码仓库 ...

  5. 迅睿cms免费开源系统 v4.3.14

    迅睿cms源码是基于PHP7语言采用最新CodeIgniter4作为开发框架所打造的一个网站内容管理框架,提供"电脑网站 + 手机网站 + APP 接口"一体化网站技术解决方案.它 ...

  6. [迅睿CMS免费开源系统v4.4.9]PHP万能建站框架+网站内容管理框架+电脑网站+手机网站+APP

    介绍 迅睿CMS免费开源系统是基于PHP7语言采用最新CodeIgniter4作为开发框架生产的网站内容管理框架,提供"电脑网站 + 手机网站 + APP 接口"一体化网站技术解决 ...

  7. 代码编辑器源代码_10个最佳免费源代码编辑器可供下载

    借助Dreamweaver,Coda,Textmate等专业代码编辑器,越来越多的人已经部分地忘记了诸如Window的记事本之类的简单代码编辑器也就不足为奇了. 我们确实知道,简单并不意味着最好的选择 ...

  8. 苹果cms免费自适应模板下载

    为了给小白和刚接触本站的小伙伴们学习和认识的机会,本站特此提供了苹果cms系统2款免费的模板供大家学习和交流. 1,第一款是苹果cmsv10的模板:https://www.mytheme.cn/mac ...

  9. 织梦cms是什么-织梦CMS免费搭建工具只需要输入域名

    织梦cms是什么?织梦cms是一个内容管理系统,用于网站建设,那我们怎么快速搭建织梦cms网站,只需要输入域名选中主题(内置10W套海织梦cms模板),一个网站就搭建成了.还有大量的免费织梦cms插件 ...

最新文章

  1. 基于深度学习的视觉三维重建研究总结
  2. 在C#中调用windows API函数
  3. python 跳出for循环_python中如何退出for循环
  4. java for循环的这种写法怎么理解:for (; ; ) {},
  5. 码云 Gitee 新增仓库访问之 IP 白名单功能
  6. 约会安排 HDU - 4553
  7. 村土地利用规划和村庄规划的区别和联系
  8. sqlite3 交叉编译出现configure: error: C compiler cannot create executables
  9. 嵌入式Linux入门2:工具掌握(Windows篇)
  10. 添加lua_非关系型数据库Redis之Lua脚本
  11. PAT 乙级 1041. 考试座位号(15) Java版
  12. Dubbo-admin无法显示Group分组信息
  13. IPQ4019 QSDK 下添加RM500Q 5G 驱动 qmi拨号链接网络 配置 IPK包方法
  14. 【如何注销CSDN账号】说容易也容易,说难也难
  15. finalcut剪切快捷键_【FCPX】Final Cut Pro X 常用快捷键大全
  16. 我和王争学设计模式|原型模式
  17. kafka安装部署和使用
  18. FullCalendar-vue demo例子
  19. Win10+YOLOv4/v3用yolo_mark标记数据集 训练自己的模型
  20. 基础测绘计算函数设计(坐标正反算、交会计算)

热门文章

  1. 学习NLP的第14天——语言模型的训练与预测
  2. [洛谷1462 ]通往奥格瑞玛的道路---二分答案+spfa
  3. 数据结构与算法单排日记-2020/3/6-链表之双链表
  4. 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
  5. 图片画圈画箭头用什么软件_怎么在excel图片上画箭头 | 在excel里面怎样画圆圈里面有叉...
  6. HR产品市场前途一片光明
  7. 「COCI 2018.10.20」Teoretičar
  8. Cocos Creator 3D 必懂知识(点乘、叉乘)
  9. 【UWP开发】uwp应用安装失败
  10. PotPlayer设置