今天用仿站工具下載了一個比較不錯的html5網站,但在本地就無法打開,打開的網頁是個白板。檢查元素髮現沒有body元素,本地代碼明明有boby,瀏覽器中卻沒有,估計是js在搗鬼。 挨個註銷引用的js,發現被註銷後,能顯示一點網頁內容。 分析這個js,先是整理格式,發現有一個註釋// index.js... ...
今天用仿站工具下載了一個比較不錯的html5網站,但在本地就無法打開,打開的網頁是個白板。檢查元素髮現沒有body元素,本地代碼明明有boby,瀏覽器中卻沒有,估計是js在搗鬼。
挨個註銷引用的js,發現<script src="style/index.min.js"></script>被註銷後,能顯示一點網頁內容。
分析這個js,先是整理格式,發現有一個註釋// index.js以下的內容都是加密亂碼,如下圖:
<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; // 原來加密代碼內容是這行 document.getElementById('textareaID').innerText=p; // 新添加這行代碼把解密後的內容提取到上面新建的文本框中 // 參考文章地址http://blog.csdn.net/cainiaoxiaozhou/article/details/8960561 } ('c y=0,1J=0;c 2h=1p,11=N;c Z,1e,1c,16;$(9(){c m=2P.34.1M.4L().39(/#p(\\d+)$/)
我搜索這個函數發現是一種js加密的方法,其實本身已經有解密了,只是源代碼為return p; 將這個p的內容列印到 文本框中,解碼了js代碼加密
第二步分析js,我懷疑是某段js操作隱藏了body元素,本地和原網站的唯一區別就是網址,但是在js中查找原網站網址沒有找到。挨個搜索查找控制body元素的js,終於發現了玄機,他把網址用函數重新寫了一下,如果網址不為他這個就刪除了body,代碼如下:
function authentication() { //綁定功能變數名稱地址的小花招,不是他這個功能變數名稱刪除body // var suffix = "com", // count = 1, // dot = "."; // var d = (count + 999).toString() + "zhu" + dot + suffix; // if (window.location.host.indexOf(d) < 0) { // $("body").remove(); // return false // } return true }將網址判斷註銷掉,直接返回真即可本地訪問了