go_bunzee

REA(리버스엔지니어링애니씽)에 대해 알아보자 #2 실제 작동해? | 매거진에 참여하세요

questTypeString.01quest1SubTypeString.00
publish_date : 26.11.04

REA(리버스엔지니어링애니씽)에 대해 알아보자 #2 실제 작동해?

#REA #역기획 #리버스엔지니어링 #AI #실제 #현실 #사례 #한계 #리뷰

content_guide

1편은 REA(리버스엔지니어링애니씽)과 관련한 내용소개를 드렸습니다.

https://letspl.me/quest/2430/shortcut

그럼 진짜 궁금해하실 실제로 프로그램을 분석하고, 그 결과를 이용해 작동하는 소프트웨어를 만들 수 있는가?

단순히 AI가 분석 결과를 그럴듯하게 설명하는 것과 실제 프로그램의 동작을 재현하는 것은 완전히 다른 문제입니다.

현재 REA 공식 쇼케이스와 공개된 재구성 프로젝트에서 확인할 수 있는 사례는 상당히 흥미롭습니다.

사례 1. 1996년 게임 DX-Ball의 기능을 복원하다

REA 공식 DX-Ball 복원 사례

DX-Ball은 1996년에 출시된 Windows 게임입니다.

이 프로젝트에서는 게임의 실행 파일을 분석하여 특정 기능을 C 언어로 재구성하는 작업을 진행하고 있습니다.

대표적인 사례가 게임에서 공이 벽돌을 맞힐 때 발생하는 사운드의 좌우 위치 계산입니다.

기존 게임에서는 공의 위치에 따라 사운드가 왼쪽 또는 오른쪽 스피커에서 들리도록 처리합니다.

REA를 이용해 해당 계산을 수행하는 함수를 분석하고, 그 결과를 바탕으로 C 코드로 재작성했습니다.

이 과정에서 중요한 것은 단순히 코드를 만들어냈다는 사실이 아닙니다.

재구성한 코드를 원본 실행 파일과 비교하여 실제로 같은 결과를 반환하는지 확인했다는 것입니다.

공개된 테스트에서는 다음과 같은 검증이 진행됐습니다.

  • - 원본 x86 함수와 재구성한 C 함수의 결과를 3,205개 입력 사례에서 비교

  • - 특정 함수의 컴파일 결과 63바이트를 원본과 비교

  • - 원본 프로그램과 재구성한 프로그램의 동작 차이를 테스트

이 사례는 REA가 단순히 AI에게 프로그램을 설명하도록 만드는 도구를 넘어, 실제 실행 파일의 동작을 분석하고

검증 가능한 코드로 재구성하는 데 활용될 수 있다는 것을 보여줍니다.

다만 여기서 중요한 한계도 있습니다.

DX-Ball 전체 게임이 완전히 복원된 것은 아닙니다.

공개된 프로젝트는 55개의 C 함수와 여러 게임 요소를 복원하고 있으며,

공과 패들의 물리 동작, 파워업, Windows 통합 등 플레이 가능한 게임을 완성하기 위한 작업은 여전히 진행 중입니다.

즉, 특정 기능을 정확하게 복원하는 것과 전체 프로그램을 완성하는 것은 별개의 문제입니다.

사례 2. Notion의 복사 기능은 어떻게 작동할까?

REA 공식 Notion 분석 사례

이번에는 우리가 사용하는 생산성 앱 Notion의 사례입니다.

Notion Desktop은 Electron 기반으로 만들어져 있습니다.

Electron 앱은 JavaScript 코드와 애플리케이션 패키지 내부의 여러 파일을 분석할 수 있는 경우가 있기 때문에,

네이티브 실행 파일만 있는 프로그램보다 상대적으로 분석하기 쉬운 편입니다.

REA 쇼케이스에서는 Notion의 클립보드 기능을 분석했습니다.

우리가 Notion에서 블록을 복사하면 단순히 텍스트만 복사되는 것이 아니라, HTML과 Notion 내부의 구조화된 데이터가 함께 처리될 수 있습니다.

