[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81840":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":18,"hasPages":18,"topics":20,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},81840,"shape-ios","dxasm\u002Fshape-ios","dxasm","Reverse engineered Shape iOS native SDK",null,"Rust",31,1,26,0,4,5,40.4,false,"main",[],"2026-06-12 04:01:35","# shape-ios\n\nReverse engineered Shape iOS native SDK\n\n## Overview\n\nThis was written based on `APIGuard.framework` SDK `4.6.0` found on `com.southwest.iphoneprod`.  The current SDK version is `4.7.2`.\n\nWon't go too much in depth, but here's some info about it:\n\n\n### Headers\n\n```\nX-dUblrIiu-a\nX-dUblrIiu-b\nX-dUblrIiu-c\nX-dUblrIiu-d\nX-dUblrIiu-e\nX-dUblrIiu-f\nX-dUblrIiu-g\nX-dUblrIiu-z\n```\n\nOn app launch, there's an init request:\n\n```\nhttps:\u002F\u002Fmobile.southwest.com\u002Fsw_check\u002Fios\u002Finit?cid=ios_config\n```\n\nResponse:\n\n```json\n{\n  \"kernelId\": \"...\",\n  \"kernel\": \"...\",\n  \"ck\": {\n    \"a0\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"b1\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"c2\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"d3\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"e4\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"f5\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"g6\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"h7\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"i8\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"j9\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"k0\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"l1\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"m2\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"n3\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"o4\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"p5\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    },\n    \"q6\": {\n      \"c\": \"...\",\n      \"d\": \"...\"\n    }\n  },\n  \"sk\": \"...\"\n}\n```\n\n### Init response\n\n| Field      | Notes                                                                |\n|------------|----------------------------------------------------------------------|\n| `kernelId` | Kernel identifier.                                                   |\n| `kernel`   | JS VM (compared to the web version, mobile doesn't have WASM).       |\n| `ck`       | Lua VM bytecode. Instead of 1 bytecode, they split it into 17 parts. |\n| `sk`       | Undocumented. Possibly session key?!                                 |\n\n### Headers\n\n| Header                 | Source        | Notes                                                                                             |\n|------------------------|---------------|---------------------------------------------------------------------------------------------------|\n| `-a`                   | JS VM         | Main fingerprint payload. If the payload is too large, it's being split as `a0`, `a1`, `a2`, etc. |\n| `-b`, `-c`, `-d`, `-z` | JS VM         | Undocumented.                                                                                     |\n| `-e`                   | Native SDK    | Device fingerprinting. (also has `kernelId`).                                                     |\n| `-f`                   | Init response | Kernel identifier: `kernelId`.                                                                    |\n| `-g`                   | Native SDK VM | Device fingerprinting. Modified Lua VM; bytecode comes from `ck`.                                 |\n\n## Supported\n\n- `-e` header encode\u002Fdecode: `b;\u003Cciphertext>;\u003Cnonce>`\n\n## Usage\n\n### Decode\n\n```\ncargo run --release -- decode --data \"b;...\" --prefix \"X-dUblrIiu-\"\n```\n\n| Argument   | Required | Description                               |\n|------------|----------|-------------------------------------------|\n| `--data`   | yes      | Data to decode: `b;\u003Cciphertext>;\u003Cnonce>`. |\n| `--prefix` | yes      | Prefix used for key derivation.           |\n\n### Encode\n\n```\ncargo run --release -- encode --data \"...\" --nonce \u003Crandom-nonce> --prefix \"X-dUblrIiu-\"\n```\n\n| Argument   | Required | Description                                |\n|------------|----------|--------------------------------------------|\n| `--data`   | yes      | Data to encode.                            |\n| `--nonce`  | yes      | Random 32-byte nonce as 64 hex characters. |\n| `--prefix` | yes      | Prefix used for key derivation.            |","该项目是针对Shape iOS原生SDK的逆向工程实现。核心功能包括解析和模拟原始SDK的行为，如处理特定HTTP头部信息、初始化请求及其响应结构，其中涉及JavaScript虚拟机及Lua字节码的处理。技术上，项目使用Rust语言编写，提供了对SDK内部工作原理的理解，特别是关于设备指纹识别与会话管理的部分。适合于安全研究者或开发者在分析iOS应用的安全性、理解第三方库行为以及学习逆向工程技术时参考使用。",2,"2026-06-11 04:06:54","CREATED_QUERY"]