Skip to content
research

이모지 속에 숨겨진 비밀 코드

한 개발자가 우연히 많은 이모지를 유효한 x86 기계어로 만드는 Unicode의 기묘한 특성을 발견했습니다. 이로 인해 스마일리 페이스와 기호만으로 작성된 완전한 기능의 DOS 프로그램이 탄생하게 되었습니다.

Aki Tanaka
이모지 속에 숨겨진 비밀 코드

🐐에서 기계어까지

개발자 GloriousCow는 웹 기반 x86 disassembler를 만들던 중 놀라운 비밀을 우연히 발견했습니다. 그는 자신의 도구에 이모지를 붙여넣으면 URL 인코딩을 통해 16진수 바이트 시퀀스로 변환되는 흥미로운 동작을 관찰했습니다. 사소해 보이는 이 세부 사항은 곧 디지털 인코딩의 심오한 특성을 밝혀내게 됩니다.

결정적인 순간은 간단한 염소 이모지와 함께 찾아왔습니다. GloriousCow가 🐐를 붙여넣자 시스템은 URL 인코딩된 문자열 %F0%9F%90%90을 반환했습니다. 퍼센트 기호를 제거하자 원시 16진수 시퀀스 F0 9F 90 90이 눈에 들어왔는데, 이는 완벽하게 유효한 8088 어셈블리어였습니다.

염소 이모지는 순전히 우연히 특정 CPU 명령어로 디스어셈블되었습니다. F0은 독점적인 메모리 액세스를 보장하는 LOCK prefix를 나타냈습니다. 9F는 LAHF 명령어로 번역되어 AH 레지스터에 EFLAGS 레지스터의 하위 바이트를 로드했습니다. 두 개의 90 바이트는 고전적인 NOP, 즉 "작업 없음(no operation)" 명령어였습니다.

이는 단순한 우연이 아니었습니다. UTF-8에서 거의 모든 4바이트 이모지 자소는 F0 9F 바이트 접두사로 시작합니다. 기본 다국어 평면(Basic Multilingual Plane) 외부의 문자에 사용되는 Unicode 인코딩의 이러한 근본적인 측면이 의도치 않게 이모지가 실행 가능한 기계어로 기능할 수 있는 토대를 마련한 것입니다.

Unicode의 우연

놀라운 우연은 Unicode 인코딩에서 시작됩니다. 🐐와 같은 대부분의 이모지는 Basic Multilingual Plane 외부에 위치하며 4바이트 UTF-8 시퀀스를 필요로 합니다. 결정적으로, UTF-8의 거의 모든 이모지 자소는 보충 문자를 위한 표준 설계 선택인 F0 9F 바이트 접두사로 시작합니다.

8088 프로세서는 F0 바이트를 명령어 수정자인 LOCK 접두사로 해석합니다. 이러한 구형 x86 아키텍처에서 이 접두사는 종종 무해하게 무시되거나 많은 명령어에 대해 NOP처럼 작동합니다. 이를 통해 후속 9F 바이트가 LAHF 명령어로 실행될 수 있으며, 나머지 이모지 바이트들은 계속해서 유효한 오피코드나 피연산자를 형성하게 됩니다.

GloriousCow는 일부 이모지 시퀀스가 오피코드는 있지만 필요한 데이터가 부족한 불완전한 명령어를 생성한다는 사실을 발견했습니다. 이러한 "open tail" 메커니즘을 통해 다음 이모지의 바이트가 MOV 명령어의 즉시 값과 같이 누락된 피연산자를 제공할 수 있게 됩니다. 개발자들은 이모지를 연결함으로써 복잡하고 기능적인 어셈블리 명령어를 구성하여 겉보기에는 무해한 기호를 실행 가능한 코드로 바꿉니다.

'Emojissembly' 툴체인 구축

GloriousCow는 발견에서 시연으로 빠르게 넘어갔습니다. 그는 약 30개의 엄선된 이모지로 조립된 완전한 기능의 "Hello" 프로그램을 만들었습니다. .com 확장자를 가진 원시 UTF-8 파일로 저장된 이 독특한 실행 파일은 DOS 환경에서 완벽하게 실행되어 화면에 인사말을 출력했습니다. 이 초기 성공은 기계어로서 이모지가 가진 기묘한 잠재력을 입증했습니다.

그러나 복잡한 프로그램을 구축하는 것은 임의의 데이터를 인코딩하는 방법이라는 중요한 기술적 난관에 부딪혔습니다. 일부 이모지는 유용한 x86 명령어에 우연히 매핑되었지만, 대다수의 바이트 값은 깔끔하고 직접적인 이모지 대응물이 부족했습니다. 이는 텍스트 문자열이나 숫자 상수와 같은 데이터를 직접 표현하는 것이 엄청난 도전이 되었음을 의미합니다.

