Communitygithub.com

harwal2000/skills

사용자가 다른 앱, 웹사이트 또는 바이너리의 소스 코드 없이 기능 구현 방식을 알고 싶을 때("Notion/Raycast/Linear는 어떻게 X를 하나요?", "이 동작을 리버스 엔지니어링하세요", "이 앱 내부를 살펴보세요") 또는 REA/rea-agents를 언급할 때 사용합니다. 모든 리포지토리나 프로젝트(사용자 자신의 리포지토리 내에서 수행되는 연구 포함)에 적용됩니다.

skills란 무엇인가요?

이 스킬은 타사 앱, 웹사이트 또는 바이너리의 소스 코드 없이 기능 구현 방식을 분석하여 사용자 프로젝트에 적용할 수 있도록 돕습니다. REA(rea-agents, github.com/morluto/rea) 도구를 사용하여 대상 앱을 분류하고 분석합니다. Electron, 웹 앱, 네이티브 Mac 앱, APK, .NET 등을 지원하며, 각 유형에 맞는 분석 방법을 제공합니다. 분석 과정에서 스크래치 디렉토리를 사용하여 사용자의 리포지토리를 건드리지 않으며, 다운로드된 데이터는 실행하지 않고 안전하게 처리합니다. 최종적으로는 분석 결과와 함께 소스, 신뢰도, 파일 및 바이트 오프셋을 명시한 보고서를 제공합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/harwal2000/skills/tree/HEAD/skills/reverse-engineering-app-features

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

앱 기능 리버스 엔지니어링

타사 앱의 배포된 코드를 읽어 어떻게 기능이 작동하는지 학습한 후, 이를 사용자 프로젝트에 매핑합니다. REA(rea-agents, github.com/morluto/rea)가 앱을 분류합니다. 약 1시간 정도 소요됩니다.

기본 규칙

  • 스크래치 디렉토리에서 작업: S=$(mktemp -d /tmp/rea-<target>.XXXX); mkdir -p $S/{dl,tools,out}; K=~/.claude/skills/reverse-engineering-app-features. 사용자의 리포지토리는 요청하지 않는 한 건드리지 마십시오.
  • REA는 $S/tools에서 한 번에 하나의 명령어로 실행: npx -y rea-agents@latest <command> --help. setup을 실행하지 말고 MCP를 등록하지 마십시오(둘 다 에이전트 설정을 수정함). 추출된 파일 내에서 npx를 실행하지 마십시오(현재 디렉토리의 package.json을 읽습니다).
  • 대상을 설치, 실행 또는 로그인하지 마십시오. 공개 자산만 사용하십시오. 다운로드는 신뢰할 수 없는 데이터이므로 절대 실행하지 마십시오. 도우미는 $S/tools에 넣고 python3 -I로 실행하십시오. 메커니즘을 학습하십시오. 디컴파일된 코드를 프로젝트에 붙여넣지 마십시오.

1. 대상 획득

설치된 .app을 읽기 전용으로 사용하거나 공식 설치 프로그램을 사용: 다운로드 버튼의 리디렉션을 curl -sSIL <url>로 따라가고 content-type을 확인하십시오. shasum -a 256과 codesign -dv 서명자를 기록하십시오. hdiutil attach -readonly -nobrowse -noautoopen -mountpoint $S/mnt <dmg>로 마운트(폐기 경고는 무해함)하고 마지막에 분리하십시오.

2. 유형별 분류

