Hacker Factory 7번문제
2020. 1. 25. 15:59ㆍ0x0B Web Hacking
728x90
원본 코드
var PasswordEncrypt = {
_keyStr : "DUYZabcVWdQefGghijklmAnEFopqrHstKLuvXwRSxyz0IO12M34JN5B6789+PT/=C",
encode : function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
// input은 3의배수가 될 것임
// input이 만약 abc라면
// chr1 : 0x61
// 2 : 0x62
// 3 : 0x63
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
// enc 값 : iRAJHaTRiRAJHaLLFBOwrXoLF6j2rSXC (chr 3개로 만들어짐)
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
// chr2가 숫자가 아니면 즉 숫자 제외 한 문자면
if (isNaN(chr2)) {
enc3 = enc4 = 64;
}
// chr3이 숫자가 아니면
else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
}
}
function UserPasswordEncryptFunc(PlainText) {
EncText = PasswordEncrypt.encode(PlainText);
return EncText;
}
Python 변환
#-*-coding:utf-8-*-
from itertools import product
import time
chr1=0
chr2=0
chr3=0
chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
def EncKey(round):
#key = "iRAJHaTRiRAJHaLLFBOwrXoLF6j2rSXC"
'''
iRAJ
HaTR
iRAJ
HaLL
FBOw
rXoL
F6j2
rSXC
'''
key = ['iRAJ','HaTR','iRAJ','HaLL','FBOw','rXoL','F6j2','rSXC']
#print key[round]
return key[int(round)]
class PasswordEncrypt:
def __init__(self):
encKey = ""
result = 0
def encode(self,EncKey):
global chr1, chr2, chr3
_keyStr = "DUYZabcVWdQefGghijklmAnEFopqrHstKLuvXwRSxyz0IO12M34JN5B6789+PT/=C"
output = ""
while(True):
# 범위 알파벳
# initialize
PlainText = ""
for length in range(2,5):
to_attempt = product(chars, repeat=length)
for attempt in to_attempt:
#print attempt
#time.sleep(2)
PlainText = ''.join(attempt)
# 다 만들고
i = 0
if i % 3 == 0:
chr1 = int(PlainText[i].encode("hex"),16)
i += 1
if i == len(PlainText):
break
else:
chr2 = int(PlainText[i].encode("hex"),16)
i += 1
if i == len(PlainText):
break
else:
chr3 = int(PlainText[i].encode("hex"),16)
i += 1
output = ""
enc1 = chr1 >> 2
enc2 = ( (chr1 & 3) << 4) | (chr2 >> 4)
enc3 = ( (chr2 & 15) << 2 ) | chr3 >> 6
enc4 = chr3 & 63
# chr2이 비어있는지 확인
# JavaScript에서 isNaN은 데이터가 없는지를 체크하는 함수
if chr2 is None:
enc3 = enc4 = 64
if chr3 is None:
enc4 = 64
output += _keyStr[enc1]
output += _keyStr[enc2]
output += _keyStr[enc3]
output += _keyStr[enc4]
#print output
#time.sleep(2)
#time.sleep(3)
if output == EncKey:
print "PlainText => "
print PlainText
return PlainText
break
else:
#print PlainText + " => " + output
#time.sleep(1)
#print "[+] Wrong : ",
#print output
continue
if __name__ == '__main__':
result = []
print "[+] Hacker Factory 07"
#print "[+] You Can Get Key ",
#print EncKey() # compare Data
e = PasswordEncrypt()
# 3개 이상 넣어야 함
# EncKey길이 : 32
# 3개 문자열로 암호화 문자 4개 형성 가능
# (32 / 3) + (32 % 3)
#for i in range(0,8):
#result.append(e.encode(EncKey(i)))
result.append(e.encode(EncKey(0)))
result.append(e.encode(EncKey(1)))
result.append(e.encode(EncKey(2)))
result.append(e.encode(EncKey(3)))
result.append(e.encode(EncKey(4)))
result.append(e.encode(EncKey(5)))
result.append(e.encode(EncKey(6)))
result.append(e.encode(EncKey(7)))
print result
'0x0B Web Hacking' 카테고리의 다른 글
Hackerone CMS V2 Flag02 (0) | 2020.06.29 |
---|---|
HackerFactory 10번문제 (0) | 2020.01.25 |
Hacker Factory 4번문제 (0) | 2020.01.25 |
Hacker Factory 3번 문제 (0) | 2020.01.25 |
HackerFactory 2번 문제 (0) | 2020.01.25 |