
자바스크립트 포맷터(formatter)나 난독화 해제 도구(deobfuscator)로 코드를 보기 좋게 바꾸는 과정에서, 실행 결과가 원래와 다른 프로그램으로 바뀔 수 있다는 분석이 나왔다. 글은 이런 현상을 ‘다이버전스(divergence)’라고 부르며 Chromium·Firefox 개발자 도구를 포함한 37개 이상의 처리 도구에서 186가지 기법을 찾았다고 설명한다.
다이버전스는 프로그램 실행을 막는 대신, 변환된 코드가 오류 없이 작동하면서 다른 로직을 수행하도록 만드는 기법이다. 글은 사람이든 LLM 에이전트든 난독화된 코드를 분석할 때 포맷터나 역난독화 도구를 사용하는 경우가 많아, 변환된 코드를 원본과 같은 프로그램으로 오인할 수 있다고 지적한다. 클라이언트 코드의 동작을 바탕으로 서버가 값을 확인하는 안티봇·안티치트 시스템에서는, 잘못 분석한 코드를 다시 구현한 결과가 실제 스크립트와 다른 값을 보내 감지 단서가 될 수 있다고 설명한다.
소개된 사례는 변환 도구에 따라 달라진다. Chromium DevTools는 + +m을 ++m으로 붙여 써 변수를 증가시킬 수 있고, WebCrack은 왼쪽 표현식에 부작용(side effect)이 있는 경우에도 논리식을 바꿔 함수 호출 횟수를 달리할 수 있다. Restringer와 WebCrack은 코드에서 전역 함수가 재정의된 사실을 놓쳐 호출을 미리 계산할 수 있으며, Terser는 실행 중 예외를 일으키는 표현식을 부작용이 없다고 판단해 제거할 수 있다고 글은 설명한다.
데모에서는 원래 테트리스를 실행하는 스크립트를 처리 도구에 통과시키면 스네이크의 바이트코드(bytecode)를 만들고 테트리스를 지우도록 구성했다. 테트리스·스네이크 데모와 플레이그라운드에서 사례를 확인할 수 있다.
글은 기법마다 영향을 받는 도구와 변환 방식이 다르며, 특정 도구에 취약점이 있다고 해서 매번 작동하는 것은 아니라고 한정한다. 처리 도구의 모드와 설정에 따라 결과가 달라질 수 있고, Safari 개발자 도구는 조사하지 않았다. CSS에서도 같은 개념이 작동한다고 덧붙였다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요