當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
用javascript自制ctf词频分析工具
生活随笔
收集整理的這篇文章主要介紹了
用javascript自制ctf词频分析工具
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
不廢話,上代碼:
<!DOCTYPE html> <html> <head><title></title> </head> <body style="margin:0;width:100%;height:100%;"> <!--created by zengzhaosi--> <p style="background-color:deepskyblue;width:100%;height:50px;color:white;font-size:26px;margin:0;padding:0;text-align:center;line-height:50px;">詞頻分析器</p> <table style="border-collapse:collapse;width:100%;height:100%;"> <tr valign="top"> <td style="width:65%;"> <div>請輸入密文:<input type="button" value="全部轉(zhuǎn)大寫" onclick="upperCase()" style="margin:10px 30px;"/> <input type="button" value="全部轉(zhuǎn)小寫" onclick="lowerCase()" style="margin:10px 30px;"/> <input type="button" value="加載測試內(nèi)容" onclick="loadTest()" style="margin:10px 30px;"/></div> <textarea style="min-width:300px;min-height:150px;width:90%;" onchange="calc_letter_frequency()" onpropertychange="calc_letter_frequency()" oninput="calc_letter_frequency()" id="cipher"></textarea> <div>明文:</div><div style="min-width:300px;min-height:150px;width:90%;border:1px solid black;font-size:14px;" id="plain"></div> <input type="button" value="添加轉(zhuǎn)換條件" style="margin:10px 30px;" onclick="add_change()" /> <input type="button" value="轉(zhuǎn)換" style="margin:10px 50px;" onclick="change_cipher()" /> <div id="buttons"> </div> </td> <td style="width:20%;">當(dāng)前詞頻<div id="current_letter_frequency"></div></td> <td style="width:15%;">一般英文詞頻<div id="english_letter_frequency"></div></td> </tr> </table> </body> <script type="text/javascript"> String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) { if (!RegExp.prototype.isPrototypeOf(reallyDo)) { return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi": "g")), replaceWith); } else { return this.replace(reallyDo, replaceWith); } } var plaincolor = "skyblue"; window.onload = function(){var str = "";var english_letter_frequency = [{"letter":"a","frequency":0.08167},{"letter":"b","frequency":0.01492},{"letter":"c","frequency":0.02782},{"letter":"d","frequency":0.04253},{"letter":"e","frequency":0.12702},{"letter":"f","frequency":0.02228},{"letter":"g","frequency":0.02015},{"letter":"h","frequency":0.06094},{"letter":"i","frequency":0.06966},{"letter":"j","frequency":0.00153},{"letter":"k","frequency":0.00772},{"letter":"l","frequency":0.04025},{"letter":"m","frequency":0.02406},{"letter":"n","frequency":0.06749},{"letter":"o","frequency":0.07507},{"letter":"p","frequency":0.01929},{"letter":"q","frequency":0.00095},{"letter":"r","frequency":0.05987},{"letter":"s","frequency":0.06327},{"letter":"t","frequency":0.09056},{"letter":"u","frequency":0.02758},{"letter":"v","frequency":0.00978},{"letter":"w","frequency":0.02360},{"letter":"x","frequency":0.00150},{"letter":"y","frequency":0.01974},{"letter":"z","frequency":0.00074}];function sortByFrequency(a,b){return b.frequency - a.frequency;}english_letter_frequency.sort(sortByFrequency);for(var i=0;i<english_letter_frequency.length;i++){str += '<span style="font-size:14px;background-color:'+(i%2?"white":"skyblue")+'">'+ english_letter_frequency[i].letter +',詞頻:' + english_letter_frequency[i].frequency + '</span><br>'}id("english_letter_frequency").innerHTML = str; } function id(x){ return document.getElementById(x);} function loadTest(){var str = `TW5650Y - 0TS UZ50S S0V LZW UZ50WKW 9505KL4G 1X WVMUSL510 S001M0UWV 910VSG S0 WFLW0K510 1X LZW54 WF5KL50Y 2S4L0W4KZ52 L1 50U14214SLW X5L0WKK S0V TSK7WLTS88 VWNW8129W0L 50 W8W9W0LS4G, 95VV8W S0V Z5YZ KUZ118K SU41KK UZ50S.LZW S001M0UW9W0L ESK 9SVW SL S K5Y050Y UW4W910G L1VSG TG 0TS UZ50S UW1 VSN5V KZ1W9S7W4 S0V FM LS1, V54WUL14 YW0W4S8 1X LZW 50LW40SL510S8 U112W4SL510 S0V WFUZS0YW VW2S4L9W0L 1X LZW 9505KL4G 1X WVMUSL510."EW S4W WFU5LWV L1 T41SVW0 1M4 2S4L0W4KZ52 E5LZ LZW 9505KL4G 1X WVMUSL510 L1 9S7W S 810Y-8SKL50Y 592SUL 10 LZW 85NWK 1X UZ50WKW KLMVW0LK LZ41MYZ S 6150L8G-VWK5Y0WV TSK7WLTS88 UM445UM8M9 S0V S E5VW 4S0YW 1X KUZ118 TSK7WLTS88 241Y4S9K," KS5V KZ1W9S7W4. "LZ5K U1995L9W0L 9S47K S01LZW4 958WKL10W 50 LZW 0TS'K G1MLZ S0V TSK7WLTS88 VWNW8129W0L WXX14LK 50 UZ50S."X8SY{YK182V9ZUL9STU5V}';`id("cipher").value = str; } function upperCase(){var str = id("cipher").value.toUpperCase();id("cipher").value = str;calc_letter_frequency(); } function lowerCase(){var str = id("cipher").value.toLowerCase();id("cipher").value = str;calc_letter_frequency(); } function calc_letter_frequency(x){var cipher = id("cipher").value.replace(/\s+/g,"");if(x){cipher = x;}var len = cipher.length;var counters = {};for(var i=0;i<len;i++){if(cipher[i] in counters){counters[cipher[i]] += 1}else{counters[cipher[i]] = 1} }var result = [];for(var i in counters){result.push({"char":i,"num":counters[i],"frequency":(counters[i]/len).toFixed(5),})}function sortByNum(a,b){return b.num - a.num;}result.sort(sortByNum);var current_letter_frequency = "";for(var i=0;i<result.length;i++){current_letter_frequency += '<span style="font-size:14px;background-color:'+(i%2?"white":"skyblue")+'">'+ result[i].char +',出現(xiàn)次數(shù):'+ result[i].num +',詞頻:'+result[i].frequency+'</span><br>'}id("current_letter_frequency").innerHTML = current_letter_frequency; } var add_counter = 0; function add_change(){var buttons = id("buttons");var span = document.createElement("span");span.innerHTML = '<span style="background-color:deepskyblue;padding:5px;margin:5px;" id="add'+add_counter+'" class="add">\<input type="input" style="width:20px;" id="from'+add_counter+'" class="from"/>轉(zhuǎn)為\<input type="input" style="width:20px;" id="to'+add_counter+'" class="to"/>\<input type="button" value="刪除" style="font-size:8px;margin:3px;" onclick="del_add('+add_counter+')"/></span>'buttons.appendChild(span);add_counter += 1; }function del_add(n){id("add"+n).remove(); }function change_cipher(){var adds = document.getElementsByClassName("add");if(adds.length){var cipher = id("cipher").value;var plain = "";var real_plain = "";var froms = document.getElementsByClassName("from");var tos = document.getElementsByClassName("to");for(var i=0;i<cipher.length;i++){var notchange = true;for(var j=0;j<froms.length;j++){if(cipher[i] == froms[j].value){plain += "<span style='background-color:"+plaincolor+"'>"+tos[j].value+"</span>";real_plain += tos[j].value;notchange = false;break;}}if(notchange){plain += cipher[i];real_plain += cipher[i];}}id("plain").innerHTML = plain;calc_letter_frequency(real_plain.replace(/\s+/g,""));} }</script> </html>這個東西是之前為了對付CTF里面的一種詞頻分析題而寫的一個javascript小工具,通過添加條件將特定的數(shù)字或字母替換成正確的字符來對加密的文本進行破譯,最終得到正確的flag的一種題型。
我已經(jīng)將測試題目加到里面去了。用戶可以自行嘗試,還是蠻有意思的東西。?
總結(jié)
以上是生活随笔為你收集整理的用javascript自制ctf词频分析工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用archoctopus下载花瓣
- 下一篇: 用技嘉Windows Image Too