我的一位客户要求我修改其董事会成员用来访问其材料的登录页面。这里的问题是,以前负责这个的人没有留下任何文档,并且密码是用一些(看似简单的)算法加密的。
我可以访问哈希,并且我知道密码是什么。javascript 使用哈希作为他们的密码。我的想法是,如果我能弄清楚算法是什么,我就可以创建新帐户以满足他们的要求。
有没有办法可以检查算法是什么?
系统会提示用户从下拉菜单中选择他们的姓名,并且他们的密码与 HTML 代码中他们姓名旁边的哈希相关联。表单选项如下所示(注意 N 表示数值,L 表示字母)。
<option value='Username|NNNNN|LLLLLLLL'>Username
解析值的实际脚本如下所示
<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
var params = new Array(4);
var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI";
function check(form) {
which = form.memlist.selectedIndex;
choice = form.memlist.options[which].value + "|";
if (choice == "x|") {
alert("Please Select Your Name From The List");
return;
}
p = 0;
for (i = 0; i < 3; i++) {
a = choice.indexOf("|", p);
params[i] = choice.substring(a, p);
p = a + 1;
}
h1 = makehash(form.pass.value, 3);
h2 = makehash(form.pass.value, 10) + " ";
if (h1 != params[1]) {
alert("Incorrect Password!");
return;
};
var page = "";
for (var i = 0; i < 8; i++) {
letter = params[2].substring(i, i + 1)
ul = letter.toUpperCase();
a = alpha.indexOf(ul, 0);
a -= (h2.substring(i, i + 1) * 1);
if (a < 0) a += 26;
page += alpha.substring(a, a + 1);
};
top.location = page.toLowerCase() + ".html";
}
function makehash(pw, mult) {
pass = pw.toUpperCase();
hash = 0;
for (i = 0; i < 8; i++) {
letter = pass.substring(i, i + 1);
c = alpha.indexOf(letter, 0) + 1;
hash = hash * mult + c;
}
return (hash);
}
// End -->
</script>
无论如何我可以对此进行逆向工程以便我可以创建新的用户帐户吗?