webhacking/client

Enigma Group basic/javascript 11

qkqhxla1 2014. 11. 1. 16:07

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