MCP HubMCP Hub
스킬 목록으로 돌아가기

decode-minified-js-gates

pjt222
업데이트됨 Yesterday
6 조회
17
2
17
GitHub에서 보기
개발general

정보

이 스킬은 난독화된 자바스크립트를 분석하여 기능 플래그 게이트 구현을 식별하고 분류하며, 다양한 판독기 변형을 탐지하고 기본값을 추출합니다. 이름만으로는 충분하지 않을 때 플래그 동작 분석을 위한 구조화된 메커니즘 기록을 생성합니다. 프로덕션 번들에서 여러 플래그 라이브러리나 복잡한 설정-객체 스키마를 다룰 때 사용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/decode-minified-js-gates

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서

解讀壓縮 JS 閘調用

讀壓縮 JavaScript 包中旗標字串四周之調用點脈絡,以產一閘機制記錄:何讀者變體、何預設、何連接、何角色。probe-feature-flag-state 答「此閘為開為關」之問,本技能則答其前置之問——「此閘究竟為何而為」。

適用時機

  • sweep-flag-namespace 浮現之旗標,依其名不可分類。
  • 二進位用不止一閘讀函式,須知某旗標所調者為何。
  • 閘之「預設」似非布林({}null、數字字面),須解其實際讀者變體。
  • 疑為斷路閘(反向閘)而依旗標名不可確證。
  • 述詞以 && 合多閘,須先列出共閘再行任一探查。

輸入

  • 必要:壓縮之 JavaScript 包檔(.js.mjs.bun)。
  • 必要:欲解之目標旗標字串,字面形。
  • 選擇性:先前解讀所得之已知讀函式名清單——可加速步驟二。
  • 選擇性:脈絡視窗大小覆蓋;預設為旗標出現處之前 300 字、後 200 字。

步驟

步驟一:取脈絡視窗

定旗標字串,於每一出現處取一不對稱視窗。前段(旗標之前)為讀函式名所居;後段(旗標之後)為預設值與連接所居。

BUNDLE=/path/to/cli/bundle.js
FLAG=acme_widget_v3                   # synthetic placeholder
PRE=300
POST=200

# All byte offsets where the flag string occurs
grep -boE "\"${FLAG}\"" "$BUNDLE" | cut -d: -f1 > /tmp/decode-offsets.txt
wc -l /tmp/decode-offsets.txt

# Capture an asymmetric window per occurrence
while read -r offset; do
  start=$((offset - PRE))
  [ "$start" -lt 0 ] && start=0
  length=$((PRE + POST))
  echo "=== offset $offset ==="
  dd if="$BUNDLE" bs=1 skip="$start" count="$length" 2>/dev/null
  echo
done < /tmp/decode-offsets.txt > /tmp/decode-windows.txt

less /tmp/decode-windows.txt

欲速行首遍,grep -oE 配 Perl 相容正則之負向後查可一管捕得同樣視窗。

預期: 每一旗標出現處得一或多脈絡視窗,各約 500 字。多次出現通常共讀函式而於預設或連接或異——當逐一獨檢。

失敗時: 若包過大,逐次出現行 dd 不勝(二進位 > 100MB 或出現甚多),改用 rg -B 5 -A 3 "$FLAG" "$BUNDLE" 以求結構化輸出之近似。若視窗似有壞,包或為 UTF-16 或含非 ASCII 之分隔符;用 iconv 或視為二進位。

步驟二:辨讀者變體

壓縮之閘庫常露 4–6 讀者變體,語義各異。讀函式名為首示,調用簽名為驗者。

變體分類(合成名——以實際包中壓縮之識別符代之):

變體合成形返回常見用途
Sync booleangate("flag", false) or gate("flag", true)boolean標準開關之功能切換
Sync config-objectfvReader("flag", {key: value})JSON 物件結構化 config(延遲、白名單、模型名)
Bootstrap-aware TTLttlReader("flag", default, ttlMs)boolean (cached)啟動路徑之閘,遠端 config 抵達之前
Truthy-onlytruthyReader("flag")truthy/falsy速查;無顯式預設
Async bootstrapasyncReader("flag")Promise<boolean>啟動後解析之閘
Async bridgebridgeReader("flag")Promise<boolean>橋/中繼通道閘,自有評估路徑

對每一脈絡視窗,配變體之模式:

# Test for variant patterns. Replace the synthetic reader names with the
# actual minified identifiers found in the bundle.
grep -oE '\b(gate|fvReader|ttlReader|truthyReader|asyncReader|bridgeReader)\("acme_widget_v3"' /tmp/decode-windows.txt | sort | uniq -c

若同旗標出多變體(罕而真有——如旗標於啟動同步讀,亦於啟動後異步讀),則各出現分記其變體。探查結果或異。

預期: 每一閘調用出現皆標一變體。掃覽全段中變體計數產出二進位級之分布(如「60% sync boolean、30% config-object、10% TTL」)。

失敗時: 若脈絡視窗無可辨之讀者模式,則此旗標或非真為閘調用——重核 sweep-flag-namespace 步驟二之調用點分類。若視窗中讀者名不在此分類中,於研究工件中文檔為新變體,並判其應否獨成一處理路徑。

