<!DOCTYPE html>
<html>
<head>
<title>難読化プログラム</title>
</head>
<body>
<h1>ソースコードを難読化するプログラム</h1>
<form>
<textarea id="input" rows="10" cols="50"></textarea>
<br>
<button type="button" onclick="obfuscate()">難読化</button>
<button type="reset">リセット</button>
</form>
<hr>
<h2>結果</h2>
<textarea id="output" rows="10" cols="50"></textarea>
<script type="text/javascript">
function obfuscate() {
var input = document.getElementById("input").value;
var output = "";
// 文字列をUnicodeエスケープに変換する
for (var i = 0; i < input.length; i++) {
output += "\\u" + ("0000" + input.charCodeAt(i).toString(16)).substr(-4);
}
// コメントを削除する
output = output.replace(/(\/\/.*)/g, "");
// 関数名をシャッフルする
output = output.replace(/function\s+([a-zA-Z_$][0-9a-zA-Z_$]*)/g, function(match, p1) {
return "function " + shuffle(p1);
});
// 変数名をシャッフルする
output = output.replace(/([a-zA-Z_$][0-9a-zA-Z_$]*)\s*=/g, function(match, p1) {
return shuffle(p1) + "=";
});
// リターン文から変数名を削除する
output = output.replace(/return\s+([a-zA-Z_$][0-9a-zA-Z_$]*)/g, "return");
document.getElementById("output").value = output;
}
function shuffle(str) {
// 文字列を配列に変換する
var arr = str.split("");
// 配列をランダムにシャッフルする
for (var i = arr.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 配列を文字列に変換して返す
return arr.join("");
}
</script>
</body>
</html>