Skip to content

7. 加密调用链追踪图

┌─────────────────────────────────────────────────────────────────────┐
│                        iFlyCode 加密调用链                           │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ┌──────────────┐     encrypt(T,"RSA")[0]     ┌──────────────────┐ │
│  │  用户登录     │ ──────────────────────────→ │  RSA-1024        │ │
│  │  LoginService │    用户名 + 密码             │  PKCS#1 v1.5     │ │
│  └──────────────┘                              │  64-byte 分块    │ │
│        │                                       └────────┬─────────┘ │
│        │ loginByForm()                                  │           │
│        ▼                                                ▼           │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  POST /api/usercenter/v1/user/common/login                  │  │
│  │  body: { user: RSA(username), pwCode: RSA(password) }       │  │
│  │  query: { clientId: randomId }                              │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                     │
│  ┌──────────────┐     encryptSM4(JSON)       ┌──────────────────┐ │
│  │  权限缓存     │ ─────────────────────────→ │  SM4-128         │ │
│  │  UserController│   权限 JSON → 加密存储     │  ECB 模式        │ │
│  └──────────────┘                              │  PKCS#5 填充     │ │
│        │                                       └────────┬─────────┘ │
│        │ IndexedDB upsert/get                            │           │
│        ▼                                                ▼           │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  IndexedDB "permission"/"user"                              │  │
│  │  { user: username, info: SM4_Base64(permissions_json) }     │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                     │
│  ┌──────────────┐     encrypt(code,"SM4")   ┌──────────────────┐ │
│  │  代码监控     │ ─────────────────────────→ │  SM4-128         │ │
│  │  CodeMonitor  │   前缀代码 + 补全代码       │  ECB 模式        │ │
│  └──────────────┘                              │  PKCS#5 填充     │ │
│        │                                       └────────┬─────────┘ │
│        │ codeMonitorReport()                            │           │
│        ▼                                                ▼           │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  POST /api/starspark/v1/agent/collect/codeAccept            │  │
│  │  { encryptMode: "SM4", codeCollectDtoList: [{               │  │
│  │      prefixCodeList: [SM4(prefix)],                         │  │
│  │      completeCodeList: [SM4(completion)]                    │  │
│  │  }] }                                                       │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                     │
│  ┌──────────────┐     cryptoMd5(json)           ┌──────────────────┐ │
│  │  代码补全缓存 │ ──────────────────────────→  │  MD5             │ │
│  │  GenerateMediator│  {prefix,suffix,lang}     │  128-bit         │ │
│  └──────────────┘                              │  Hex 输出        │ │
│                                                └────────┬─────────┘ │
│  ┌──────────────┐     cryptoMd5(content)                 │         │
│  │  代码注释     │ ──────────────────────────→            │         │
│  │  CommentHandler│  文件内容 MD5                        │         │
│  └──────────────┘                                        │         │
│                                                          ▼         │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  内存缓存 Map / WebView 数据传输                             │  │
│  │  key: MD5(prefix+suffix+lang) → value: completion result   │  │
│  │  md5: MD5(file_content) → 文件版本标识                       │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                     │
│  ┌──────────────┐     [预留] encrypt(d,"SM2")  ┌──────────────────┐ │
│  │  SM2 接口     │ ──────────────────────────→ │  SM2-256         │ │
│  │  (未使用)     │                              │  C1C3C2 格式     │ │
│  └──────────────┘                              └──────────────────┘ │
│                                                                     │
│  ┌──────────────┐     [预留] encrypt(d,"AES")   ┌──────────────────┐ │
│  │  AES 接口     │ ──────────────────────────→ │  AES-256-CTR     │ │
│  │  (未使用)     │                              │  固定 IV         │ │
│  └──────────────┘                              └──────────────────┘ │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

8. 加密数据流图

8.1 RSA 登录加密数据流

┌──────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────┐
│ 用户输入  │    │ UTF-8 编码   │    │ 64B 分块     │    │ RSA PKCS#1   │    │ Base64   │
│ username │───→│ Buffer.from  │───→│ slice(0,64)  │───→│ publicEncrypt│───→│ encode   │──→ [0]
│ password │    │ ("utf8")     │    │ slice(64,128)│    │ (PUB_KEY,    │    │ per block│
└──────────┘    └──────────────┘    │ ...          │    │  PKCS1_PAD)  │    └──────────┘
                                    └──────────────┘    └──────────────┘


                                                    POST /api/usercenter/v1/user/common/login
                                                    { user: base64_rsa_username,
                                                      pwCode: base64_rsa_password }
                                                    ?clientId=randomId

8.2 SM4 权限缓存数据流

┌──────────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────┐
│ 服务器权限数据    │    │ JSON 序列化  │    │ SM4 ECB      │    │ Hex → Base64 │    │IndexedDB │
│ getUserPermission│───→│ JSON.stringify│───→│ encrypt      │───→│ Buffer.from  │───→│ upsert   │
│ (API 响应)       │    │              │    │ (SM4_KEY,    │    │ (hex,"hex")  │    │          │
└──────────────────┘    └──────────────┘    │  pkcs#5)     │    │ .toString    │    └──────────┘
                                            └──────────────┘    │ ("base64")   │
                                                                └──────────────┘

┌──────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│IndexedDB │    │ Base64 → Hex │    │ SM4 ECB      │    │ PKCS#5 去填充│    │ JSON 反序列化│
│ get      │───→│ Buffer.from  │───→│ decrypt      │───→│ (自动)       │───→│ JSON.parse   │──→ 权限对象
│          │    │ (b64,"base64")│    │ (SM4_KEY)    │    │              │    │              │
└──────────┘    └──────────────┘    └──────────────┘    └──────────────┘    └──────────────┘

8.3 SM4 代码监控上报数据流

┌──────────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ 代码补全事件      │    │ 提取代码文本  │    │ SM4 ECB 加密 │    │ 构造上报数据  │
│ CodeMonitor      │───→│ prefixCode   │───→│ encrypt      │───→│ {            │
│ .codeReport()    │    │ completeCode │    │ (SM4_KEY,    │    │   encryptMode│
└──────────────────┘    └──────────────┘    │  pkcs#5)     │    │   :"SM4",    │
                                            └──────────────┘    │   prefixCode │
                                                                │   List:[SM4],│
                                                                │   completeCo │
                                                                │   deList:[SM4]│
                                                                │ }            │
                                                                └──────┬───────┘


                                                    POST /api/starspark/v1/agent/collect/codeAccept

8.4 MD5 缓存键数据流

┌──────────────────┐    ┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ 代码补全请求      │    │ 构造键对象    │    │ JSON 序列化  │    │ MD5 哈希     │
│ codeGenerate     │───→│ {prefix,     │───→│ json2str()   │───→│ createHash   │──→ 32-char Hex
│ Mediator         │    │  suffix,     │    │              │    │ ("md5")      │    缓存键
└──────────────────┘    │  lang}       │    └──────────────┘    └──────────────┘
                        └──────────────┘

本项目仅供学习研究,逆向分析内容归原厂商所有。