源代码如下:eval(function(p,a,c,k,e,d){e=function(c){return(c35?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}('3 f;3 C=6 2k();3 E;3 z;3 w;3 l=6 11(0);3 N=D;d 2l(){}d 2t(){3 R=6 7.9.G(1z.1i,-4.1f);3 1I={1l:5,1p:R,2A:7.9.2p.2a,29:\'27\',2c:{1Y:7.9.1Z.2E}};f=6 7.9.2x(b.a("2D"),1I);b.a("v").h="";b.a("K").h=1K;1S(1K);7.9.13.2n(f,\'2r\',1N)}d 1N(13){17(13.2q)}d 2v(){g(z){z.k(j)}g(l){15(i 1o l){l[i].k(j)}}g(w){w.k(j)}l=6 11(0);b.a("v").h="";3 R=6 7.9.G(1z.1i,-4.1f);f.1x(R);f.2s(5)}d 17(c){b.a("t").M="2o 2j";g(z){z.k(j)}g(l){15(i 1o l){l[i].k(j)}}g(w){w.k(j)}l=6 11(0);g(b.a("2m").1q){w=1D(c,"2u r");w.k(f)}3 F=b.a("K").h;z=1r(c,F);z.k(f);b.a("t").M="
<2B 2C=\'J/2z.2i\' />2w...";b.a("v").h="";1d(F,c.y(),c.x())}d 1r(c,1b){1b*=2y;1e=6 7.9.2e({1p:c,1s:1b,1X:"#21",2h:0.8,2d:1,23:"#2f",2g:0.25,f:j});H 1e}d 1d(F,y,x){E=6 7.9.2b();3 q;18{q=6 26()}19(e){18{q=6 1R("24.1j")}19(e){18{q=6 1R("2R.1j")}19(e){1U("3f 3g 3h 1V 3e 3d!");H 1g}}}q.39=d(){g(q.3a==4){3 1m=q.3c;3 t="";3 O=0;3 o=1m.3i.3j("m");15(3 i=0;iY){b.a("K").h=Y;s=Y}b.a("1M").h=(s*(1/1.1F)).1G(2)}d 36(s){g(s>X){b.a("1M").h=X;s=X}b.a("K").h=(s*1.1F).1G(2)}d 30(1O,1E){C.2Z(j,d(){g(C.14[0]){3 1B=C.14[0].y;3 1C=C.14[0].x;3 c=6 7.9.G(1B,1C);1E(c)}1c{1U("2V 1V 1T!")}});C.2U(1O+", 2W")}d 2X(16){3 1H=16.y();3 1J=16.x();3 c=6 7.9.G(S(1H),S(1J));17(c)}d 1D(c,1t){3 U=6 7.9.T(\'J/o/2Y.V\',6 7.9.Q(20,34),6 7.9.r(0,0),6 7.9.r(10,33));3 u=6 7.9.T(\'J/1A/u.V\',6 7.9.Q(28,22),6 7.9.r(0,0),6 7.9.r(1,22));3 m=6 7.9.1L({1k:c,f:f,u:u,1n:U,1y:1t,1h:D});H m}',62,214,'|||var|||new|google||maps|getElementById|document|point|function||map|if|value||null|setMap|routeMarkers|er||ers||xmlHttp|Point|inp|output|shadow|tb_output|centreer|lng|lat|circle|outcode|strText|localSearch|true|bounds|givenRad|LatLng|return|getAttribute|images|tb_radius|id|innerHTML|togglecsv|count|strTarget|Size|latlng|parseFloat|MarkerImage|image|png|replaceAll|200|320|rn||Array|intIndexOfMatch|event|results|for|pointin|startdraw|try|catch|dist|rad|else|showallwithfilter|draw_circle|21875|false|draggable|82659674299412|XMLHTTP|position|zoom|xml|icon|in|center|checked|DrawCircle|radius|text|urltext|length|Math|setCenter|title|53|gmersv3|resultLat|resultLng|placeCentreMarker|callbackFunction|609344|toFixed|str_lat|myOptions|str_lng|50|Marker|tb_radius_miles|ftn_mapclick|place|placeMarker|indexOf|ActiveXObject|tb_radius_changed|found|alert|not|strSubString|strokeColor|style|MapTypeControlStyle||FF0000||fillColor|Msxml2||XMLHttpRequest|crosshair||draggableCursor|ROADMAP|LatLngBounds|mapTypeControlOptions|strokeWeight|Circle|0000FF|fillOpacity|strokeOpacity|gif|Radius|GlocalSearch|GUnload|cb_showcentre|addListener|Drawing|MapTypeId|latLng|click|setZoom|Gload|Centre|resetmap|Searching|Map|1000|loading|mapTypeId|img|src|map_canvas|DROPDOWN_MENU|get|GET|open|send|ftn_togglecsv|String|php|inside|9999|random|ajax|all|Microsoft|prototype|this|execute|Location|UK|placeMarkerAtPoint|red|setSearchCompleteCallback|usePointFromPostcode|while|replace|||freemaptools|tb_radius_miles_changed|floor|postcodes|onreadystatechange|readyState|Done|responseXML|AJAX|support|Your|browser|does|documentElement|getElementsByTagName|substring|Re|getCenter|fitBounds|push|cb_showpcers|extend|km'.split('|'),0,{}))
以前用http://jsbeautifier.org/的,但上面这段代码解不出来,求解和方法,多谢!~

解决方案 »

  1.   

     我刚用http://tool.lu/js 也解密不出来, 总感觉 后面那些连在一起的,用|拼在一起的字符串不知道啥意思,前面的那些都是可以解密出来的.
      

  2.   

    <2B 2C=\'J/2z.2i\' />2w...   明显没复制完整";b.a("v").h="";1d(F,c.y(),c.x())}d 1r(c,1b)
      

  3.   

    楼上的兄弟们,谢谢回复,但代码真的都复制下来了,绝对是全部。链接如下:
    http://www.freemaptools.com/script/find-uk-postcodes-inside-radius.js
    网页地址:
    http://www.freemaptools.com/find-uk-postcodes-inside-radius.htm代码绝对是能用的,可见其完整性。再次感谢~~
      

  4.   

    链接如下: http://www.freemaptools.com/script/find-uk-postcodes-inside-radius.js
    别玩了,你打开看看源代码,只有01001010101.....没有一个英文字母
      

  5.   

    我现在打开也是01,但如果先访问http://www.freemaptools.com/find-uk-postcodes-inside-radius.htm,在查看源文件里,点击js文件,就可以看到加密的源代码。估计是管理员设置了,在没有referrer的情况下,显示01吧。保护性很强啊。
      

  6.   

    var map;
    var localSearch = new GlocalSearch();
    var bounds;
    var circle;
    var centreer;
    var routeMarkers = new Array(0);
    var togglecsv = true;function GUnload() {}
    function Gload() {
    var latlng = new google.maps.LatLng(53.82659674299412, -4.21875);
    var myOptions = {
    zoom: 5,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    draggableCursor: 'crosshair',
    mapTypeControlOptions: {
    style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
    }
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    document.getElementById("tb_output").value = "";
    document.getElementById("tb_radius").value = 50;
    tb_radius_changed(50);
    google.maps.event.addListener(map, 'click', ftn_mapclick)
    }
    function ftn_mapclick(event) {
    startdraw(event.latLng)
    }
    function resetmap() {
    if (circle) {
    circle.setMap(null)
    }
    if (routeMarkers) {
    for (i in routeMarkers) {
    routeMarkers[i].setMap(null)
    }
    }
    if (centreer) {
    centreer.setMap(null)
    }
    routeMarkers = new Array(0);
    document.getElementById("tb_output").value = "";
    var latlng = new google.maps.LatLng(53.82659674299412, -4.21875);
    map.setCenter(latlng);
    map.setZoom(5)
    }
    function startdraw(point) {
    document.getElementById("output").innerHTML = "Drawing Radius";
    if (circle) {
    circle.setMap(null)
    }
    if (routeMarkers) {
    for (i in routeMarkers) {
    routeMarkers[i].setMap(null)
    }
    }
    if (centreer) {
    centreer.setMap(null)
    }
    routeMarkers = new Array(0);
    if (document.getElementById("cb_showcentre").checked) {
    centreer = placeCentreMarker(point, "Centre Point");
    centreer.setMap(map)
    }
    var givenRad = document.getElementById("tb_radius").value;
    circle = DrawCircle(point, givenRad);
    circle.setMap(map);
    document.getElementById("output").innerHTML = "<p><img src='images/loading.gif' />Searching...</p>";
    document.getElementById("tb_output").value = "";
    showallwithfilter(givenRad, point.lat(), point.lng())
    }
    function DrawCircle(point, rad) {
    rad *= 1000;
    draw_circle = new google.maps.Circle({
    center: point,
    radius: rad,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 1,
    fillColor: "#0000FF",
    fillOpacity: 0.25,
    map: null
    });
    return draw_circle
    }
    function showallwithfilter(givenRad, lat, lng) {
    bounds = new google.maps.LatLngBounds();
    var xmlHttp;
    try {
    xmlHttp = new XMLHttpRequest()
    } catch (e) {
    try {
    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")
    } catch (e) {
    try {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
    } catch (e) {
    alert("Your browser does not support AJAX!");
    return false
    }
    }
    }
    xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState == 4) {
    var xml = xmlHttp.responseXML;
    var output = "";
    var count = 0;
    var ers = xml.documentElement.getElementsByTagName("er");
    for (var i = 0; i < ers.length; i++) {
    var id = ers[i].getAttribute("id");
    var dist = ers[i].getAttribute("dist");
    var outcode = ers[i].getAttribute("outcode");
    var point = new google.maps.LatLng(parseFloat(ers[i].getAttribute("lat")), parseFloat(ers[i].getAttribute("lng")));
    bounds.extend(point);
    var er = placeMarker(id, point, outcode + " (" + dist + "km)");
    if (document.getElementById("cb_showpcers").checked) {
    er.setMap(map)
    } else {
    er.setMap(null)
    }
    routeMarkers.push(er);
    output += outcode + ",";
    count++
    }
    document.getElementById("tb_output").value = output.substring(0, output.length - 1);
    document.getElementById("output").innerHTML = "Re-zoom...";
    if (count != 0) {
    map.setCenter(bounds.getCenter());
    map.fitBounds(bounds)
    }
    document.getElementById("output").innerHTML = "Done (" + count + " found)"
    }
    };
    var rn = Math.floor(Math.random() * 9999);
    var urltext = "ajax/get-all-outcode-postcodes-inside.php?radius=" + givenRad + "&lat=" + lat + "&lng=" + lng + "&rn=" + rn;
    xmlHttp.open("GET", urltext, true);
    xmlHttp.send(null)
    }
    function ftn_togglecsv() {
    if (togglecsv) {
    togglecsv = false;
    document.getElementById("tb_output").value = document.getElementById("tb_output").value.replaceAll(",", "\n")
    } else {
    togglecsv = true;
    document.getElementById("tb_output").value = document.getElementById("tb_output").value.replaceAll("\n", ",")
    }
    }
    String.prototype.replaceAll = function(strTarget, strSubString) {
    var strText = this;
    var intIndexOfMatch = strText.indexOf(strTarget);
    while (intIndexOfMatch != -1) {
    strText = strText.replace(strTarget, strSubString);
    intIndexOfMatch = strText.indexOf(strTarget)
    }
    return (strText)
    };function placeMarker(id, point, outcode) {
    var image = new google.maps.MarkerImage('images/ers/freemaptools.png', new google.maps.Size(20, 34), new google.maps.Point(0, 0), new google.maps.Point(10, 33));
    var shadow = new google.maps.MarkerImage('images/gmersv3/shadow.png', new google.maps.Size(28, 22), new google.maps.Point(0, 0), new google.maps.Point(1, 22));
    var er = new google.maps.Marker({
    position: point,
    map: map,
    shadow: shadow,
    icon: image,
    title: outcode,
    draggable: true
    });
    return er
    }
    function tb_radius_changed(inp) {
    if (inp > 320) {
    document.getElementById("tb_radius").value = 320;
    inp = 320
    }
    document.getElementById("tb_radius_miles").value = (inp * (1 / 1.609344)).toFixed(2)
    }
    function tb_radius_miles_changed(inp) {
    if (inp > 200) {
    document.getElementById("tb_radius_miles").value = 200;
    inp = 200
    }
    document.getElementById("tb_radius").value = (inp * 1.609344).toFixed(2)
    }
    function usePointFromPostcode(place, callbackFunction) {
    localSearch.setSearchCompleteCallback(null, function() {
    if (localSearch.results[0]) {
    var resultLat = localSearch.results[0].lat;
    var resultLng = localSearch.results[0].lng;
    var point = new google.maps.LatLng(resultLat, resultLng);
    callbackFunction(point)
    } else {
    alert("Location not found!")
    }
    });
    localSearch.execute(place + ", UK")
    }
    function placeMarkerAtPoint(pointin) {
    var str_lat = pointin.lat();
    var str_lng = pointin.lng();
    var point = new google.maps.LatLng(parseFloat(str_lat), parseFloat(str_lng));
    startdraw(point)
    }
    function placeCentreMarker(point, text) {
    var image = new google.maps.MarkerImage('images/ers/red.png', new google.maps.Size(20, 34), new google.maps.Point(0, 0), new google.maps.Point(10, 33));
    var shadow = new google.maps.MarkerImage('images/gmersv3/shadow.png', new google.maps.Size(28, 22), new google.maps.Point(0, 0), new google.maps.Point(1, 22));
    var er = new google.maps.Marker({
    position: point,
    map: map,
    shadow: shadow,
    icon: image,
    title: text,
    draggable: true
    });
    return er
    }
      

  7.   

    这段代码目的是压缩而不是加密.压缩过程是首先扫描整个程序,将所有的单词用一个数字代替.(与啥夫曼压缩类似,但这个比哈夫曼要简单得多)
    它具体的算法我没细跟, 主要原理如下:比如我有一段原程序var name = 'blee';
    var sex = false;
    alert(name);
    加密程序会先扫描整个程序,得到这段代码里有如下单词:
    var name blee sex false alert, 然后按照使用频率+单词长度排序,使用频率越高在前,单词长度越长在前
    于是就得到一个数组(我把排序省了)   '|var|name|blee|sex|false|alert'.split('|') //这就是前边某楼说看不懂的那段字符串
    接下来程序就会变成"1 2='3';1 4=5;6(4)"当然, 为了让程序源码压缩得更好,你们要研究的代码里的数字使用的是36进制,因为数字加字符总共是36个.
    然后会把这段数字表示的源代码和单词表一起发到前端.接下来就到了前端解密的过程了, 使用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
    }
    看一下这个正则表达式  new RegExp('\\b' + e(c) + '\\b', 'g'),它将所有的单词字符替换成原有的单词
    比如我要将我的压缩源码还原
    "1 2='3';1 4=5;6(4)".replace(new RegExp('\\b' + 1 + '\\b', 'g'), 'var');//后边我直接写了个var,其实应该是单词表[1]
    就得到了"var 2='3';var 4=5;6(4)"
    继续替换2,3,4和更多,就得到了源代码
    你们所压缩的源代码解压缩后就得到了 @cn00439804 所提交的那段代码这种压缩方式是很常见的,哈夫曼,还有图像处理里的bitmap也是这个原理
      

  8.   

    多谢指教!!cn00439804兄,能不能讲讲咋解压的呢?有没有现成的工具?另外,请教一下cn00439804和B_Lee,这样的压缩过程,如果我也想把程序代码压缩成这样,是否有现成的在线工具?
      

  9.   

    哈哈 根据B_Lee兄的描述解压出来了