当前位置:
首页 >
用javascript自制ctf词频分析工具
发布时间:2025/4/16
46
豆豆
生活随笔
收集整理的这篇文章主要介绍了
用javascript自制ctf词频分析工具
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
不废话,上代码:
<!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="全部转大写" onclick="upperCase()" style="margin:10px 30px;"/> <input type="button" value="全部转小写" onclick="lowerCase()" style="margin:10px 30px;"/> <input type="button" value="加载测试内容" 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="添加转换条件" style="margin:10px 30px;" onclick="add_change()" /> <input type="button" value="转换" style="margin:10px 50px;" onclick="change_cipher()" /> <div id="buttons"> </div> </td> <td style="width:20%;">当前词频<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 +',出现次数:'+ 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"/>转为\<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小工具,通过添加条件将特定的数字或字母替换成正确的字符来对加密的文本进行破译,最终得到正确的flag的一种题型。
我已经将测试题目加到里面去了。用户可以自行尝试,还是蛮有意思的东西。
总结
以上是生活随笔为你收集整理的用javascript自制ctf词频分析工具的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 用archoctopus下载花瓣
- 下一篇: 用JavaScript实现简单的exce