CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

flutter

Flutter app reversing and SSL pinning bypass — reFlutter Dart-AOT patching, BoringSSL bypass, libapp.so static analysis in Ghidra/radare2, Dart snapshot dump, and iOS Flutter.framework notes.

Quality

77%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Critical

Do not install without reviewing

Fix and improve this skill with Tessl

tessl review fix ./packages/decepticon/decepticon/skills/standard/mobile/flutter/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

71%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A strong, command-dense playbook with excellent domain-specific detail (version-specific breaking changes, patch bytes, tool caveats) and a clearly sequenced workflow with expected outputs. Weaknesses are the duplicated BoringSSL explanation, the unprovided proxy-redirect.js, a missing verification step around the risky manual binary patch, and a monolithic single-file layout that inlines reference-worthy material.

Suggestions

Deduplicate the ssl_crypto_x509_session_verify_cert_chain explanation (Steps 2 and 3 both describe it) into one mechanism section.

Provide the proxy-redirect.js Frida script content (or a bundle file), and add a verify step to the manual binary patch — e.g., disassemble the function before patching and hexdump-verify the 8 written bytes after.

Split iOS patching, the Dart snapshot dump, and the severity/OPSEC tables into one-level-deep reference files (e.g., references/ios.md, references/snapshot-dump.md) and link them from a leaner SKILL.md overview.

DimensionReasoningScore

Conciseness

The body is command-dense and almost exclusively contains non-generic, domain-specific knowledge Claude would not already know (Flutter 3.24.0 proxy-IP removal, port 8083 default, MOV W0, #1 / RET patch bytes '20 00 80 52 C0 03 5F D6', snapshot-format caveats). It falls short of score 5 because the BoringSSL mechanism is explained twice — 'reFlutter patches the ssl_crypto_x509_session_verify_cert_chain function... to always return true' in Step 2 and again nearly verbatim in Step 3 — and sections like the severity table repeat information. It is well above score 3 since there is no padding or explanation of concepts Claude already knows.

4 / 5

Actionability

Nearly all guidance is copy-paste executable: 'reflutter base.apk', 'java -jar uber-apk-signer.jar --allowResign -a release.RE.apk -o /tmp/', 'r2 -qc 'iz~https'...', and a concrete Python patch snippet. It stops short of score 5 because 'proxy-redirect.js' is referenced but never provided ('hooks connect() syscall, redirects to Burp IP' is effectively pseudocode), and the manual patch uses unresolved placeholders ('f.seek(<offset>)') without explaining how to locate the offset precisely.

4 / 5

Workflow Clarity

Steps 1-6 are clearly sequenced with expected outputs at key checkpoints ('Expect: ~1 class, LoadLibrary("app"), nothing useful'; 'Launch app — HTTPS traffic appears in Burp') and version-branching for Flutter <=3.23 vs >=3.24. It does not reach score 5 because the manual binary patch path has no validation loop (no disassemble-before/verify-after step despite the acknowledged 'wrong offset crashes the app' risk), and the iOS path ends at 'check reFlutter README for current support' without a fallback. The destructive-operation cap at 3 does not apply since the primary reflutter workflow is non-destructive and includes verification (traffic visible in Burp).

4 / 5

Progressive Disclosure

The skill is a single ~250-line file with no bundle files (no references/, scripts/, or assets/ exist) and no internal navigation to detail material. Structure is present (numbered steps, clear headers, a References section of external URLs), but several sections — iOS Flutter.framework patching, Dart snapshot dump, plugin identification, the severity table, and OPSEC notes — are inlined content that would fit better in one-level-deep reference files per the score-3 anchor ('content that should be separate is inline'). It does not reach score 4 because the monolithic layout forces the full playbook into context regardless of which sub-task applies.

3 / 5

Total

15

/

20

Passed

Description

75%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A highly specific, well-scoped description that names concrete capabilities and distinct technical triggers. Its main weakness is the absence of an explicit 'Use when...' trigger clause, which caps completeness; adding one (e.g., 'Use when a mobile APK/IPA contains libapp.so/Flutter.framework and jadx shows only an empty Java wrapper') would raise it substantially.

Suggestions

Add an explicit 'Use when...' clause to the description, e.g., 'Use when jadx on an APK/IPA yields only a thin Java/ObjC wrapper and lib/arm64-v8a contains libapp.so, or when the user mentions Flutter, SSL pinning in a Flutter app, or libapp.so.'

Include a couple of natural user phrasings such as 'intercept Flutter HTTPS traffic' or 'MITM Flutter app' alongside the tool jargon to broaden trigger coverage.

Consider mentioning the proxy/Burp workflow in the description since traffic interception is the skill's primary use case.

DimensionReasoningScore

Specificity

The description enumerates multiple concrete, comprehensive actions: 'reFlutter Dart-AOT patching, BoringSSL bypass, libapp.so static analysis in Ghidra/radare2, Dart snapshot dump, and iOS Flutter.framework notes'. This matches the score-5 anchor (multiple specific concrete actions, comprehensive coverage); it exceeds score 4 because coverage spans identification, bypass, static analysis, and platform-specific notes with no real gaps.

5 / 5

Completeness

The 'what' is explicit and concrete (reversing, pinning bypass, static analysis, snapshot dump), but the description field contains no 'Use when...' clause or equivalent explicit trigger guidance — the 'when' is entirely absent rather than merely weakly implied. Per the judging guideline, a missing 'Use when...' clause caps completeness at 3; it cannot score 4 because the 'when' is not present in any form.

3 / 5

Trigger Term Quality

Strong natural keyword coverage including file names and tool names users would actually say: 'Flutter', 'SSL pinning bypass', 'libapp.so', 'reFlutter', 'BoringSSL', 'Ghidra/radare2', 'Flutter.framework'. Falls short of the score-5 anchor because common user phrasings like 'intercept Flutter traffic', 'MITM', 'Burp', or 'APK' are absent; it is clearly above score 3 since far more than 'some relevant keywords' are present.

4 / 5

Distinctiveness Conflict Risk

Clear niche with distinct triggers: 'libapp.so', 'reFlutter', 'BoringSSL', 'Flutter.framework', 'Dart snapshot' are unambiguous Flutter-reversing markers that no generic mobile or static-analysis skill would claim. Minimal conflict risk with related Android/iOS skills since the description explicitly frames itself around Flutter-specific artifacts.

5 / 5

Total

17

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

Total

15

/

16

Passed

Repository

PurpleAILAB/Decepticon

Path

packages/decepticon/decepticon/skills/standard/mobile/flutter/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.