1. 문제
복호화 코드를 지웠다고 하네요…
복호화 코드를 완성하면 될것 같습니다.
2. 코드 분석
이러한 조건이 존재하고
p 값을 알아내야 합니다.
전체적인 코드의 흐름을 살펴보면 n, key1, key2 값을 함수를 호출해서 얻고 그것으로 암호화 합니다.
평문을 입력하면 문자 한개 한개를 모두 ASCII 값으로 반환합니다.
n, key1, key2는 key 2 ≥ key1 일 때 까지 0~100 까지의 난수를 얻는다.
하지만 현재 key2는 95 이므로
key1은 95보다 작거나 같습니다.
ASCII 값으로 반환된 p를 int형으로 변환하고 n, key1, key2 와 함께 enc 함수에 전달
q 값을 구하는 수식을 표현해보면;;;
따라서 p는 밑의 사진과 같은 식이 나옵니다.
3. exploit 코드 작성
Key1 의 값의 범위가 정해졌으므로 1~95까지의 모든 경우의 수를 출력하면 DH 값을 얻을 수 있다.
또한, p의 연산결과는 정수이므로 정수값이 결과로 나온것을 출력하면 된다.
key1 값을 for문으로 모두 연산했을 때
정수인 결과만 찾으면 되므로 p.denominaotr == 1 이면 print(p) 를 하면 된다.
( 분모가 1이므로 실질적인 정수이다. )
'Wargame > wargame 암호학' 카테고리의 다른 글
[Dreamhack] likeb64 (0) | 2024.05.11 |
---|---|
[Dreamhack] DARIMCHAL_001 (0) | 2024.04.30 |
[Dreamhack] robot_only (0) | 2024.04.30 |
[Dreamhack] basic crypto (0) | 2024.04.29 |
[Dreamhack] ROT128 (0) | 2024.04.29 |