步驟三:取預設值

預設為讀者之第二位置參數(truthy-only 與 async 變體則無)。捕其字面之確——falsetruenull0、字串、或 JSON config 物件。

# Boolean default extraction (sync boolean and TTL variants)
grep -oE '\b(gate|ttlReader)\("acme_widget_v3",\s*(true|false)' /tmp/decode-windows.txt

# Config-object default — match the opening brace and capture until the
# matching brace at the same nesting depth. For minified bundles this is
# usually safe with a non-greedy match because objects rarely span lines.
grep -oE 'fvReader\("acme_widget_v3",\s*\{[^}]*\}' /tmp/decode-windows.txt

# Numeric default (rare but real for TTL or threshold gates)
grep -oE '\b(gate|ttlReader)\("acme_widget_v3",\s*[0-9]+' /tmp/decode-windows.txt

對 config 物件預設,當察其 JSON 結構——鍵常暗示閘之用(如 {maxRetries: 3, timeoutMs: 5000} 為重試策略 config,非功能切換)。

預期: 每一出現得一字面之確預設。布林之意明;config 物件須手讀其結構。

失敗時: 若 config 物件之配對大括號落於脈絡視窗之外,於步驟一加大後段大小。若預設似為變數引用(如 gate("flag", x)),則預設於執行期計算——標其為 DYNAMIC,並以 probe-feature-flag-state 探實際所返之值。

步驟四:察連接與斷路開關

多閘參與複合述詞。連接(&&)與反向(!)變閘之有效角色。

# Conjunction detection: gate-call followed by `&&` and another gate-call
# within the same predicate window
grep -oE '(gate|fvReader|ttlReader|truthyReader|asyncReader|bridgeReader)\("acme_widget_v3"[^)]*\)\s*&&\s*(gate|fvReader|ttlReader|truthyReader|asyncReader|bridgeReader)\("acme_[a-zA-Z0-9_]+"' /tmp/decode-windows.txt

# Kill-switch detection: leading `!` before the gate-call
grep -oE '!\s*(gate|fvReader|ttlReader|truthyReader|asyncReader|bridgeReader)\("acme_widget_v3"' /tmp/decode-windows.txt

對所察之每一連接,列其共閘之旗標名。其今為探查範圍之一部——若目標旗標之求值賴乎共閘,則孤探目標將產不全之狀。

對所察之每一反向,於閘機制記錄中標旗標為斷路開關。斷路開關翻預設之意:斷路開關之 default=false 乃「預設功能開」(蓋 !false === true),而尋常閘之 default=false 乃「預設功能關」。

預期: 每一出現得一連接清單(或空)與一反向旗標(布林)。

失敗時: 若連接含逾 2 共閘,述詞已複雜至正則漏其結構。手讀脈絡視窗,於閘機制記錄中逐字文檔其述詞之形。

步驟五:分閘之角色

合步驟二至四為一角色分類。角色驅不同之探查策略與不同之整合風險。

