목록전체 글 (105)
또 뭐하지
PEM Public Key Infrastructure Enhanced Mail X.509 디지털 인증서와 키를 저장하고 전송하기 위한 표준 형식 텍스트 형식으로 인코딩되어 있으며, 보통 .pem 확장자를 가짐 일반적으로는 인증서, 개인 키, 공개 키 등의 암호학적 자격 증명 요소를 포함 RSA 비대칭 키 암호화 방식 (공개 키 - 데이터 암호화 / 개인 키 - 데이터 복호화)소인수분해의 어려움에 기반 Key Generation 1. 큰 소수 2개 p와 q를 선택2. n 계산 : n = p*q3. 오일러 파이 함수 계산 : ϕ(n) = (p-1) * (q-1) 4. ϕ(n)과 서로소인 정수 e 선택 5. e의 역원을 계산하여 d를 구함 : e * d ≡ 1 (mod ϕ(n)) → 공개키 (n,e) / 개인..
풀이 제공된 파일에는 chall1.c 파일과 chall1 바이너리 파일이 있다. chall1.c의 코드를 보면 적절한 비밀번호를 입력을 하면 복호화가 되는 것을 알 수 있다. 위 코드를 보면 입력된 비밀번호와 KEY를 XOR한 값을 JOKER와 대조하여 일치하면 올바른 비밀번호로 인식되는 것을 알 수 있다. 따라서 JOKER와 KEY를 XOR 연산하여 원하는 비밀번호 값을 얻을 수 있다는 것을 알 수 있다. (∵ a = b^c 이면 a^b = c) jocker = "\x40\x53\x06\x03\x43\x52\x54\x3b" key = "023661dd4" tmp = "" for i in range(8): tmp += chr(ord(key[i])^ord(jocker[i])) print(tmp) 위와 같은..
풀이 제공된 파일에는 DyingMessage 파일이 들어있다. filepath = "D:/dreamhack/SingleByteXor/DyingMessage" with open(filepath, 'r') as f: Msg = f.read() def XOR(msg, i): l = len(msg) p = "" for j in range(0,l-2,2): tmp = int('0x'+msg[j:j+2],16)^i p = p+chr(tmp) return p for i in range(0,256): print("i = ", i, " ", XOR(Msg, i)) 단일 바이트와 XOR 했다는 힌트가 문제에 제공되어있다. 이를 바탕으로 다잉메시지를 바이트 단위로 떼어서 브루트포스 공격을 시행하는 코드를 작성하였다. 실행결..
풀이 문제에 제공된 Roman emperor's cipher는 시저암호를 의미한다. 제공된 파일에는 암호문이 들어있다. file_path = "D:/dreamhack/Basic_Crypto1/encode.txt" with open(file_path, 'r') as f: cipher_s = f.read() L = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" def c_dec(C,K): p = "" for i in C: if i == ' ': p += '_' continue idx = L.find(i) idx = (idx-K)%26 p = p+(L[idx]) return p for i in range(0,26): tmp = c_dec(cipher_s,i) print("Key=",i," ",tmp) 시..
풀이 제공된 파일에는 암호화된 encfile과 암호화 코드인 rot128.py 파일이 포함되어있다. rot128 코드를 살펴보면 시저암호와 유사한 원리로 각 바이트를 16진수 값으로 표현하고, 해당 값을 128만큼 밀어서 새로운 값을 만들어내는 것을 알 수 있다. hex_list : 0부터 255까지의 각 숫자에 대한 16진수 표현을 담은 리스트 plain_list : plain_s에서 읽은 파일 내용을 각 바이트별로 16진수로 변환하여 저장 암호화 방식 : plain_list의16진수 값의 인덱스를 hex_list에서 찾아내고, 이를 +128만큼 이동 hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)] file_path = "D:/dreamh..
풀이 주어진 문제 파일 중 about.html에 들어갔다. 해당 페이지에서 개발자 도구를 실행해 전체 파일 검색 (ctrl+shift+f)를 통해서 flag를 검색해봤다. 원하는 flag 형식의 결과가 나오지 않았다. 다음에는 flag 형식인 DH를 검색해봤더니 원하는 flag 값을 얻을 수 있었다.
풀이 문제파일에 주어진 html 파일 살펴봤다. 클릭해야하는 호박을 볼 수 있다. js 코드를 살펴보니 counter를 100으로 나눈 나머지가 0이 될 때마다 어떤 연산이 일어나는 걸 알 수 있다. 다양한 방법이 있지만 for문을 통해 click을 만번하는 코드를 작성하기로 했다. console에 $('#jack-target').click()를 입력해보면 click이 한 번 된 것을 확인할 수 있다. 이를 for문을 통해 10000번 수행하게 하면 flag를 얻을 수 있다. for (var i=0; i
Sever-Client 웹 서버에 있는 리소스를 클라이언트가 받아 보려면, 클라이언트는 웹에게 특정 리소스를 지정하여 제공해달라고 요청해야 함. 이때, 서버는 해당 요청을 이해하고 대응되는 동작을 통해 클라이언트에게 리소스 반환함. Cookie 클라이언트의 정보 기록과 상태 정보를 표현하는 용도로 사용 정보 기록 : 웹 서버는 각 클라이언트의 팝업 옵션을 기억하기 위해 사용 상태 정보 : 웹 서버는 클라이언트를 식별할 수 있는 값을 저장하여 사용 HTTP 하나의 Request와 Response의 쌍이 독립적으로 구성되어 통신 connectionless 속성 : 하나의 요청에 하나의 응답을 한 후 네트워크 연결을 끝맺는 것 stateless 속성 : 네트워크가 연결이 끝맺을 때 상태를 유지하지 않는 것 위..