본문 바로가기

분류 전체보기153

[webhacking.kr] challenge(old). old-12 해당 문제에 들어가면 javascript challenge라는 문구만 확인할 수 있다. js에 관련된 문제인 것 같으니 소스코드를 확인해보자 코드를 확인해보면 스크립트 코드가 난독화 되어있는 것을 확인할 수 있다. 난독화를 해제하기 위해 크롬 개발자 도구의 콘솔에 입력하면 해제된 코드를 얻을 수 있다. 이때 난독화 코드의 맨 마지막 부분에 ('_')라는 난독화 해제를 방해하는 의미 없는 문자열을 지운 뒤 콘솔에 입력해야 한다. 난독화를 해제한 코드는 위와 같다. 코드를 확인해 보자 var enco=''; var enco2=126; var enco3=33; var ck=document.URL.substr(document.URL.indexOf('=')); 총 4가지의 변수를 선언한다. 그중 ck변수 에는 d.. 2020. 4. 4.
[C++] 소수 찾기(연습문제) 문제는 간단하다 1부터 입력받은 숫자 n까지 중 소수가 몇 개 있는지 반환하면 된다. n이 10이라면 1부터 10에는 2, 3, 5, 7 총 4개의 소수가 존재하므로 4를 반환하고 5라면 2, 3, 5 총 3개의 소수가 존재하므로 3을 반환한다. 설계 및 구현 구현을 위해 주어진 함수는 반환 타입으로 int를 가지고 매개변수 int타입의 n을 가지는 함수이다. 구현의 내용은 파이썬과 마찬가지로 에라토스테네스의 체를 사용하면 된다. 구현 내용은 파이썬과 같으므로 정리하면 ① n까지의 모든 숫자 나열 ② 2의 배수, 3의 배수 ... 남은 소수들의 배수 모두 지우기 ①을 수행하기 위해 소수판별을 위한 숫자를 벡터에 넣는 것이 아닌 인덱스로 사용한다. 벡터에 n+1의 개수만큼 True로 만든다. 1부터가 아닌.. 2020. 4. 3.
[python] 소수 찾기(연습문제) 문제는 간단하다 1부터 입력받은 숫자 n까지 중 소수가 몇 개 있는지 반환하면 된다. n이 10이라면 1부터 10에는 2, 3, 5, 7 총 4개의 소수가 존재하므로 4를 반환하고 5라면 2, 3, 5 총 3개의 소수가 존재하므로 3을 반환한다. 설계 및 구현 주어진 함수는 n을 입력받아 개수를 반환하면 되는 함수이다. 소수의 개수를 구하는 알고리즘은 에라토스테네스의 체를 사용하면 된다. 내용은 2부터 소수를 구하고자 하는 구간의 모든 수를 나열하고 2는 소수이므로 2를 제외한 2의 배수들을 모두 지운다. 그다음 남은 수중 3은 소수이므로 제외하고 3의 배수를 모두 지운다. 이처럼 소수들의 배수들을 모두 지우는 과정을 반복하면 결국 소수만 남게 된다. 정리하면 ① n까지의 모든 숫자 나열 ② 2의 배수,.. 2020. 4. 3.
[webhacking.kr] challenge(old). old-11 11번 문제의 시작화면이다. 특별한 점은 없으므로 바로 페이지의 소스를 확인해보면 간단한 php 소스를 확인할 수 있다. $pat="/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/"; if(preg_match($pat,$_GET['val'])){ solve(11); } pat 이라는 변수에 정규표현식이 문자열로 들어간다. pat에 들어가는 정규표현식은 [1-3] : 1~3중 하나의 숫자 [a-f]{5} : a~f중 5개의 알파벳 _ : '_' 문자 .* : 임의의 문자 0개 이상 $_SERVER[REMOTE_ADDR] : 접속자의 ip \t : tap을 의미, 따라서 tapptapatapstaps가 된다. url에서 \t 는 %09를 의미한다. 조건문에서 .. 2020. 4. 2.
[webhacking.kr] challenge(old). old-10 10번 문제에 처음 들어가게 되면 위와 같은 화면을 볼 수 있다. 회색 부분에 O라는 모양에 마우스 포인터를 올리면 yOu로 변경된다. 글자를 클릭하면 O라는 글자가 점점 오른쪽으로 이동되는 것을 확인할 수 있다. 아마도 맨 오른쪽의 goal이라는 부분까지 도착해야하는것 같다. 이외에 특별한 점은 없으므로 소스코드를 확인해보자. O hackme라는 id가 존재하고 클릭할 때 onclick 메서드를 통해 클릭시 1픽셀씩 이동하는 것을 확인할 수 있다. 또한 조건문에서 this.style.left의 값이 1600이 되면 Goal이 위치한곳과 같아지며 url에 '?go='+this.style.left이 추가되며 문제가 해결되는 것 같다. 직접 1600번의 클릭을 해도 가능하겠지만 너무 불필요한 행동이므로 다른.. 2020. 4. 1.
[C++] 수박수박수박수박수박수? (연습문제) 문제의 목표는 간단하다. "수박수박수박..."의 패턴의 문자열을 길이 n에 맞추어 반환하면 된다. 만약 n=3이라면 길이가 3이 되도록 "수박수"를 반환하고 n=5라면 "수박수박수"로 반환하면 된다. 설계 및 구현 구현을 위해 주어진 함수는 반환타입이 string이고 매개변수로 int형 변수 n을 가지는 함수이다. 구현 내용은 파이썬에서 고안하였으므로 바로 코드를 작성하면 C++ 에서는 파이썬처럼 문자열 슬라이싱을 제공하지 않기 때문에 횟수만큼 "수박" 문자열을 이어붙인뒤 전달받은 길이의 짝, 홀을 판단 홀수일 경우 "수"를 붙여반환하고 짝수라면 그대로 반환하도록 하여 문제의 목표를 만족시켰다. 위의 코드를 통해 채점을 통과할 수 있었다. ※ 새롭게 배운것 다른 사람의 풀이를 통해 짝수 홀수를 비트연산자.. 2020. 3. 30.