function checkPass(password) {
var total = 0;
var charlist = "abcdefghijklmnopqrstuvwxyz";
for (var i = 0; i < password.length; i++) {
var countone = password.charAt(i);
var counttwo = (charlist.indexOf(countone));
counttwo++;
total *= 17;
total += counttwo;
}
if (total == 248410397744610) {
setTimeout("location.replace('index.php?password=" + password + "' ) ; ", 0)
} else {
alert("Sorry, but the password was incorrect.");
}
}
내가 입력한 패스워드 길이만큼 돌아가면서 countone에는 내가 입력한 password의 i번째 인덱스값의
문자를 넣고, ("abcde".charAt(1)는 b를 반환.) counttwo에는 charlist에서 countone문자의 인덱스를
찾아서 넣는다. counttwo를 1 증가시키고 total*=17후 total+=counttwo를 한다. 내가 입력한
패스워드 길이만큼 반복해서 결과가 total==248410397744610이 나오면 통과.
거꾸로 돌아가면서 하기로 했다.
일단 마지막 total에서 그전 total값은 total-=counttwo; total/17로 구할수 있을것이다.
그런데 total이 소숫점이 있는 실수가 아니므로 total-=counttwo;후 total/17한 값은 실수가 아니어야
한다. 이런 방식으로 counttwo값과 다음 total값을 구할 수 있다. counttwo의 범위는 0~16사이이며
일단 첫번째 값만 구해보면 counttwo에 4를 넣어봤을때 제대로 나오는걸 확인할수 있다.
248410397744610-4 = 248410397744606.
248410397744606/17 = 14612376337918
그런데 위의 식에서 total *= 17이전에 counttwo++;가 있으므로 counttwo값은 4가 아니라 3이 된다.
일단 여기에서 더 위로 올라가면
var countone = password.charAt(i);
var counttwo = (charlist.indexOf(countone));
가 있는데, 3 = charlist.indexOf(countone);이므로 charlist에서 찾아보면 인덱스 3은 d이다.
(인덱스는 0부터 시작) 그러면 countone='d'라는 소리이다... 또 대입해보면 'd'=password.charAt(i);
인데 i는 내 패스워드 길이의 맨 마지막일때이므로 내 패스워드의 마지막은 d라는게 된다.
이런식으로 코드를 짜면 되는데 일단 counttwo값들을 구하고 그 인덱스에 따른 password를
출력한 후 맨 마지막으로 뒤집었다.
"""function checkPass(password) { var total = 0; var charlist = "abcdefghijklmnopqrstuvwxyz"; for (var i = 0; i < password.length; i++) { var countone = password.charAt(i); var counttwo = (charlist.indexOf(countone)); counttwo++; total *= 17; total += counttwo; } if (total == 248410397744610) { setTimeout("location.replace('index.php?password=" + password + "' ) ; ", 0) } else { alert("Sorry, but the password was incorrect."); } }""" import sys charlist = "abcdefghijklmnopqrstuvwxyz"; total = 248410397744610 #최종적으로 나온 total값 counttwo = [] #counttwo를 넣을 리스트 while 1: for j in range(0,17): #counttwo범위인 0~16사이로 반복문을 돌리면서 if (total-j)%17==0: #(total-counttwo)%17==0이면. total = (total-j)/17 #그다음 total값. counttwo.append(j-1) #counttwo리스트에 counttwo값을 집어넣는다. 근데 위에서 말했듯 count++를 고려해 -1한 값을 리스트에 집어넣는다. print "total =",total if total==0: #0이 되면 끝낸다. break print counttwo #counttwo리스트를 출력 answer = '' for i in counttwo: answer += charlist[i] #해당 인덱스(counttwo)의 charlist의 값의 위치의 문자를 집어넣는다. 근데 이건 거꾸로임. print answer print answer[::-1] #제대로 password를 출력하려면 거꾸로.
'webhacking > client' 카테고리의 다른 글
Net-Force javascript 1~5 (0) | 2014.12.03 |
---|---|
Enigma Group basic/javascript 12 (0) | 2014.11.01 |
Enigma Group basic/javascript 10 (0) | 2014.11.01 |
Enigma Group basic/javascript 9 (0) | 2014.11.01 |
Enigma Group basic/javascript 1~8 (0) | 2014.11.01 |