Hacker Factory 7번문제

2020. 1. 25. 15:590x0B 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