본문으로 건너뛰기
cccskills
무료GitHub에 공개

agd-deobfuscate

Identify and add new AnimeGameData field deobfuscation mappings by comparing cleartext and obfuscated AGD revisions. Use when a new Genshin Impact build changes obfuscated JSON field names or when rust/istaroth-agd-regen/src/deob.rs needs a new version mapping block.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md4.7 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Fill in new deobfuscation entries in rust/istaroth-agd-regen/src/deob.rs by comparing a cleartext AGD revision against a new obfuscated HEAD revision.

Context

AnimeGameData (AGD, at path <AGD>) periodically ships new builds where field names in JSON files are obfuscated. The file rust/istaroth-agd-regen/src/deob.rs maintains COMMON, a static map of obfuscated keys → cleartext field names. Each new obfuscation round needs a new batch of entries.

The set of fields to find is determined by reading the latest comment block section already in COMMON (e.g. // OSRELWin6.3.0_R41701329_S41708913_D41667700) and using its cleartext values as the target list.

Workflow

1. Read the existing file

Read rust/istaroth-agd-regen/src/deob.rs to find:

  • The latest comment section block and the cleartext field names it maps (these are the fields to find for the new version)
  • All existing obfuscated keys (to avoid duplicates)

2. Identify the HEAD commit title

cd <AGD> && git log --oneline HEAD | head -1

This gives the comment label for the new section (e.g. CNRELWin6.4.0_R42630645_S42523468_D42623923).

3. Compare reference files

Use these four reference file types (adjust filenames to ones that exist at both revisions):

  • BinOutput/Quest/<id>.json — quest-level fields plus subQuests and talks items
  • BinOutput/Talk/Npc/<id>.json — talkId, dialogList, dialog item fields
  • BinOutput/Talk/GadgetGroup/<id>.json — configId, talks (group-level)
  • BinOutput/Talk/NpcGroup/<id>.json — npcId, talks (group-level)

For each file, show both revisions:

cd <AGD>
git show <cleartext_rev>:<file_path>
git show HEAD:<file_path>

4. Build the mapping

Match values between cleartext and obfuscated versions to identify which obfuscated key corresponds to which cleartext field.

Quest file disambiguation tip: id, resId, series, and chapterId can all share the same value in some quests. Cross-check with a second quest (e.g. BinOutput/Quest/74078.json) where they differ:

git show <cleartext_rev>:BinOutput/Quest/74078.json | python3 -c "
import json,sys; d=json.load(sys.stdin)
print('id:', d.get('id'), 'resId:', d.get('resId'), 'series:', d.get('series'), 'chapterId:', d.get('chapterId'))"
git show HEAD:BinOutput/Quest/74078.json | python3 -c "
import json,sys; d=json.load(sys.stdin)
for k,v in d.items():
    if isinstance(v,int) and v>1000: print(k,':',v)"

5. Verify

Cross-check identified keys against a second quest file to confirm subId/order/questId/npcId:

git show HEAD:BinOutput/Quest/74078.json | python3 -c "
import json,sys; d=json.load(sys.stdin)
sq=d.get('<subQuests_key>',[])
for s in sq[:2]: print({k:v for k,v in s.items() if isinstance(v,int) and v>0})
tk=d.get('<talks_key>',[])
for t in tk[:2]: print({k:v for k,v in t.items() if isinstance(v,(int,list)) and v})"

6. Add entries to deob.rs

Append a new block at the end of COMMON in rust/istaroth-agd-regen/src/deob.rs, covering exactly the fields from the latest previous section that were found in the reference files:

        // <HEAD commit title>
        ("<OBF_KEY>", "<cleartext_field>"),
        ...

Only include fields actually observed in the reference files. Skip any that could not be confirmed. Rebuild and run the tests (AGD_PATH=<AGD> cargo test --manifest-path rust/Cargo.toml) to confirm.

Notes

  • The same obfuscated key may appear at multiple nesting levels (e.g. id appears in top-level quest, inside subQuests items, and inside talks items — all map to the same key).
  • npcId in NpcGroup files also appears as activityId at the group's top level — false collision; npcId is correct for item context and the top-level field is unused by this codebase.
  • Confirm no new key duplicates an existing entry in COMMON before adding.
  • ANECDOTE (for ExcelBinOutput/AnecdoteExcelConfigData.json) is a separate per-file mapping whose cleartext names are invented — the file has shipped obfuscated since its 5.4 introduction, so no cleartext revision exists to diff against. Re-derive its keys each build by value-matching entries against the previous build's file: anecdote ids, quest ids, and the cleartext isHide are stable anchors, and the deobfuscate_anecdote_excel_config_data test in rust/istaroth-agd-regen/tests/agd_integration.rs pins the expected hashes for entry 100001.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Ingest a new AnimeGameData (AGD) build end-to-end — deobfuscation mappings, TextMap fallback-list audit, first-seen version index, and corpus regen. Use when bumping AGD_PATH / AGD to a new game version.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isundaylee/istaroth122026년 10월 20일 업데이트

changelog

무료

Generate or update CHANGELOG.md from landed git history. Use when the user asks to "write a changelog", "update the changelog", or summarize what changed over the last week/period.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isundaylee/istaroth122026년 10월 20일 업데이트

Create a simple, modern HTML review page and run a local browser feedback loop with inline element/text annotations and structured questions. Use when the user wants to discuss or iterate on a design, plan, comparison, scope decision, content draft, or other topic that is easier to review visually than in chat.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isundaylee/istaroth122026년 10월 20일 업데이트

pr

무료

Squash the current branch's work into a single commit and open (or update) a GitHub pull request with Graphite (`gt`). Use when asked to "create a PR", "open a pull request", "put this up for review", or to update an existing PR for the current branch.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isundaylee/istaroth122026년 10월 20일 업데이트

Regenerate, audit, commit, and push Istaroth's generated text corpus in the text/ submodule. Use when the user asks to "regen corpus", regenerate committed text output, audit a corpus diff for content loss, or push a previously verified text regeneration.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isundaylee/istaroth122026년 10월 20일 업데이트

Add or revise retrieval-quality eval fixtures under istaroth/rag/eval/retrieval_fixtures/ (one JSON file per category, e.g. breadth.json). Use when asked to add a retrieval eval case, add a new eval category, improve a fixture's ground truth, or harden fixtures against false misses. Fixtures grade whether retrieval surfaces the sources a query needs, measured by passage-anchored facet coverage.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

isundaylee/istaroth122026년 10월 20일 업데이트

isundaylee의 스킬 모두 보기

이 스킬의 문제 신고