1. 程式人生 > 其它 >NaNNaNNaNNaN-Batman

NaNNaNNaNNaN-Batman

1.判別檔案型別:
帶有SCRIPT標籤所以判斷是html檔案
2.亂碼:
在這裡插入圖片描述
唯一能看清的幾句:

  1. _='function ( ) 等 於 一 個 () _等於一個 ()函式內容 _是一個被賦予函式意義的變數

2.’)with(.split($[Y]))=join(pop());eval(_)
eval(_)函式執行 _,從這裡也看的出_是一個被eval執行的變數

按字串執行的,所以

核心程式碼:
eval函式,這是執行函式;這裡執行了_變數中的內容也就是’'中的內容,但是,要注意的是,它並沒有執行 ( ) 函 數 , 僅 僅 執 行 了 字 符 串 而 已 ( 從 而 導 致 亂 碼 ) , 因 而 頁 面 h t m l 頁 面 沒 有 任 何 顯 示 , 只 顯 示 了 i n p u t 標 籤 的 內 容 , 但 是 我 們 想 讓 源 代 碼 正 常 顯 示 出 來 , 不 進 行 執 行 , 那 麼 , 我 們 就 用 到 了 a l e r t 彈 窗 ( 將 e v a l 函 數 改 為 a l e r t ) , 將 亂 碼 的 ()函式,僅僅執行了字串而已(從而導致亂碼),因而頁面html頁面沒有任何顯示,只顯示了input標籤的內容,但是我們想讓原始碼正常顯示出來,不進行執行,那麼,我們就用到了alert彈窗(將eval函式改為alert),將亂碼的

()htmlinputalertevalalert()函式原始碼完整顯示出來
這裡可以使用瀏覽器開啟,也可以將修改後的原始碼放入控制檯執行(放入控制檯需要注意刪除script前後標籤)
瀏覽器開啟:

function $(){
var e=document.getElementById("c").value;
if(e.length==16)
   if(e.match(/^be0f23/)!=null
) if(e.match(/233ac/)!=null) if(e.match(/e98aa$/)!=null) if(e.match(/c7be9/)!=null){ var t=["fl","s_a","i","e}"]; var n=["a","_h0l","n"]; var r=["g{","e"
,"_0"]; var i=["it'","_","n"]; var s=[t,n,r,i]; for(var o=0;o<13;++o){ document.write(s[o%4][0]);s[o%4].splice(0,1)} } } document.write('<input id="c"><button οnclick=$()>Ok</button>'); delete _

可以看到需要滿足幾個 if 中的正則表示式條件,^表示開始,$表示結尾
在輸入框中輸入自己構造好的滿足正則表示式的程式碼,得到 flag