页面里嵌进去的两段脚本,应该是用来生成验证码,然后提取图片地址的,想问一下这两段是啥意思,如果可以的话翻译成c语言最好了。很乱,不好意思。先谢过了。     <script>
        charid = "70695";
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('8 0=9();3(0==7){2("6!");4.5()}b 3(0.a<1){2("6!");4.5()}',12,12,'array_img||alert|if|this|close|参数错误|null|var|desMe|length|else'.split('|'),0,{}))
    </script>
    <script type="text/javascript">
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('7(5!=t){3=i.v[\'k\'];7(!3){3=i.k}7(h(6,0)>5.g-1){6=(5.g-1).s()}3.B.D=6;3.f.b="../../w/z.y";x("A");7(h(6,0)<5.g-2){d e=E(5[6],5[h(6,0)+1]);3.f.b=e[0];3.C.b=e[1]}n{3.f.b=u(5[6])}}9 U(){7(4.c==V){T()}n 7(4.c==R){S()}}j();9 j(){8.l=9(){4.q=r;d a=4.Y.X.W();p(a=="Q"||a=="I"||a=="J")};8.m=9(){4.q=r;d o=4.c;p!(o==H&&4.F)};G(8.i){K=O=P=8.l;N=8.m};L("j()",M)}',61,61,'|||theForm|event|array_img|page|if|window|function|sSrcTagName|src|keyCode|var|array|pic|length|parseInt|document|stt|form1|ClearEvent|ClearKey|else|iKeyCode|return|cancelBubble|false|toString|null|uncMe|forms|image|setView|gif|loading|oDv|Sx|nxpic|value|uncMeTwo|ctrlKey|with|78|input|select|oncontextmenu|setTimeout|500|onkeydown|onselectstart|ondragstart|textarea|16|p_onclick|nc_onclick|pressup|32|toLowerCase|tagName|srcElement'.split('|'),0,{}))
    </script>这是原地址。
http://www.dm5.com/Comic/MH70/Comics-70695_fed36b63.htm

解决方案 »

  1.   

    var array_img=desMe();
    if(array_img==null){
      alert("\u53c2\u6570\u9519\u8bef\uff01");
      this.close();
    }else {
      if(array_img.length<1){
        alert("\u53c2\u6570\u9519\u8bef\uff01");
        this.close();
      }
    }if(array_img!=null){
      theForm=document.forms["form1"];
      if(!theForm){
        theForm=document.form1;
      }
      if(parseInt(page,0)>array_img.length-1){
        page=(array_img.length-1).toString();
      }
      theForm.Sx.value=page;
      theForm.pic.src="../../image/loading.gif";
      setView("oDv");
      if(parseInt(page,0)<array_img.length-2){
        var array=uncMeTwo(array_img[page],array_img[parseInt(page,0)+1]);
        theForm.pic.src=array[0];
        theForm.nxpic.src=array[1];
      }else {
        theForm.pic.src=uncMe(array_img[page]);
      }
    }
    function pressup(){
      if(event.keyCode==32){
        nc_onclick();
      }else {
        if(event.keyCode==16){
          p_onclick();
        }
      }
    }
    stt();
    function stt(){
      window.ClearEvent=function(){
        event.cancelBubble=false;
        var sSrcTagName=event.srcElement.tagName.toLowerCase();
        return (sSrcTagName=="textarea"||sSrcTagName=="input"||sSrcTagName=="select");
      };
      window.ClearKey=function(){
        event.cancelBubble=false;
        var iKeyCode=event.keyCode;
        return !(iKeyCode==78&&event.ctrlKey);
      };
      with(window.document){
        oncontextmenu=onselectstart=ondragstart=window.ClearEvent;
        onkeydown=window.ClearKey;
      }
      setTimeout("stt()",500);
    }
      

  2.   

    这个问题我已经回答过N遍了。N+1把eval换成alert即可eval就是执行一段javascript脚本字符串,alert则是输出字符串。
      

  3.   

    谢楼上了,对java一点不懂,见笑了
      

  4.   

    这是java么?————————
      

  5.   

    javascript属于c语系基本修改不多,这个代码又没几行问题是C里没有dom对象,你这么操作?如果你要在c里操作浏览器对象,最方便的方法还是调用javascript。参考:WebBrowser执行脚本和调用外部方法。
      

  6.   

    java和javascript,就好像风和马的关系风马不相及,只是有几个字母类似而已。
      

  7.   


    我抓包看了看内容,后面浏览器要继续POST两次,第一个POST过去让服务器执行一个函数/ajax/DM5Func.FuncAjax,DM5Func.ashx?_method=ImageDes&_session=no执行之后返回给我一串字符,然后我第二次POST过去另一串字符,然后自行服务器的另一个函数,服务器看看我返回的这一串字符正确了,才返回真正的图片地址。我估计这我我第二次POST的那一串字符就是接收过来的字符通过那个脚本处理后的记过。我希望用c语言来模拟这两次POST的过程,所以需要知道这个脚本的算法。
      

  8.   

    存为hta程序调试。
    <img id="img_des"/>
    <script type="text/javascript">
    (function() {
    var urlImageDes = "http://www.dm5.com/ajax/DM5Func.FuncAjax,DM5Func.ashx?_method=ImageDes&_session=no";
    var urlUnImageDesTwo =  "http://www.dm5.com/ajax/DM5Func.FuncAjax,DM5Func.ashx?_method=UnImageDesTwo&_session=no";
    var strid = 70695;
    var strpage = 2; var contentText = "strid=" + strid + "&strpage=" + strpage;
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    try
    {
    xmlhttp.open("post", urlImageDes, false);
    xmlhttp.setRequestHeader("CONTENT-LENGTH", contentText.length);
    xmlhttp.setRequestHeader("CONTENT-TYPE", "text/xml; charset=utf-8");
    xmlhttp.setRequestHeader("Referer", "");
    xmlhttp.send(contentText);
    eval("var datas = " + xmlhttp.responseText);
    } catch (e) {
    } var contentText = "date1=" + encodeURIComponent(datas[2]) + "&date2=" + encodeURIComponent(datas[3]) + "&key=" + datas[17];
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    try
    {
    xmlhttp.open("post", urlUnImageDesTwo, false);
    xmlhttp.setRequestHeader("CONTENT-LENGTH", contentText.length);
    xmlhttp.setRequestHeader("CONTENT-TYPE", "text/xml; charset=utf-8");
    xmlhttp.setRequestHeader("Referer", "");
    xmlhttp.send(contentText);
    eval("var imgs = " + xmlhttp.responseText);
    document.getElementById("img_des").src = imgs[0];
    } catch (e) {
    }
    })();
    </script>
    你都跟包了,那还看不出来
    第二次提交的数据,在第一次返回的结果中都有,而且没有经过加密处理
    唯一需要处理的地方就是进行一次url编码,也就是把+替换成%2B =替换为%3D之类C要做一些字符串解析除此而已本回复只提供技术交流用,涉及版权纠纷由使用者承担。