← 목록으로
지난 소식
Show GN: godgame.net – 설치 없이 브라우저에서 하는 오목·장기·윷놀이 등 보드게임 플랫폼
요약
- REA는 코딩 에이전트가 프로그램을 검사하고 자연어 질문에 맞춰 명령어와 디컴파일 코드 등을 제공하여 소프트웨어 동작 분석과 재구현을 돕는 도구입니다.
- 이를 활용해 브라우저 공룡 게임의 속도 규칙이나 Windows Calculator의 백분율 연산 분기 등을 분석하고 재현할 수 있습니다.
- REA는 코딩 에이전트가 프로그램 자체를 검사하고 동작을 설명하도록 도구를 제공하며, 분석한 기능을 변경하거나 재구현하는 데 활용할 수 있음
- 사용자가 자연어로 질문하면 REA가 명령어, 디컴파일 코드, 호출 관계 등을 제공하고, 에이전트가 적용되는 분기와 계산 방식, 재구현 방법을 해석함
- Chrome 공룡 게임 사례에서는 실행 중인 스크립트에서 속도 증가 규칙을 찾아, 같은 가속 규칙과 속도 조절 기능을 갖춘 작은 게임을 만듦
- Windows Calculator 사례에서는 % 버튼의 연산자별 분기를 복원해, 200 + 10%는 220이 되고 200 × 10%는 20이 되는 동작을 재현함
- 분석 대상은 네이티브 실행 파일과 라이브러리, JavaScript/Electron 앱, 브라우저와 프로세스 실행 활동까지 아우름
프로그램 검사와 에이전트의 역할
- 리버스 엔지니어링은 프로그램 자체를 검사해 소프트웨어의 동작을 알아내는 작업이며, 기능을 설명하거나 변경하거나 다시 만들 수 있을 만큼 이해하는 것이 목표임
- REA가 없으면 사용자가 직접 명령어를 해독하고 호출을 따라가며 계산 과정을 복원해야 하지만, REA를 사용하면 에이전트에 자연어로 분석을 요청할 수 있음
- REA는 핸들러의 명령어, 디컴파일 코드, 호출 정보를 제공함
- 에이전트는 어떤 분기가 적용되는지, 무엇을 계산하는지, 어떻게 재구현할지 해석함
- 설치는 npx rea-agents@latest setup 으로 진행하며, 설정 계획을 승인한 뒤 에이전트를 재시작함
- 코딩 에이전트에 설치와 연결을 요청하면서, 실행 전 계획 승인과 설치 후 검증을 지시할 수도 있음
공룡 게임의 가속 규칙 복원
- 분석 대상은 wayou의 Chromium 기반 브라우저 버전이며, 목표는 원래 가속 동작을 재현하면서 속도를 조절할 수 있는 게임을 만드는 것임
- REA는 로컬 디버깅 연결로 HTTP 브라우저 버전을 검사하고, 실제 로드된 index.js의 소스와 다이제스트를 반환함
- 에이전트는 실행 중인 스크립트의 업데이트 함수와 속도 설정을 읽어 규칙을 복원함
- 검사한 속도 코드의 설정은 SPEED: 6, ACCELERATION: 0.001, MAX_SPEED: 13임
- 속도 6에서 시작해 충돌 없는 업데이트마다 0.001씩 증가하며, 현재 속도가 13 미만일 때만 증가 연산을 수행함
- 원본 게임의 업데이트 함수를 통제된 브라우저 환경에서 호출해 규칙을 확인함
- 장애물과 자동 실행 예약을 비활성화한 상태에서 4,000회 업데이트 후 속도는 10.0, 10,000회 후에는 13.0이었으며, 수치는 소수점 첫째 자리로 반올림한 값임
- 속도 실험실의 새 미니게임은 원래 속도 규칙을 유지하면서 속도 슬라이더를 추가함
- 그리기, 점프, 충돌 코드는 교육용으로 작게 구현한 별도 코드임
- 원래 가속 방식이나 직접 지정한 속도로 플레이하고, 새 코드를 확인하거나 같은 속도 검사를 실행할 수 있음
- 직접 분석하려면 브라우저 연결 절차에 따라 대상 페이지와 로컬 디버깅 엔드포인트를 에이전트에 전달함
Windows Calculator의 % 버튼 재구현
- 목표는 설치된 앱을 검사해 덧셈과 곱셈 뒤에서 달라지는 % 규칙을 복원하고, 두 동작을 처리하는 작은 계산기를 만드는 것임
- REA로 calc.exe를 읽으면 ms-calculator:를 열어 Calculator 앱을 실행하는 코드를 확인할 수 있으며, 이후 에이전트가 설치된 앱의 라이브러리를 선택함
- REA는 라이브러리에서 % 핸들러의 코드를 반환함
- 핸들러는 연산자를 검사하고 상수 100을 사용함
- 복원한 분기는 곱셈 또는 나눗셈인지에 따라 백분율 값을 다르게 계산함
- 곱셈이나 나눗셈이면 percent = current / 100을 적용함
- 그 외에는 percent = current * previous / 100을 적용함
- previous = 200, current = 10일 때 덧셈에서는 200의 10%인 20을 더해 220이 됨
- 곱셈에서는 10을 100으로 나눈 0.1을 사용하므로 200 × 0.1 = 20이 됨
- 실제 명령어는 연산자 값을 0x5c와 0x5b 에 비교하고 분기하며, Microsoft 공개 소스의 이름으로 각각 IDC_MUL = 92, IDC_DIV = 91에 대응함
- IDC_PERCENT = 118은 0x76이며, 코드에서 쓰는 0x64는 십진수 100임
- 검사는 REA 4.1.0과 Windows Calculator 11.2508.4.0 x64로 수행함
- 복원한 분기는 Microsoft의 백분율 구현과 대조했으며, 테스트 사례도 제공함
- 읽기 쉬운 분기 요약에는 Microsoft 공개 소스의 이름을 사용함
첫 조사와 대상별 분석 범위
- 첫 조사 가이드에서는 Notes 예제 앱을 내려받아 CSV 내보내기를 추적하고, 입력 하나를 바꿔 결과를 확인함
- 더 큰 작업으로는 REA 웹사이트 복제와 게임 실행 파일을 바탕으로 한 재구성을 제안함
- 게임 사례에서는 게임플레이 로직을 C로 복원하고 원본과 비교 테스트하도록 요청하며, DX-Ball 사례 연구로 이어짐
- 대상별로 분석 범위와 절차가 나뉨
- 네이티브 분석 가이드: 실행 파일과 라이브러리의 함수, 문자열, 참조, 호출 관계를 검사함
- JavaScript/Electron 앱 분석 절차: 앱 폴더나 ASAR 아카이브에서 모듈, 라우트, IPC, 네이티브 의존성을 파악함
- 브라우저 관찰 가이드: 선택한 브라우저 또는 프로세스 활동을 캡처하고 실행 간 결과를 비교함