角色簽名含義
Feature switchsync boolean,無反向、無連接標準開關;可直探
Config providersync config-object(fvReader讀所返物件;空預設 {} ≠ 功能關
Lifecycle guardbootstrap-aware TTL 或 async bootstrap狀態賴乎啟動時序;於多點探查
Kill switch反向閘,預設為 false用戶側預設功能開;旗標翻其 OFF
Conjunction member任一變體配 && 共閘不可孤評;共閘為探查範圍之一部
Bridge gateasync bridge 變體探查須經橋通道,非主路

預期: 每一閘調用出現恰得一主角色。某些旗標跨出現顯多角色(如此調用點為 feature switch、彼調用點為 conjunction member)——當各記其角色。

失敗時: 若角色不入此表,則二進位用本技能尚未文檔之閘庫。以合成識別符添一行,將此變體回饋於本技能(或項目擴展)以助後來之查者。

步驟六:產閘機制記錄

合各旗標之發現為一結構化記錄。JSONL 為便,蓋每一旗標一行,易與 sweep-flag-namespace 庫存合併。

{"flag":"acme_widget_v3","variant":"sync_boolean","default":false,"role":"feature_switch","conjunctions":[],"inverted":false,"occurrences":3}
{"flag":"acme_retry_policy","variant":"sync_config_object","default":{"maxRetries":3,"timeoutMs":5000},"role":"config_provider","conjunctions":[],"inverted":false,"occurrences":1}
{"flag":"acme_legacy_path","variant":"sync_boolean","default":false,"role":"kill_switch","conjunctions":[],"inverted":true,"occurrences":2}
{"flag":"acme_beta_feature","variant":"sync_boolean","default":false,"role":"conjunction_member","conjunctions":["acme_beta_program_active"],"inverted":false,"occurrences":1}

閘機制記錄餵 probe-feature-flag-state 步驟二(閘對事件之消歧):變體 + 角色 + 連接清單決何觀察當算為 LIVE / DARK / INDETERMINATE 狀態之證。

預期: 每一旗標一 JSONL 記錄(或一旗標含多異機制時,每一旗標出現一條)。記錄可重——對同一二進位再行此程,產同一記錄。

失敗時: 若記錄跨次運行有異,則上游某步非確定。多為步驟一之正則漏取或超取出現。役期間鎖正則。

驗證

  • 步驟一為每一旗標出現產一脈絡視窗;視窗約 500 字。
  • 步驟二為每一出現恰標分類中之一讀者變體。
  • 步驟三捕字面之確預設(布林、config 物件、或 DYNAMIC)。
  • 步驟四浮現視窗中所有連接與斷路反向。
  • 步驟五為每一出現自角色表中派一角色。
  • 步驟六產一 JSONL 閘機制記錄,跨次運行可清 diff。
  • 諸示例皆用合成占位符(acme_*gatefvReader 等)——無實旗標名、實讀者名或實 config 物件 schema。
  • 記錄可由 probe-feature-flag-state 消費(同旗標識別符、相容之欄位名)。

常見陷阱

  • 讀「預設」為「行為」default=true 之閘於此二進位中為預設開,然服務端覆蓋或翻之。預設言基線;執行期之探查(probe-feature-flag-state)言狀態。
  • 混 config 物件空預設與功能關fvReader("flag", {}) 之預設返空物件——然旗標為(閘求值為 truthy)。視 {} 為「關」,乃將 config 提供者誤分為功能切換。
  • 漏斷路開關:閘調用之前一 ! 反其意。跳步驟四,記錄將言「default=false,預設功能關」,而真為「default=false,因反向故預設功能開」。
  • 探連接之半:若述詞為 acme_widget_v3 && acme_user_in_cohort,孤探 acme_widget_v3 而見其 LIVE 不足以言功能在用——連接或仍由群組旗標將其關。
  • 跨版信讀者名:壓縮之識別符於主版間或更。步驟二之分類以簽名(調用形、返回類型、預設位置)為據,非以名為據。二進位版改時,當自新解讀以重得讀者名。
  • 視窗過窄:200/100 之分漏跨 300+ 字之 config 物件預設。300/200 或 400/300 為穩;唯包極大且視窗成本要時方收緊。
  • 泄漏實讀者名:壓縮之讀者名常如無義(abYc1),易令人逐字貼入。然其仍為發現——發布方法之前,當以合成占位符代之。

相關技能

  • probe-feature-flag-state —— 用閘機制記錄以解執行期之觀察
  • sweep-flag-namespace —— 產本技能所解讀之候選旗標集
  • monitor-binary-version-baselines —— 跨二進位版本追蹤讀者名變更;基線翻時,當重得步驟二之模式
  • redact-for-public-disclosure —— 如何發布閘解讀之方法而不露實讀者名或 schema
  • conduct-empirical-wire-capture —— 對閘機制記錄行執行期行為之驗證

GitHub 저장소

pjt222/agent-almanac
경로: i18n/wenyan-lite/skills/decode-minified-js-gates
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

subagent-driven-development

개발

이 스킬은 각 독립적인 작업마다 새로운 하위 에이전트를 배치하고 작업 사이에 코드 리뷰를 진행하여 구현 계획을 실행합니다. 이 리뷰 프로세스를 통해 품질 게이트를 유지하면서 빠른 반복 작업을 가능하게 합니다. 동일한 세션 내에서 대부분 독립적인 작업을 진행할 때 내장된 품질 검증과 함께 지속적인 진행을 보장하기 위해 사용하세요.

스킬 보기

qmd

개발

qmd는 BM25, 벡터 임베딩, 재순위화를 결합한 하이브리드 검색을 통해 로컬 파일을 색인화하고 검색할 수 있는 로컬 검색 및 색인화 CLI 도구입니다. 명령줄 사용과 Claude 통합을 위한 MCP(Model Context Protocol) 모드를 모두 지원합니다. 이 도구는 임베딩에 Ollama를 사용하고 색인을 로컬에 저장하여 터미널에서 직접 문서나 코드베이스를 검색하는 데 이상적입니다.

스킬 보기

mcporter

개발

mcporter 스킬은 개발자가 Claude에서 직접 Model Context Protocol(MCP) 서버를 관리하고 호출할 수 있도록 합니다. 이 스킬은 사용 가능한 서버를 나열하고, 인수를 사용해 해당 서버의 도구를 호출하며, 인증 및 데몬 생명주기를 처리하는 명령어를 제공합니다. 개발 워크플로우에서 MCP 서버 기능을 통합하고 테스트할 때 이 스킬을 사용하세요.

스킬 보기

adk-deployment-specialist

개발

이 스킬은 A2A 프로토콜을 사용하여 Vertex AI ADK 에이전트를 배포하고 오케스트레이션하며, AgentCard 검색, 작업 제출, 코드 실행 샌드박스 및 메모리 뱅크와 같은 지원 도구를 관리합니다. Python, Java 또는 Go 언어로 순차, 병렬 또는 루프 오케스트레이션 패턴을 갖춘 다중 에이전트 시스템 구축을 가능하게 합니다. Google Cloud에서 ADK 에이전트 배포 또는 에이전트 워크플로우 오케스트레이션을 요청받았을 때 사용하세요.

스킬 보기