GloriousCow는 x86 AAD instruction(나눗셈 전 ASCII 조정)을 활용한 기발한 해결책을 고안했습니다. 일반적으로 BCD 연산에 사용되는 이 명령어는 내부 계산을 위한 사용자 지정 진법을 지정할 수 있습니다. 그는 AAD를 사용하여 256개의 특별히 선택된 이모지 세트의 마지막 바이트에서 원하는 모든 바이트 값을 재구성할 수 있는 작고 독립적인 디코더를 구축했습니다. 이 획기적인 성과를 통해 완전한 데이터 지원을 갖춘 프로그램을 구성할 수 있게 되었습니다.

이 글이 마음에 드셨나요? 매일 아침 이런 글을 메일로 받아보세요.

하루 한 통 · 두 번의 클릭으로 구독 취소 · 제3자 추적 없음

비실용적인 엔지니어링이 중요한 이유

Better Stack의 "So Emojis Are Apparently Executable Now"에서 자세히 다룬 GloriousCow의 우연한 발견은 놀랍도록 불필요한 엔지니어링의 대표적인 사례입니다. 이 프로젝트는 추상적인 바이트 시퀀스를 기발한 실행 가능한 기호로 변환하며, 심오한 시스템 지식을 기념합니다. 이는 유니코드 인코딩과 x86 명령어 세트에 대한 깊은 이해가 기존 아키텍처 내에서 어떻게 놀랍고 거의 시적인 기능을 드러낼 수 있는지, 즉 익숙한 것을 환상적인 것으로 바꿀 수 있는지를 보여주는 독창적인 사례입니다.

이 발견에 대한 커뮤니티의 반응은 즉각적이고 열광적이었으며, 곧 'emojissembly'라는 용어가 만들어졌습니다. 이는 레트로 컴퓨팅 및 로우 레벨 개발 서클 전반에 걸쳐 활발한 토론을 촉발했으며, 우리가 기계어와 상호 작용하는 방식에 대한 가정에 도전했습니다. 개발자들은 UTF-8의 F0 9F 접두사의 의미를 논의하고, 이모지 인코딩과 x86 오피코드의 우연한 일치에 경탄하며 수십 년 된 표준의 잠재적인 유연성을 보여주었습니다.

중요한 것은 이러한 프로젝트가 필수적이라는 점입니다. 이러한 프로젝트는 실용적인 응용 분야에만 집중하는 대신 기존 기술로 무엇이 가능한지에 대한 경계를 넓히며 장난스러운 탐구를 장려합니다. GloriousCow의 작업은 30개의 이모지로 구성된 Hello 프로그램을 실행하는 DOS 환경과 같은 수십 년 된 시스템조차도 호기심 많은 마음이 발견하기를 기다리는 즐겁고 예상치 못한 비밀을 간직하고 있음을 보여줍니다. 이러한 장난스러운 독창성은 혁신이 종종 가장 예상치 못하고 겉보기에는 비실용적인 노력에서 꽃피운다는 것을 증명하며 미래 세대에게 영감을 줍니다.

자주 묻는 질문

모든 이모지를 실행 가능한 코드로 사용할 수 있나요?

아니요, 전부는 아닙니다. 이 현상은 주로 4바이트 UTF-8 이모지에 적용되며, 그중 다수는 8088 프로세서가 유효한 명령어로 해석할 수 있는 특정 바이트 접두사(F0 9F)로 시작합니다.

이모지가 실행 가능할 수 있다는 것을 누가 발견했나요?

GloriousCow(Daniel Balsom)라는 개발자가 웹 기반 x86 디스어셈블러를 만들던 중 염소 이모지가 URL 인코딩되는 방식을 보고 우연히 발견했습니다.

이것이 소프트웨어를 작성하는 실용적인 방법인가요?

전혀 아닙니다. 이는 로우 레벨 시스템에 대한 깊은 이해를 보여주는 매우 비실용적이지만 훌륭한 개념 증명입니다. 이것은 새로운 프로그래밍 패러다임이 아니라 창의적인 엔지니어링의 위업입니다.

'emojissembly'란 무엇인가요?

'emojissembly'는 이모지 문자만을 소스 코드로 사용하여 실행 가능한 어셈블리어 프로그램을 작성하는 기술에 붙여진 비공식적인 이름입니다.

텍스트 문자열과 같은 임의의 데이터는 어떻게 처리하나요?

제작자는 x86 AAD 명령어를 사용하여 작은 디코더를 만들었습니다. 이를 통해 프로그램은 특별히 선택된 256개 이모지의 고유한 꼬리 바이트에서 모든 바이트 값을 재구성할 수 있습니다.

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only