
입력하는 칸이 있다 숫자, 문자 다 넣어봤다 (아무런 반응이 없다.)
소스코드를 보았다.

여기 누가 봐도 수상한 소스코드가 하나 있다. 먼가 다소 복잡해 보였다.
GPT 쳇으로 이 코드가 먼지 물어보았다 답변글은 자바스크립트로 난독화된 코드라고 한다 그리고 소스코드 아래 Hint가 있었다.

이 힌트에 있는 값으로 저 난독화된 스크립트를 깨라는 것인가???
당혹스럽지만 우리는 AI기능이 있다 GPT한테 저 난독화를 깰 수 있는 자바스크립트 코드를 만들어 달라고 했다
소스는 아래와 같다.
function q(n) {
var l = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
var h = '';
var j = true;
for (var i = 32; i > 0;) {
i -= 4;
var k = (n >> i) & 0xf;
if (!j || k != 0) {
j = false;
h += l[k];
}
}
return h == '' ? '0' : h;
}
console.log(q());
위의 소스코드를 분석하면 앞에 var l = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']; 값은 16 진수의 각 자리를 문자로 배열에
담은 것이다.
Ex) 1[10] → "a"
<반복문>
for (var i = 32; i > 0;) {
i -= 4;
var k = (n >> i) & 0xf;
}
i를 32 부터 시작해서 -4씩 감소시킵니다.
0~32비트를 4비트 단위로 순차적으로 자릅니다.
(n >> i): n을 오른쪽으로 i비트 시프트.
& 0xf: 하위 4비트만 추출한다
<조건식>
if (!j || k != 0) {
j = false;
h += l[k];
}
j는 처음에 true
처음 만나는 0들은 무시하고 0이 아닌 첫자리에서부터 h를 추가
return h == '' ? '0' : h;
모든 비트가 0이라면 '0' 반환 아니면 h(16진수 문자열) 반환한다
위와 같은 소스코드를 개발자도구 Console에 넣고 Hint에 있는 값을 넣어주면?

아래와 같은 값이 나오고 이 값을 입력칸에 넣어주면

flag값을 얻을 수 있었다.

'CTF > 써니나타스' 카테고리의 다른 글
| 써니나타스[Web-7 문제풀이] (0) | 2025.11.17 |
|---|---|
| 써니나타스 [Web-6 문제풀이] (0) | 2025.11.14 |
| 써니나타스 [Web-4 문제풀이/Burp Suite] (0) | 2025.11.11 |
| 써니나타스 [Web-4 문제풀이] (0) | 2025.11.11 |
| 써니나타스 [Web-3 문제풀이] (0) | 2025.11.10 |