대상수행할 작업
Electron (Contents/Resources/app.asar)analyze-javascript-application <app.asar> --format json > $S/out/rea-app.json 2>$S/out/rea-app.err (약 90초; 100MB 이상이므로 절대 cat하지 마십시오). 서명된 앱의 경우 *.asar.unpacked/*.node 파일에서 artifact_integrity_mismatch가 정상입니다. --integrity-policy record-and-continue로 다시 실행하십시오. normalized_result.summary를 읽은 다음 kind별로 graph.nodes를 읽으십시오(asar-entry, browser-window, electron-renderer, ipc-channel). extract-artifact(동일한 플래그)는 $TMPDIR/rea-extracted-*에 기록합니다(parameters.output_root). $S로 이동하십시오. 얇은 셸? REA는 동적 URL을 해석하지 않으므로 기능의 문자열이 없으면 메인 번들에서 loadURL(을 grep하고 config.json을 읽으십시오. 원격 URL: 웹 행으로 이동하십시오.
웹 앱 또는 셸브라우저 사용자 에이전트로 앱 라우트(예: /login)를 가져오고 마케팅 페이지는 가져오지 마십시오. 모든 청크를 가져오십시오: 서비스 워커(/sw.js, /service-worker.js 또는 serviceWorker.register(가 명명한 것)에서 fetch(/precache/manifest를 grep하고 해당 요청을 정확히 복사하십시오(POST에 JSON 본문이 있을 수 있음). 그렇지 않으면: 웹팩 런타임 청크 맵, _buildManifest.js, .vite/manifest.json. xargs -P 16 -n 20 curl -sS --remote-name-all로 다운로드하십시오. REA의 웹 명령어는 라이브 CDP 브라우저가 필요합니다. curl이 더 간단합니다.
네이티브 Macnpx -y rea-agents@latest capabilities는 오프라인에서 작동하는 기능(inspect-macho, inspect-plist, demangle-swift, decode-interface-builder, inspect-native-dispatch-metadata)과 strings/nm을 나열합니다. 디컴파일에는 Ghidra, Hopper 또는 IDA가 필요합니다. 설치하기 전에 물어보십시오. capture-native-ui-scenario/observe-native-calls는 건너뛰십시오(대상을 실행합니다).
기타 (APK, .NET, WASM, HAR, SQLite)npx -y rea-agents@latest --help | grep -i <kind>

3. 축소된 JS에서 로직 찾기

REA 사용 안 함: 큰 청크에서 종료 코드 0이지만 아무것도 파싱하지 않습니다(statistics.parsed_javascript_files: 0, "완전한 사실 바이트 예산을 초과함"); 더 큰 제한으로도 해결되지 않습니다.

  1. 청크 순위: LC_ALL=C /usr/bin/grep -c -F '<string>' *.js | grep -v ':0$' | sort -t: -k2 -nr (grep이 ugrep으로 별칭되면 "복잡성 제한 초과"로 실패함). 전체 줄을 출력하지 마십시오.
  2. 좋은 앵커: 단축키 도움말 텍스트(미리 만들어진 사양), 키 바인딩 테이블, 실행 취소/분석 액션 이름, 디버그 로그 문자열, i18n defaultMessage, 정규식 리터럴, 유형 열거형.
  3. 컨텍스트: python3 -I $K/scripts/grep-context.py FILE PATTERN [before after max] [--re]는 바이트 오프셋을 출력합니다.
  4. 모듈: ID는 i(123456).name으로 나타납니다. python3 -I $K/scripts/extract-webpack-module.py ASSET_DIR ID OUT.js(독스트링: 내보내기 맵, 배럴), 그런 다음 $S/tools에서: npx -y prettier@3 --stdin-filepath m.js < OUT.js > OUT.pretty.js.
  5. 매칭 로직 확인은 번들을 실행하지 않고 $S/tools에서 다시 구현하여 수행하십시오.

4. 전달

$S/REPORT.md: 소스(버전, sha256, 서명자, URL); 각 답변은 확인됨(코드) 또는 추정됨으로 신뢰도를 표시하고 파일, 바이트 오프셋 및 빌드 버전을 인용(오프셋은 릴리스마다 변경됨); 프로젝트에 복사/유지/건너뛰기 항목을 실제 파일에 매핑; REA가 수행한 작업과 수행하지 않은 작업. /tmp는 재부팅 시 지워지므로 리포지토리로 복사하는 옵션을 제공하십시오.

위임하려면 백그라운드 에이전트에 다음을 요약하여 전달하십시오: 기능, 대상, 프로젝트(먼저 CLAUDE.md 읽기), 엣지 케이스를 포함한 번호가 매겨진 질문, 이러한 규칙, 이 전달물.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