javascript 난독화 적용된 소스 해석 시 삼항 연산자의 사용이 난무한 것을 발견했다.
적어 뒀다가 나중에 보려 한다.
일단 삼항연산자는
A ? B : C 와 같은 구조를 가진 것인데,
A 는 조건절이 들어간다.
A의 결과가 TRUE인 경우 - B를 실행하고,
A의 결과가 FALSE인 경우 - C를 실행한다.
x > 3 ? y =1 : y = 2
와 같은 삼항연산자가 있다면,
var x = 2 인 경우에는 false이므로 y 값은 2가 되지만,
var x = 4 인 경우에는 true 값이므로 y 값이 1이 된다.
이중 삼항 연산자는 아래와 같은 소스 코드에서 볼 수 있다.
return
aaaaa
?
(alert(bbbbb),!0)
:
ccccc < 1
?
(alert(ddddd),!1)
:
(b="http://"+aaaaa+":"+a.port+"/"+bbbb);
이런 식으로 return 처리 하는 경우가 있는데
A ? B : C 랑 똑같은 식으로 구현 된 것이다.
A ? B : C ? D : E 는 A ? B : ( C ? D : E ) 랑 같은 것인데
삼항 연산자를 이중 처리한 것이랑 동일하다.
A가 TRUE 면
B
A가 FALSE면
C가 TRUE 면
D
C가 FALSE면
E
FALSE - FALSE 검증 후에 정상 동작 처리 되는 구조이다.
적어 뒀다가 나중에 보려 한다.
일단 삼항연산자는
A ? B : C 와 같은 구조를 가진 것인데,
A 는 조건절이 들어간다.
A의 결과가 TRUE인 경우 - B를 실행하고,
A의 결과가 FALSE인 경우 - C를 실행한다.
x > 3 ? y =1 : y = 2
와 같은 삼항연산자가 있다면,
var x = 2 인 경우에는 false이므로 y 값은 2가 되지만,
var x = 4 인 경우에는 true 값이므로 y 값이 1이 된다.
이중 삼항 연산자는 아래와 같은 소스 코드에서 볼 수 있다.
return
aaaaa
?
(alert(bbbbb),!0)
:
ccccc < 1
?
(alert(ddddd),!1)
:
(b="http://"+aaaaa+":"+a.port+"/"+bbbb);
이런 식으로 return 처리 하는 경우가 있는데
A ? B : C 랑 똑같은 식으로 구현 된 것이다.
A ? B : C ? D : E 는 A ? B : ( C ? D : E ) 랑 같은 것인데
삼항 연산자를 이중 처리한 것이랑 동일하다.
A가 TRUE 면
B
A가 FALSE면
C가 TRUE 면
D
C가 FALSE면
E
FALSE - FALSE 검증 후에 정상 동작 처리 되는 구조이다.
A ? (B ? C : D ) : E 와 같은 구조로 되어 있는 예제를 구글에서 많이 볼 수 있는데,
순서만 바꿔 두었는데도 http url 구조로 되어 있어서 혼란스러워 했던 코드였다.
댓글
댓글 쓰기