공개된 분석에서는 다음과 같은 흐름을 추적했습니다.

  1. - Notion 페이지에서 클립보드 API를 호출합니다.

  2. - Preload 스크립트가 IPC를 통해 요청을 전달합니다.

  3. - Electron 메인 프로세스에서 해당 요청을 처리합니다.

  4. - 시스템 클립보드에 텍스트와 HTML을 기록합니다.

  5. - 복사된 HTML에 포함된 식별자를 이용해 Notion 내부의 구조화된 데이터와 연결합니다.

이 사례는 특히 실무 개발자에게 흥미롭습니다.

기존에는 다른 앱의 복사 기능이 왜 일반 텍스트 복사와 다른지 이해하기 위해 프로그램 구조를 직접 조사해야 했습니다.

REA를 사용하면 이러한 기능이 어떤 계층을 거쳐 구현되는지 분석하고, 비슷한 구조를 자신의 프로그램에 구현하는 데 참고할 수 있습니다.

다만 이 결과는 Notion 전체를 복제한 것이 아닙니다.

클립보드 기능의 일부 동작을 추적하고 이해한 사례입니다.

사례 3. 오래된 DOS 게임의 탄막 패턴을 분석하다

REA 공식 쇼케이스

또 다른 사례는 PC-98 기반의 DOS 게임인 Touhou 4: Lotus Land Story입니다.

Watch TH04 portable gameplay on YouTube


이 게임의 탄막 패턴 중에는 플레이어의 위치를 기준으로 여러 발의 탄환이 일정한 각도로 발사되는 형태가 있습니다.

REA를 활용한 분석에서는 원본 프로그램의 16비트 코드에서 각도 계산을 수행하는 함수를 찾아냈고, 이를 읽을 수 있는 C++ 형태로 재구성했습니다.

이 과정에서 단순히 함수의 이름이나 변수만 추측하는 것이 아니라, 실제 곱셈과 나눗셈, 좌표 연산 등을 분석하여 탄환의 방향이 어떻게 결정되는지 이해할 수 있었습니다.

이런 사례는 오래된 게임을 보존하거나, 기존 게임의 동작을 현대적인 환경으로 옮기는 작업에 활용할 수 있습니다.

여기까지의 결론

공개된 사례만 보더라도 REA는 실제로 작동하는 도구라고 볼 수 있습니다.

다만 이를 정확하게 표현하면 다음과 같습니다.

  • - 실제 프로그램을 분석할 수 있습니다.

  • - 특정 기능의 동작 원리를 추적할 수 있습니다.

  • - 분석 결과를 바탕으로 코드를 재구성할 수 있습니다.

  • - 재구성한 코드가 원본과 동일하게 동작하는지 테스트할 수 있습니다.

  • - 일부 기능은 원본과 동일한 컴파일 결과까지 검증할 수 있습니다.

반면 다음과 같은 의미는 아닙니다.

  • - 모든 프로그램의 원본 소스코드를 복원할 수 있습니다.

  • - 모든 앱을 자동으로 복제할 수 있습니다.

  • - 한 번의 명령으로 완성된 제품을 만들 수 있습니다.

  • - AI가 작성한 코드가 원본과 동일하다는 것을 자동으로 보장합니다.

REA의 진짜 성과는 AI가 프로그램을 분석하고, 그 분석 결과를 검증 가능한 형태로 활용할 수 있게 된 것에 있습니다.

4. 최근 한 달간 사용자들은 무엇을 만들었을까?

REA가 주목받은 이유는 단순히 GitHub 스타가 많아졌기 때문만은 아닙니다.

실제로 여러 개발자가 REA를 이용해 자신이 가지고 있던 프로그램을 분석하거나, 기존 소프트웨어의 기능을 다른 환경에서 구현하려는 시도를 공개했습니다.

실제 활용 사례는 REA GitHub Discussions의 Show and Tell과 REA Gems에서 찾아볼 수 있습니다.

그 결과 흥미로운 점이 발견됐습니다.

REA를 사용한 사람들의 상당수는 상용 앱을 그대로 복제하기보다는

자신이 가지고 있는 소프트웨어나 하드웨어를 더 잘 활용하기 위해 기존 프로그램을 분석하고 있었습니다.

사례 1. 스마트폰 앱으로만 작동하는 프린터를 PC에서도 사용하기

GitHub Discussion – LX-D02 프린터 분석 사례

실제 결과물 – PicoPrint

한 사용자는 스마트폰 앱으로만 사용할 수 있는 LX-D02 열전사 프린터를 Windows에서도 사용하고 싶었습니다.

기존에는 제조사가 제공하는 모바일 앱을 통해서만 프린터를 사용할 수 있었습니다.

이 사용자는 REA를 이용해 앱을 분석했고, 해당 앱이 React Native 기반이며 Hermes JavaScript 번들 안에 관련 로직이 있다는 점을 확인했습니다.

이후 앱 내부의 동작을 분석하여 PC에서도 프린터를 활용할 수 있는 프로그램을 만들었습니다.

공개된 PicoPrint 프로젝트는 Windows에서 LX-D02 프린터를 활용하기 위한 실제 소프트웨어입니다.

이 사례가 흥미로운 이유는 기존 제품을 복제하는 것과는 조금 다르기 때문입니다.

사용자는 이미 구매한 하드웨어를 제조사가 제공한 소프트웨어의 제약 없이 활용하고 싶었던 것입니다.

REA와 AI 코딩 에이전트는 이런 작업의 진입 장벽을 낮출 수 있습니다.

사례 2. Insta360 프로그램을 AMD GPU에서도 활용하기

Hacker News – REA Reverse Engineer Anything

Hacker News에서는 Insta360 Studio와 관련된 분석 사례도 소개됐습니다.

한 개발자는 기존 프로그램이 AMD GPU를 제대로 활용하지 못하는 문제를 해결하기 위해 프로그램을 분석하고,

AMD GPU를 사용할 수 있도록 연결하는 코드를 작성했습니다.

해당 사용자는 기존 방식으로 리버스 엔지니어링을 진행했다면 수 주가 걸릴 수 있는 작업을 훨씬 빠르게 진행할 수 있었다는 취지의 경험을 공유했습니다.

이 사례는 REA가 단순히 다른 앱의 UI를 복제하는 용도에만 한정되지 않는다는 점을 보여줍니다.

기존 프로그램이 특정 하드웨어나 환경에 종속되어 있다면, 그 제약을 이해하고 다른 환경에서 활용할 수 있도록 수정하는 데도 도움을 줄 수 있습니다.

사례 3. REA를 활용한 다른 프로젝트들

REA Gems – 실제 REA 활용 사례 모음

Awesome REA – 관련 프로젝트 및 사례 모음

REA Gems와 Awesome REA에서는 게임 복원, 앱 분석, 하드웨어 프로토콜 분석, 기존 프로그램의 기능 재구현 등 여러 사례를 찾아볼 수 있습니다.

이러한 사례를 살펴보면 REA가 단순히 UI를 복제하는 도구가 아니라 기존 프로그램의 내부 동작을 이해하고

새로운 환경에서 활용하기 위한 분석 도구로 사용되고 있다는 점을 알 수 있습니다.

그런데 정말 앱을 복제한 사례는 얼마나 있을까?

REA가 처음 화제가 될 때 가장 많이 등장한 기대 중 하나는 "다른 앱을 분석해서 비슷한 앱을 만들어낼 수 있다"는 것이었습니다.

실제로 기존 상용 앱을 참고하여 새로운 프로그램을 만들었다고 주장하는 프로젝트들도 등장했습니다.

예를 들어 Screen Studio와 OBS Studio를 참고한 화면 녹화 프로그램, Claude Desktop의 UI를 재구성한 프로젝트 등이 공개됐습니다.

하지만 여기서는 주의가 필요합니다.

이러한 프로젝트가 REA를 사용했다고 주장하는 것과 실제로 REA가 얼마나 많은 부분을 분석했고, 그 결과가 얼마나 정확하게 재현됐는지는 별개의 문제입니다.

또한 UI가 비슷하다고 해서 내부 기능까지 동일하게 구현되었다고 볼 수 없습니다.

공개된 프로젝트 중에는 결과물의 작동 여부나 구현 수준을 독립적으로 검증하기 어려운 사례도 있습니다.

따라서 현재까지의 사용자 사례를 평가할 때는 실제 기능을 검증한 사례와 단순히 유사한 결과물을 공개한 사례를 구분해서 볼 필요가 있습니다.

다음글에서는 실제 유저들이 어떻게 평가하고 있는지에 대한 글을 써보겠습니다.