├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md └── src └── main.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "aes" 22 | version = "0.8.4" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" 25 | dependencies = [ 26 | "cfg-if", 27 | "cipher", 28 | "cpufeatures", 29 | ] 30 | 31 | [[package]] 32 | name = "ahash" 33 | version = "0.8.11" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 36 | dependencies = [ 37 | "cfg-if", 38 | "once_cell", 39 | "version_check", 40 | "zerocopy", 41 | ] 42 | 43 | [[package]] 44 | name = "aho-corasick" 45 | version = "1.1.3" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 48 | dependencies = [ 49 | "memchr", 50 | ] 51 | 52 | [[package]] 53 | name = "arbitrary" 54 | version = "1.4.1" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" 57 | dependencies = [ 58 | "derive_arbitrary", 59 | ] 60 | 61 | [[package]] 62 | name = "arrayvec" 63 | version = "0.7.6" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 66 | 67 | [[package]] 68 | name = "atomic-waker" 69 | version = "1.1.2" 70 | source = "registry+https://github.com/rust-lang/crates.io-index" 71 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 72 | 73 | [[package]] 74 | name = "autocfg" 75 | version = "1.4.0" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 78 | 79 | [[package]] 80 | name = "backtrace" 81 | version = "0.3.74" 82 | source = "registry+https://github.com/rust-lang/crates.io-index" 83 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 84 | dependencies = [ 85 | "addr2line", 86 | "cfg-if", 87 | "libc", 88 | "miniz_oxide", 89 | "object", 90 | "rustc-demangle", 91 | "windows-targets", 92 | ] 93 | 94 | [[package]] 95 | name = "base64" 96 | version = "0.22.1" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 99 | 100 | [[package]] 101 | name = "binary-merge" 102 | version = "0.1.2" 103 | source = "registry+https://github.com/rust-lang/crates.io-index" 104 | checksum = "597bb81c80a54b6a4381b23faba8d7774b144c94cbd1d6fe3f1329bd776554ab" 105 | 106 | [[package]] 107 | name = "bitflags" 108 | version = "1.3.2" 109 | source = "registry+https://github.com/rust-lang/crates.io-index" 110 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 111 | 112 | [[package]] 113 | name = "bitflags" 114 | version = "2.6.0" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 117 | 118 | [[package]] 119 | name = "block-buffer" 120 | version = "0.10.4" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 123 | dependencies = [ 124 | "generic-array", 125 | ] 126 | 127 | [[package]] 128 | name = "block-modes" 129 | version = "0.9.1" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | checksum = "9e2211b0817f061502a8dd9f11a37e879e79763e3c698d2418cf824d8cb2f21e" 132 | 133 | [[package]] 134 | name = "brownstone" 135 | version = "3.0.0" 136 | source = "registry+https://github.com/rust-lang/crates.io-index" 137 | checksum = "c5839ee4f953e811bfdcf223f509cb2c6a3e1447959b0bff459405575bc17f22" 138 | dependencies = [ 139 | "arrayvec", 140 | ] 141 | 142 | [[package]] 143 | name = "bumpalo" 144 | version = "3.16.0" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 147 | 148 | [[package]] 149 | name = "bytes" 150 | version = "1.8.0" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" 153 | 154 | [[package]] 155 | name = "cc" 156 | version = "1.1.37" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "40545c26d092346d8a8dab71ee48e7685a7a9cba76e634790c215b41a4a7b4cf" 159 | dependencies = [ 160 | "jobserver", 161 | "libc", 162 | "shlex", 163 | ] 164 | 165 | [[package]] 166 | name = "cfg-if" 167 | version = "1.0.0" 168 | source = "registry+https://github.com/rust-lang/crates.io-index" 169 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 170 | 171 | [[package]] 172 | name = "cipher" 173 | version = "0.4.4" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 176 | dependencies = [ 177 | "crypto-common", 178 | "inout", 179 | ] 180 | 181 | [[package]] 182 | name = "core-foundation" 183 | version = "0.9.4" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 186 | dependencies = [ 187 | "core-foundation-sys", 188 | "libc", 189 | ] 190 | 191 | [[package]] 192 | name = "core-foundation-sys" 193 | version = "0.8.7" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 196 | 197 | [[package]] 198 | name = "cpufeatures" 199 | version = "0.2.15" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" 202 | dependencies = [ 203 | "libc", 204 | ] 205 | 206 | [[package]] 207 | name = "crc32fast" 208 | version = "1.4.2" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 211 | dependencies = [ 212 | "cfg-if", 213 | ] 214 | 215 | [[package]] 216 | name = "crossbeam-utils" 217 | version = "0.8.20" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 220 | 221 | [[package]] 222 | name = "crypt_decrypt_memory" 223 | version = "0.1.0" 224 | dependencies = [ 225 | "aes", 226 | "block-modes", 227 | "cipher", 228 | "kdmp-parser", 229 | "libaes", 230 | "reqwest", 231 | "sha1", 232 | "symbolic", 233 | "windows", 234 | ] 235 | 236 | [[package]] 237 | name = "crypto-common" 238 | version = "0.1.6" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 241 | dependencies = [ 242 | "generic-array", 243 | "typenum", 244 | ] 245 | 246 | [[package]] 247 | name = "debugid" 248 | version = "0.8.0" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" 251 | dependencies = [ 252 | "serde", 253 | "uuid", 254 | ] 255 | 256 | [[package]] 257 | name = "derive_arbitrary" 258 | version = "1.4.1" 259 | source = "registry+https://github.com/rust-lang/crates.io-index" 260 | checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" 261 | dependencies = [ 262 | "proc-macro2", 263 | "quote", 264 | "syn", 265 | ] 266 | 267 | [[package]] 268 | name = "digest" 269 | version = "0.10.7" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 272 | dependencies = [ 273 | "block-buffer", 274 | "crypto-common", 275 | ] 276 | 277 | [[package]] 278 | name = "displaydoc" 279 | version = "0.2.5" 280 | source = "registry+https://github.com/rust-lang/crates.io-index" 281 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 282 | dependencies = [ 283 | "proc-macro2", 284 | "quote", 285 | "syn", 286 | ] 287 | 288 | [[package]] 289 | name = "elementtree" 290 | version = "1.2.3" 291 | source = "registry+https://github.com/rust-lang/crates.io-index" 292 | checksum = "3efd4742acf458718a6456e0adf0b4d734d6b783e452bbf1ac36bf31f4085cb3" 293 | dependencies = [ 294 | "string_cache", 295 | ] 296 | 297 | [[package]] 298 | name = "elsa" 299 | version = "1.10.0" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | checksum = "d98e71ae4df57d214182a2e5cb90230c0192c6ddfcaa05c36453d46a54713e10" 302 | dependencies = [ 303 | "stable_deref_trait", 304 | ] 305 | 306 | [[package]] 307 | name = "encoding_rs" 308 | version = "0.8.35" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 311 | dependencies = [ 312 | "cfg-if", 313 | ] 314 | 315 | [[package]] 316 | name = "equivalent" 317 | version = "1.0.1" 318 | source = "registry+https://github.com/rust-lang/crates.io-index" 319 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 320 | 321 | [[package]] 322 | name = "errno" 323 | version = "0.3.9" 324 | source = "registry+https://github.com/rust-lang/crates.io-index" 325 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 326 | dependencies = [ 327 | "libc", 328 | "windows-sys 0.52.0", 329 | ] 330 | 331 | [[package]] 332 | name = "fallible-iterator" 333 | version = "0.2.0" 334 | source = "registry+https://github.com/rust-lang/crates.io-index" 335 | checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" 336 | 337 | [[package]] 338 | name = "fallible-iterator" 339 | version = "0.3.0" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" 342 | 343 | [[package]] 344 | name = "fastrand" 345 | version = "2.2.0" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" 348 | 349 | [[package]] 350 | name = "flate2" 351 | version = "1.0.34" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" 354 | dependencies = [ 355 | "crc32fast", 356 | "miniz_oxide", 357 | ] 358 | 359 | [[package]] 360 | name = "fnv" 361 | version = "1.0.7" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 364 | 365 | [[package]] 366 | name = "foreign-types" 367 | version = "0.3.2" 368 | source = "registry+https://github.com/rust-lang/crates.io-index" 369 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 370 | dependencies = [ 371 | "foreign-types-shared", 372 | ] 373 | 374 | [[package]] 375 | name = "foreign-types-shared" 376 | version = "0.1.1" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 379 | 380 | [[package]] 381 | name = "form_urlencoded" 382 | version = "1.2.1" 383 | source = "registry+https://github.com/rust-lang/crates.io-index" 384 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 385 | dependencies = [ 386 | "percent-encoding", 387 | ] 388 | 389 | [[package]] 390 | name = "futures-channel" 391 | version = "0.3.31" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 394 | dependencies = [ 395 | "futures-core", 396 | "futures-sink", 397 | ] 398 | 399 | [[package]] 400 | name = "futures-core" 401 | version = "0.3.31" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 404 | 405 | [[package]] 406 | name = "futures-io" 407 | version = "0.3.31" 408 | source = "registry+https://github.com/rust-lang/crates.io-index" 409 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 410 | 411 | [[package]] 412 | name = "futures-sink" 413 | version = "0.3.31" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 416 | 417 | [[package]] 418 | name = "futures-task" 419 | version = "0.3.31" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 422 | 423 | [[package]] 424 | name = "futures-util" 425 | version = "0.3.31" 426 | source = "registry+https://github.com/rust-lang/crates.io-index" 427 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 428 | dependencies = [ 429 | "futures-core", 430 | "futures-io", 431 | "futures-sink", 432 | "futures-task", 433 | "memchr", 434 | "pin-project-lite", 435 | "pin-utils", 436 | "slab", 437 | ] 438 | 439 | [[package]] 440 | name = "generic-array" 441 | version = "0.14.7" 442 | source = "registry+https://github.com/rust-lang/crates.io-index" 443 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 444 | dependencies = [ 445 | "typenum", 446 | "version_check", 447 | ] 448 | 449 | [[package]] 450 | name = "getrandom" 451 | version = "0.2.15" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 454 | dependencies = [ 455 | "cfg-if", 456 | "libc", 457 | "wasi", 458 | ] 459 | 460 | [[package]] 461 | name = "gimli" 462 | version = "0.31.1" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 465 | dependencies = [ 466 | "fallible-iterator 0.3.0", 467 | "stable_deref_trait", 468 | ] 469 | 470 | [[package]] 471 | name = "goblin" 472 | version = "0.8.2" 473 | source = "registry+https://github.com/rust-lang/crates.io-index" 474 | checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" 475 | dependencies = [ 476 | "log", 477 | "plain", 478 | "scroll 0.12.0", 479 | ] 480 | 481 | [[package]] 482 | name = "h2" 483 | version = "0.4.6" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" 486 | dependencies = [ 487 | "atomic-waker", 488 | "bytes", 489 | "fnv", 490 | "futures-core", 491 | "futures-sink", 492 | "http", 493 | "indexmap", 494 | "slab", 495 | "tokio", 496 | "tokio-util", 497 | "tracing", 498 | ] 499 | 500 | [[package]] 501 | name = "hashbrown" 502 | version = "0.14.5" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 505 | dependencies = [ 506 | "ahash", 507 | "serde", 508 | ] 509 | 510 | [[package]] 511 | name = "hashbrown" 512 | version = "0.15.1" 513 | source = "registry+https://github.com/rust-lang/crates.io-index" 514 | checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" 515 | 516 | [[package]] 517 | name = "hermit-abi" 518 | version = "0.3.9" 519 | source = "registry+https://github.com/rust-lang/crates.io-index" 520 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 521 | 522 | [[package]] 523 | name = "http" 524 | version = "1.1.0" 525 | source = "registry+https://github.com/rust-lang/crates.io-index" 526 | checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" 527 | dependencies = [ 528 | "bytes", 529 | "fnv", 530 | "itoa", 531 | ] 532 | 533 | [[package]] 534 | name = "http-body" 535 | version = "1.0.1" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 538 | dependencies = [ 539 | "bytes", 540 | "http", 541 | ] 542 | 543 | [[package]] 544 | name = "http-body-util" 545 | version = "0.1.2" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" 548 | dependencies = [ 549 | "bytes", 550 | "futures-util", 551 | "http", 552 | "http-body", 553 | "pin-project-lite", 554 | ] 555 | 556 | [[package]] 557 | name = "httparse" 558 | version = "1.9.5" 559 | source = "registry+https://github.com/rust-lang/crates.io-index" 560 | checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" 561 | 562 | [[package]] 563 | name = "hyper" 564 | version = "1.5.0" 565 | source = "registry+https://github.com/rust-lang/crates.io-index" 566 | checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" 567 | dependencies = [ 568 | "bytes", 569 | "futures-channel", 570 | "futures-util", 571 | "h2", 572 | "http", 573 | "http-body", 574 | "httparse", 575 | "itoa", 576 | "pin-project-lite", 577 | "smallvec", 578 | "tokio", 579 | "want", 580 | ] 581 | 582 | [[package]] 583 | name = "hyper-rustls" 584 | version = "0.27.3" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" 587 | dependencies = [ 588 | "futures-util", 589 | "http", 590 | "hyper", 591 | "hyper-util", 592 | "rustls", 593 | "rustls-pki-types", 594 | "tokio", 595 | "tokio-rustls", 596 | "tower-service", 597 | ] 598 | 599 | [[package]] 600 | name = "hyper-tls" 601 | version = "0.6.0" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 604 | dependencies = [ 605 | "bytes", 606 | "http-body-util", 607 | "hyper", 608 | "hyper-util", 609 | "native-tls", 610 | "tokio", 611 | "tokio-native-tls", 612 | "tower-service", 613 | ] 614 | 615 | [[package]] 616 | name = "hyper-util" 617 | version = "0.1.10" 618 | source = "registry+https://github.com/rust-lang/crates.io-index" 619 | checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" 620 | dependencies = [ 621 | "bytes", 622 | "futures-channel", 623 | "futures-util", 624 | "http", 625 | "http-body", 626 | "hyper", 627 | "pin-project-lite", 628 | "socket2", 629 | "tokio", 630 | "tower-service", 631 | "tracing", 632 | ] 633 | 634 | [[package]] 635 | name = "icu_collections" 636 | version = "1.5.0" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 639 | dependencies = [ 640 | "displaydoc", 641 | "yoke", 642 | "zerofrom", 643 | "zerovec", 644 | ] 645 | 646 | [[package]] 647 | name = "icu_locid" 648 | version = "1.5.0" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 651 | dependencies = [ 652 | "displaydoc", 653 | "litemap", 654 | "tinystr", 655 | "writeable", 656 | "zerovec", 657 | ] 658 | 659 | [[package]] 660 | name = "icu_locid_transform" 661 | version = "1.5.0" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 664 | dependencies = [ 665 | "displaydoc", 666 | "icu_locid", 667 | "icu_locid_transform_data", 668 | "icu_provider", 669 | "tinystr", 670 | "zerovec", 671 | ] 672 | 673 | [[package]] 674 | name = "icu_locid_transform_data" 675 | version = "1.5.0" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 678 | 679 | [[package]] 680 | name = "icu_normalizer" 681 | version = "1.5.0" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 684 | dependencies = [ 685 | "displaydoc", 686 | "icu_collections", 687 | "icu_normalizer_data", 688 | "icu_properties", 689 | "icu_provider", 690 | "smallvec", 691 | "utf16_iter", 692 | "utf8_iter", 693 | "write16", 694 | "zerovec", 695 | ] 696 | 697 | [[package]] 698 | name = "icu_normalizer_data" 699 | version = "1.5.0" 700 | source = "registry+https://github.com/rust-lang/crates.io-index" 701 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 702 | 703 | [[package]] 704 | name = "icu_properties" 705 | version = "1.5.1" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 708 | dependencies = [ 709 | "displaydoc", 710 | "icu_collections", 711 | "icu_locid_transform", 712 | "icu_properties_data", 713 | "icu_provider", 714 | "tinystr", 715 | "zerovec", 716 | ] 717 | 718 | [[package]] 719 | name = "icu_properties_data" 720 | version = "1.5.0" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 723 | 724 | [[package]] 725 | name = "icu_provider" 726 | version = "1.5.0" 727 | source = "registry+https://github.com/rust-lang/crates.io-index" 728 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 729 | dependencies = [ 730 | "displaydoc", 731 | "icu_locid", 732 | "icu_provider_macros", 733 | "stable_deref_trait", 734 | "tinystr", 735 | "writeable", 736 | "yoke", 737 | "zerofrom", 738 | "zerovec", 739 | ] 740 | 741 | [[package]] 742 | name = "icu_provider_macros" 743 | version = "1.5.0" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 746 | dependencies = [ 747 | "proc-macro2", 748 | "quote", 749 | "syn", 750 | ] 751 | 752 | [[package]] 753 | name = "idna" 754 | version = "1.0.3" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 757 | dependencies = [ 758 | "idna_adapter", 759 | "smallvec", 760 | "utf8_iter", 761 | ] 762 | 763 | [[package]] 764 | name = "idna_adapter" 765 | version = "1.2.0" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 768 | dependencies = [ 769 | "icu_normalizer", 770 | "icu_properties", 771 | ] 772 | 773 | [[package]] 774 | name = "indent_write" 775 | version = "2.2.0" 776 | source = "registry+https://github.com/rust-lang/crates.io-index" 777 | checksum = "0cfe9645a18782869361d9c8732246be7b410ad4e919d3609ebabdac00ba12c3" 778 | 779 | [[package]] 780 | name = "indexmap" 781 | version = "2.6.0" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" 784 | dependencies = [ 785 | "equivalent", 786 | "hashbrown 0.15.1", 787 | "serde", 788 | ] 789 | 790 | [[package]] 791 | name = "inout" 792 | version = "0.1.3" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 795 | dependencies = [ 796 | "generic-array", 797 | ] 798 | 799 | [[package]] 800 | name = "inplace-vec-builder" 801 | version = "0.1.1" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "cf64c2edc8226891a71f127587a2861b132d2b942310843814d5001d99a1d307" 804 | dependencies = [ 805 | "smallvec", 806 | ] 807 | 808 | [[package]] 809 | name = "ipnet" 810 | version = "2.10.1" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" 813 | 814 | [[package]] 815 | name = "itoa" 816 | version = "1.0.11" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 819 | 820 | [[package]] 821 | name = "jobserver" 822 | version = "0.1.32" 823 | source = "registry+https://github.com/rust-lang/crates.io-index" 824 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 825 | dependencies = [ 826 | "libc", 827 | ] 828 | 829 | [[package]] 830 | name = "joinery" 831 | version = "2.1.0" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "72167d68f5fce3b8655487b8038691a3c9984ee769590f93f2a631f4ad64e4f5" 834 | 835 | [[package]] 836 | name = "js-sys" 837 | version = "0.3.72" 838 | source = "registry+https://github.com/rust-lang/crates.io-index" 839 | checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" 840 | dependencies = [ 841 | "wasm-bindgen", 842 | ] 843 | 844 | [[package]] 845 | name = "kdmp-parser" 846 | version = "0.5.0" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "9020e118f80785d03e42307666fbbff8cb5cf11ac06f8a662c528191ac040404" 849 | dependencies = [ 850 | "bitflags 2.6.0", 851 | "thiserror", 852 | ] 853 | 854 | [[package]] 855 | name = "lazy_static" 856 | version = "1.5.0" 857 | source = "registry+https://github.com/rust-lang/crates.io-index" 858 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 859 | 860 | [[package]] 861 | name = "leb128" 862 | version = "0.2.5" 863 | source = "registry+https://github.com/rust-lang/crates.io-index" 864 | checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" 865 | 866 | [[package]] 867 | name = "libaes" 868 | version = "0.7.0" 869 | source = "registry+https://github.com/rust-lang/crates.io-index" 870 | checksum = "82903360c009b816f5ab72a9b68158c27c301ee2c3f20655b55c5e589e7d3bb7" 871 | 872 | [[package]] 873 | name = "libc" 874 | version = "0.2.162" 875 | source = "registry+https://github.com/rust-lang/crates.io-index" 876 | checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" 877 | 878 | [[package]] 879 | name = "linux-raw-sys" 880 | version = "0.4.14" 881 | source = "registry+https://github.com/rust-lang/crates.io-index" 882 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 883 | 884 | [[package]] 885 | name = "litemap" 886 | version = "0.7.3" 887 | source = "registry+https://github.com/rust-lang/crates.io-index" 888 | checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" 889 | 890 | [[package]] 891 | name = "lock_api" 892 | version = "0.4.12" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 895 | dependencies = [ 896 | "autocfg", 897 | "scopeguard", 898 | ] 899 | 900 | [[package]] 901 | name = "lockfree-object-pool" 902 | version = "0.1.6" 903 | source = "registry+https://github.com/rust-lang/crates.io-index" 904 | checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" 905 | 906 | [[package]] 907 | name = "log" 908 | version = "0.4.22" 909 | source = "registry+https://github.com/rust-lang/crates.io-index" 910 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 911 | 912 | [[package]] 913 | name = "maybe-owned" 914 | version = "0.3.4" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" 917 | 918 | [[package]] 919 | name = "memchr" 920 | version = "2.7.4" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 923 | 924 | [[package]] 925 | name = "memmap2" 926 | version = "0.9.5" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" 929 | dependencies = [ 930 | "libc", 931 | ] 932 | 933 | [[package]] 934 | name = "mime" 935 | version = "0.3.17" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 938 | 939 | [[package]] 940 | name = "minimal-lexical" 941 | version = "0.2.1" 942 | source = "registry+https://github.com/rust-lang/crates.io-index" 943 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 944 | 945 | [[package]] 946 | name = "miniz_oxide" 947 | version = "0.8.0" 948 | source = "registry+https://github.com/rust-lang/crates.io-index" 949 | checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" 950 | dependencies = [ 951 | "adler2", 952 | ] 953 | 954 | [[package]] 955 | name = "mio" 956 | version = "1.0.2" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" 959 | dependencies = [ 960 | "hermit-abi", 961 | "libc", 962 | "wasi", 963 | "windows-sys 0.52.0", 964 | ] 965 | 966 | [[package]] 967 | name = "native-tls" 968 | version = "0.2.12" 969 | source = "registry+https://github.com/rust-lang/crates.io-index" 970 | checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" 971 | dependencies = [ 972 | "libc", 973 | "log", 974 | "openssl", 975 | "openssl-probe", 976 | "openssl-sys", 977 | "schannel", 978 | "security-framework", 979 | "security-framework-sys", 980 | "tempfile", 981 | ] 982 | 983 | [[package]] 984 | name = "new_debug_unreachable" 985 | version = "1.0.6" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 988 | 989 | [[package]] 990 | name = "nom" 991 | version = "7.1.3" 992 | source = "registry+https://github.com/rust-lang/crates.io-index" 993 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 994 | dependencies = [ 995 | "memchr", 996 | "minimal-lexical", 997 | ] 998 | 999 | [[package]] 1000 | name = "nom-supreme" 1001 | version = "0.8.0" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | checksum = "2bd3ae6c901f1959588759ff51c95d24b491ecb9ff91aa9c2ef4acc5b1dcab27" 1004 | dependencies = [ 1005 | "brownstone", 1006 | "indent_write", 1007 | "joinery", 1008 | "memchr", 1009 | "nom", 1010 | ] 1011 | 1012 | [[package]] 1013 | name = "object" 1014 | version = "0.36.5" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" 1017 | dependencies = [ 1018 | "memchr", 1019 | ] 1020 | 1021 | [[package]] 1022 | name = "once_cell" 1023 | version = "1.20.2" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 1026 | 1027 | [[package]] 1028 | name = "openssl" 1029 | version = "0.10.68" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" 1032 | dependencies = [ 1033 | "bitflags 2.6.0", 1034 | "cfg-if", 1035 | "foreign-types", 1036 | "libc", 1037 | "once_cell", 1038 | "openssl-macros", 1039 | "openssl-sys", 1040 | ] 1041 | 1042 | [[package]] 1043 | name = "openssl-macros" 1044 | version = "0.1.1" 1045 | source = "registry+https://github.com/rust-lang/crates.io-index" 1046 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1047 | dependencies = [ 1048 | "proc-macro2", 1049 | "quote", 1050 | "syn", 1051 | ] 1052 | 1053 | [[package]] 1054 | name = "openssl-probe" 1055 | version = "0.1.5" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1058 | 1059 | [[package]] 1060 | name = "openssl-sys" 1061 | version = "0.9.104" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" 1064 | dependencies = [ 1065 | "cc", 1066 | "libc", 1067 | "pkg-config", 1068 | "vcpkg", 1069 | ] 1070 | 1071 | [[package]] 1072 | name = "parking_lot" 1073 | version = "0.12.3" 1074 | source = "registry+https://github.com/rust-lang/crates.io-index" 1075 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1076 | dependencies = [ 1077 | "lock_api", 1078 | "parking_lot_core", 1079 | ] 1080 | 1081 | [[package]] 1082 | name = "parking_lot_core" 1083 | version = "0.9.10" 1084 | source = "registry+https://github.com/rust-lang/crates.io-index" 1085 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1086 | dependencies = [ 1087 | "cfg-if", 1088 | "libc", 1089 | "redox_syscall", 1090 | "smallvec", 1091 | "windows-targets", 1092 | ] 1093 | 1094 | [[package]] 1095 | name = "pdb" 1096 | version = "0.8.0" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | checksum = "82040a392923abe6279c00ab4aff62d5250d1c8555dc780e4b02783a7aa74863" 1099 | dependencies = [ 1100 | "fallible-iterator 0.2.0", 1101 | "scroll 0.11.0", 1102 | "uuid", 1103 | ] 1104 | 1105 | [[package]] 1106 | name = "pdb-addr2line" 1107 | version = "0.10.4" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "c4e89a9f2f40b2389ba6da0814c8044bf942bece03dffa1514f84e3b525f4f9a" 1110 | dependencies = [ 1111 | "bitflags 1.3.2", 1112 | "elsa", 1113 | "maybe-owned", 1114 | "pdb", 1115 | "range-collections", 1116 | "thiserror", 1117 | ] 1118 | 1119 | [[package]] 1120 | name = "percent-encoding" 1121 | version = "2.3.1" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1124 | 1125 | [[package]] 1126 | name = "phf_shared" 1127 | version = "0.10.0" 1128 | source = "registry+https://github.com/rust-lang/crates.io-index" 1129 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" 1130 | dependencies = [ 1131 | "siphasher", 1132 | ] 1133 | 1134 | [[package]] 1135 | name = "pin-project-lite" 1136 | version = "0.2.15" 1137 | source = "registry+https://github.com/rust-lang/crates.io-index" 1138 | checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" 1139 | 1140 | [[package]] 1141 | name = "pin-utils" 1142 | version = "0.1.0" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1145 | 1146 | [[package]] 1147 | name = "pkg-config" 1148 | version = "0.3.31" 1149 | source = "registry+https://github.com/rust-lang/crates.io-index" 1150 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 1151 | 1152 | [[package]] 1153 | name = "plain" 1154 | version = "0.2.3" 1155 | source = "registry+https://github.com/rust-lang/crates.io-index" 1156 | checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" 1157 | 1158 | [[package]] 1159 | name = "precomputed-hash" 1160 | version = "0.1.1" 1161 | source = "registry+https://github.com/rust-lang/crates.io-index" 1162 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 1163 | 1164 | [[package]] 1165 | name = "proc-macro2" 1166 | version = "1.0.89" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" 1169 | dependencies = [ 1170 | "unicode-ident", 1171 | ] 1172 | 1173 | [[package]] 1174 | name = "quote" 1175 | version = "1.0.37" 1176 | source = "registry+https://github.com/rust-lang/crates.io-index" 1177 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 1178 | dependencies = [ 1179 | "proc-macro2", 1180 | ] 1181 | 1182 | [[package]] 1183 | name = "range-collections" 1184 | version = "0.2.4" 1185 | source = "registry+https://github.com/rust-lang/crates.io-index" 1186 | checksum = "61fdfd79629e2b44a1d34b4d227957174cb858e6b86ee45fad114edbcfc903ab" 1187 | dependencies = [ 1188 | "binary-merge", 1189 | "inplace-vec-builder", 1190 | "smallvec", 1191 | ] 1192 | 1193 | [[package]] 1194 | name = "redox_syscall" 1195 | version = "0.5.7" 1196 | source = "registry+https://github.com/rust-lang/crates.io-index" 1197 | checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" 1198 | dependencies = [ 1199 | "bitflags 2.6.0", 1200 | ] 1201 | 1202 | [[package]] 1203 | name = "regex" 1204 | version = "1.11.1" 1205 | source = "registry+https://github.com/rust-lang/crates.io-index" 1206 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1207 | dependencies = [ 1208 | "aho-corasick", 1209 | "memchr", 1210 | "regex-automata", 1211 | "regex-syntax", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "regex-automata" 1216 | version = "0.4.8" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" 1219 | dependencies = [ 1220 | "aho-corasick", 1221 | "memchr", 1222 | "regex-syntax", 1223 | ] 1224 | 1225 | [[package]] 1226 | name = "regex-syntax" 1227 | version = "0.8.5" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1230 | 1231 | [[package]] 1232 | name = "reqwest" 1233 | version = "0.12.9" 1234 | source = "registry+https://github.com/rust-lang/crates.io-index" 1235 | checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" 1236 | dependencies = [ 1237 | "base64", 1238 | "bytes", 1239 | "encoding_rs", 1240 | "futures-channel", 1241 | "futures-core", 1242 | "futures-util", 1243 | "h2", 1244 | "http", 1245 | "http-body", 1246 | "http-body-util", 1247 | "hyper", 1248 | "hyper-rustls", 1249 | "hyper-tls", 1250 | "hyper-util", 1251 | "ipnet", 1252 | "js-sys", 1253 | "log", 1254 | "mime", 1255 | "native-tls", 1256 | "once_cell", 1257 | "percent-encoding", 1258 | "pin-project-lite", 1259 | "rustls-pemfile", 1260 | "serde", 1261 | "serde_json", 1262 | "serde_urlencoded", 1263 | "sync_wrapper", 1264 | "system-configuration", 1265 | "tokio", 1266 | "tokio-native-tls", 1267 | "tower-service", 1268 | "url", 1269 | "wasm-bindgen", 1270 | "wasm-bindgen-futures", 1271 | "web-sys", 1272 | "windows-registry", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "ring" 1277 | version = "0.17.8" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 1280 | dependencies = [ 1281 | "cc", 1282 | "cfg-if", 1283 | "getrandom", 1284 | "libc", 1285 | "spin", 1286 | "untrusted", 1287 | "windows-sys 0.52.0", 1288 | ] 1289 | 1290 | [[package]] 1291 | name = "rustc-demangle" 1292 | version = "0.1.24" 1293 | source = "registry+https://github.com/rust-lang/crates.io-index" 1294 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1295 | 1296 | [[package]] 1297 | name = "rustix" 1298 | version = "0.38.39" 1299 | source = "registry+https://github.com/rust-lang/crates.io-index" 1300 | checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee" 1301 | dependencies = [ 1302 | "bitflags 2.6.0", 1303 | "errno", 1304 | "libc", 1305 | "linux-raw-sys", 1306 | "windows-sys 0.52.0", 1307 | ] 1308 | 1309 | [[package]] 1310 | name = "rustls" 1311 | version = "0.23.16" 1312 | source = "registry+https://github.com/rust-lang/crates.io-index" 1313 | checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" 1314 | dependencies = [ 1315 | "once_cell", 1316 | "rustls-pki-types", 1317 | "rustls-webpki", 1318 | "subtle", 1319 | "zeroize", 1320 | ] 1321 | 1322 | [[package]] 1323 | name = "rustls-pemfile" 1324 | version = "2.2.0" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" 1327 | dependencies = [ 1328 | "rustls-pki-types", 1329 | ] 1330 | 1331 | [[package]] 1332 | name = "rustls-pki-types" 1333 | version = "1.10.0" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" 1336 | 1337 | [[package]] 1338 | name = "rustls-webpki" 1339 | version = "0.102.8" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 1342 | dependencies = [ 1343 | "ring", 1344 | "rustls-pki-types", 1345 | "untrusted", 1346 | ] 1347 | 1348 | [[package]] 1349 | name = "ryu" 1350 | version = "1.0.18" 1351 | source = "registry+https://github.com/rust-lang/crates.io-index" 1352 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1353 | 1354 | [[package]] 1355 | name = "schannel" 1356 | version = "0.1.26" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" 1359 | dependencies = [ 1360 | "windows-sys 0.59.0", 1361 | ] 1362 | 1363 | [[package]] 1364 | name = "scopeguard" 1365 | version = "1.2.0" 1366 | source = "registry+https://github.com/rust-lang/crates.io-index" 1367 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1368 | 1369 | [[package]] 1370 | name = "scroll" 1371 | version = "0.11.0" 1372 | source = "registry+https://github.com/rust-lang/crates.io-index" 1373 | checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" 1374 | 1375 | [[package]] 1376 | name = "scroll" 1377 | version = "0.12.0" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" 1380 | dependencies = [ 1381 | "scroll_derive", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "scroll_derive" 1386 | version = "0.12.0" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" 1389 | dependencies = [ 1390 | "proc-macro2", 1391 | "quote", 1392 | "syn", 1393 | ] 1394 | 1395 | [[package]] 1396 | name = "security-framework" 1397 | version = "2.11.1" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 1400 | dependencies = [ 1401 | "bitflags 2.6.0", 1402 | "core-foundation", 1403 | "core-foundation-sys", 1404 | "libc", 1405 | "security-framework-sys", 1406 | ] 1407 | 1408 | [[package]] 1409 | name = "security-framework-sys" 1410 | version = "2.12.1" 1411 | source = "registry+https://github.com/rust-lang/crates.io-index" 1412 | checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" 1413 | dependencies = [ 1414 | "core-foundation-sys", 1415 | "libc", 1416 | ] 1417 | 1418 | [[package]] 1419 | name = "semver" 1420 | version = "1.0.23" 1421 | source = "registry+https://github.com/rust-lang/crates.io-index" 1422 | checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" 1423 | 1424 | [[package]] 1425 | name = "serde" 1426 | version = "1.0.214" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5" 1429 | dependencies = [ 1430 | "serde_derive", 1431 | ] 1432 | 1433 | [[package]] 1434 | name = "serde_derive" 1435 | version = "1.0.214" 1436 | source = "registry+https://github.com/rust-lang/crates.io-index" 1437 | checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766" 1438 | dependencies = [ 1439 | "proc-macro2", 1440 | "quote", 1441 | "syn", 1442 | ] 1443 | 1444 | [[package]] 1445 | name = "serde_json" 1446 | version = "1.0.132" 1447 | source = "registry+https://github.com/rust-lang/crates.io-index" 1448 | checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" 1449 | dependencies = [ 1450 | "itoa", 1451 | "memchr", 1452 | "ryu", 1453 | "serde", 1454 | ] 1455 | 1456 | [[package]] 1457 | name = "serde_urlencoded" 1458 | version = "0.7.1" 1459 | source = "registry+https://github.com/rust-lang/crates.io-index" 1460 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1461 | dependencies = [ 1462 | "form_urlencoded", 1463 | "itoa", 1464 | "ryu", 1465 | "serde", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "sha1" 1470 | version = "0.10.6" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 1473 | dependencies = [ 1474 | "cfg-if", 1475 | "cpufeatures", 1476 | "digest", 1477 | ] 1478 | 1479 | [[package]] 1480 | name = "shlex" 1481 | version = "1.3.0" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1484 | 1485 | [[package]] 1486 | name = "simd-adler32" 1487 | version = "0.3.7" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 1490 | 1491 | [[package]] 1492 | name = "siphasher" 1493 | version = "0.3.11" 1494 | source = "registry+https://github.com/rust-lang/crates.io-index" 1495 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 1496 | 1497 | [[package]] 1498 | name = "slab" 1499 | version = "0.4.9" 1500 | source = "registry+https://github.com/rust-lang/crates.io-index" 1501 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1502 | dependencies = [ 1503 | "autocfg", 1504 | ] 1505 | 1506 | [[package]] 1507 | name = "smallvec" 1508 | version = "1.13.2" 1509 | source = "registry+https://github.com/rust-lang/crates.io-index" 1510 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1511 | 1512 | [[package]] 1513 | name = "socket2" 1514 | version = "0.5.7" 1515 | source = "registry+https://github.com/rust-lang/crates.io-index" 1516 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 1517 | dependencies = [ 1518 | "libc", 1519 | "windows-sys 0.52.0", 1520 | ] 1521 | 1522 | [[package]] 1523 | name = "spin" 1524 | version = "0.9.8" 1525 | source = "registry+https://github.com/rust-lang/crates.io-index" 1526 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1527 | 1528 | [[package]] 1529 | name = "stable_deref_trait" 1530 | version = "1.2.0" 1531 | source = "registry+https://github.com/rust-lang/crates.io-index" 1532 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1533 | 1534 | [[package]] 1535 | name = "string_cache" 1536 | version = "0.8.7" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" 1539 | dependencies = [ 1540 | "new_debug_unreachable", 1541 | "once_cell", 1542 | "parking_lot", 1543 | "phf_shared", 1544 | "precomputed-hash", 1545 | "serde", 1546 | ] 1547 | 1548 | [[package]] 1549 | name = "subtle" 1550 | version = "2.6.1" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1553 | 1554 | [[package]] 1555 | name = "symbolic" 1556 | version = "12.12.1" 1557 | source = "registry+https://github.com/rust-lang/crates.io-index" 1558 | checksum = "c35fab6a1d4ce7c408ef9fe7305882831f62a88c2375c18dbd61b13aa08de9cc" 1559 | dependencies = [ 1560 | "symbolic-common", 1561 | "symbolic-debuginfo", 1562 | ] 1563 | 1564 | [[package]] 1565 | name = "symbolic-common" 1566 | version = "12.12.1" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | checksum = "3d4d73159efebfb389d819fd479afb2dbd57dcb3e3f4b7fcfa0e675f5a46c1cb" 1569 | dependencies = [ 1570 | "debugid", 1571 | "memmap2", 1572 | "stable_deref_trait", 1573 | "uuid", 1574 | ] 1575 | 1576 | [[package]] 1577 | name = "symbolic-debuginfo" 1578 | version = "12.12.1" 1579 | source = "registry+https://github.com/rust-lang/crates.io-index" 1580 | checksum = "ae995dfbe053daa5eaa1f49fc9af1d9c7469a4e82cd79073048ac1250f08e3f7" 1581 | dependencies = [ 1582 | "debugid", 1583 | "elementtree", 1584 | "elsa", 1585 | "fallible-iterator 0.3.0", 1586 | "flate2", 1587 | "gimli", 1588 | "goblin", 1589 | "lazy_static", 1590 | "nom", 1591 | "nom-supreme", 1592 | "once_cell", 1593 | "parking_lot", 1594 | "pdb-addr2line", 1595 | "regex", 1596 | "scroll 0.12.0", 1597 | "serde", 1598 | "serde_json", 1599 | "smallvec", 1600 | "symbolic-common", 1601 | "symbolic-ppdb", 1602 | "thiserror", 1603 | "wasmparser", 1604 | "zip", 1605 | "zstd", 1606 | ] 1607 | 1608 | [[package]] 1609 | name = "symbolic-ppdb" 1610 | version = "12.12.1" 1611 | source = "registry+https://github.com/rust-lang/crates.io-index" 1612 | checksum = "4e7dd2fb720ae89293253b60cd701c3a1de556a3b54ec9170ca2098789a994b1" 1613 | dependencies = [ 1614 | "flate2", 1615 | "indexmap", 1616 | "serde", 1617 | "serde_json", 1618 | "symbolic-common", 1619 | "thiserror", 1620 | "uuid", 1621 | "watto", 1622 | ] 1623 | 1624 | [[package]] 1625 | name = "syn" 1626 | version = "2.0.87" 1627 | source = "registry+https://github.com/rust-lang/crates.io-index" 1628 | checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" 1629 | dependencies = [ 1630 | "proc-macro2", 1631 | "quote", 1632 | "unicode-ident", 1633 | ] 1634 | 1635 | [[package]] 1636 | name = "sync_wrapper" 1637 | version = "1.0.1" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" 1640 | dependencies = [ 1641 | "futures-core", 1642 | ] 1643 | 1644 | [[package]] 1645 | name = "synstructure" 1646 | version = "0.13.1" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 1649 | dependencies = [ 1650 | "proc-macro2", 1651 | "quote", 1652 | "syn", 1653 | ] 1654 | 1655 | [[package]] 1656 | name = "system-configuration" 1657 | version = "0.6.1" 1658 | source = "registry+https://github.com/rust-lang/crates.io-index" 1659 | checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 1660 | dependencies = [ 1661 | "bitflags 2.6.0", 1662 | "core-foundation", 1663 | "system-configuration-sys", 1664 | ] 1665 | 1666 | [[package]] 1667 | name = "system-configuration-sys" 1668 | version = "0.6.0" 1669 | source = "registry+https://github.com/rust-lang/crates.io-index" 1670 | checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 1671 | dependencies = [ 1672 | "core-foundation-sys", 1673 | "libc", 1674 | ] 1675 | 1676 | [[package]] 1677 | name = "tempfile" 1678 | version = "3.14.0" 1679 | source = "registry+https://github.com/rust-lang/crates.io-index" 1680 | checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" 1681 | dependencies = [ 1682 | "cfg-if", 1683 | "fastrand", 1684 | "once_cell", 1685 | "rustix", 1686 | "windows-sys 0.59.0", 1687 | ] 1688 | 1689 | [[package]] 1690 | name = "thiserror" 1691 | version = "1.0.68" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892" 1694 | dependencies = [ 1695 | "thiserror-impl", 1696 | ] 1697 | 1698 | [[package]] 1699 | name = "thiserror-impl" 1700 | version = "1.0.68" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" 1703 | dependencies = [ 1704 | "proc-macro2", 1705 | "quote", 1706 | "syn", 1707 | ] 1708 | 1709 | [[package]] 1710 | name = "tinystr" 1711 | version = "0.7.6" 1712 | source = "registry+https://github.com/rust-lang/crates.io-index" 1713 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 1714 | dependencies = [ 1715 | "displaydoc", 1716 | "zerovec", 1717 | ] 1718 | 1719 | [[package]] 1720 | name = "tokio" 1721 | version = "1.41.1" 1722 | source = "registry+https://github.com/rust-lang/crates.io-index" 1723 | checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" 1724 | dependencies = [ 1725 | "backtrace", 1726 | "bytes", 1727 | "libc", 1728 | "mio", 1729 | "pin-project-lite", 1730 | "socket2", 1731 | "windows-sys 0.52.0", 1732 | ] 1733 | 1734 | [[package]] 1735 | name = "tokio-native-tls" 1736 | version = "0.3.1" 1737 | source = "registry+https://github.com/rust-lang/crates.io-index" 1738 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 1739 | dependencies = [ 1740 | "native-tls", 1741 | "tokio", 1742 | ] 1743 | 1744 | [[package]] 1745 | name = "tokio-rustls" 1746 | version = "0.26.0" 1747 | source = "registry+https://github.com/rust-lang/crates.io-index" 1748 | checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" 1749 | dependencies = [ 1750 | "rustls", 1751 | "rustls-pki-types", 1752 | "tokio", 1753 | ] 1754 | 1755 | [[package]] 1756 | name = "tokio-util" 1757 | version = "0.7.12" 1758 | source = "registry+https://github.com/rust-lang/crates.io-index" 1759 | checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" 1760 | dependencies = [ 1761 | "bytes", 1762 | "futures-core", 1763 | "futures-sink", 1764 | "pin-project-lite", 1765 | "tokio", 1766 | ] 1767 | 1768 | [[package]] 1769 | name = "tower-service" 1770 | version = "0.3.3" 1771 | source = "registry+https://github.com/rust-lang/crates.io-index" 1772 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 1773 | 1774 | [[package]] 1775 | name = "tracing" 1776 | version = "0.1.40" 1777 | source = "registry+https://github.com/rust-lang/crates.io-index" 1778 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 1779 | dependencies = [ 1780 | "pin-project-lite", 1781 | "tracing-core", 1782 | ] 1783 | 1784 | [[package]] 1785 | name = "tracing-core" 1786 | version = "0.1.32" 1787 | source = "registry+https://github.com/rust-lang/crates.io-index" 1788 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 1789 | dependencies = [ 1790 | "once_cell", 1791 | ] 1792 | 1793 | [[package]] 1794 | name = "try-lock" 1795 | version = "0.2.5" 1796 | source = "registry+https://github.com/rust-lang/crates.io-index" 1797 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1798 | 1799 | [[package]] 1800 | name = "typenum" 1801 | version = "1.17.0" 1802 | source = "registry+https://github.com/rust-lang/crates.io-index" 1803 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 1804 | 1805 | [[package]] 1806 | name = "unicode-ident" 1807 | version = "1.0.13" 1808 | source = "registry+https://github.com/rust-lang/crates.io-index" 1809 | checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 1810 | 1811 | [[package]] 1812 | name = "untrusted" 1813 | version = "0.9.0" 1814 | source = "registry+https://github.com/rust-lang/crates.io-index" 1815 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 1816 | 1817 | [[package]] 1818 | name = "url" 1819 | version = "2.5.3" 1820 | source = "registry+https://github.com/rust-lang/crates.io-index" 1821 | checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" 1822 | dependencies = [ 1823 | "form_urlencoded", 1824 | "idna", 1825 | "percent-encoding", 1826 | ] 1827 | 1828 | [[package]] 1829 | name = "utf16_iter" 1830 | version = "1.0.5" 1831 | source = "registry+https://github.com/rust-lang/crates.io-index" 1832 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 1833 | 1834 | [[package]] 1835 | name = "utf8_iter" 1836 | version = "1.0.4" 1837 | source = "registry+https://github.com/rust-lang/crates.io-index" 1838 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 1839 | 1840 | [[package]] 1841 | name = "uuid" 1842 | version = "1.11.0" 1843 | source = "registry+https://github.com/rust-lang/crates.io-index" 1844 | checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" 1845 | 1846 | [[package]] 1847 | name = "vcpkg" 1848 | version = "0.2.15" 1849 | source = "registry+https://github.com/rust-lang/crates.io-index" 1850 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1851 | 1852 | [[package]] 1853 | name = "version_check" 1854 | version = "0.9.5" 1855 | source = "registry+https://github.com/rust-lang/crates.io-index" 1856 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1857 | 1858 | [[package]] 1859 | name = "want" 1860 | version = "0.3.1" 1861 | source = "registry+https://github.com/rust-lang/crates.io-index" 1862 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 1863 | dependencies = [ 1864 | "try-lock", 1865 | ] 1866 | 1867 | [[package]] 1868 | name = "wasi" 1869 | version = "0.11.0+wasi-snapshot-preview1" 1870 | source = "registry+https://github.com/rust-lang/crates.io-index" 1871 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1872 | 1873 | [[package]] 1874 | name = "wasm-bindgen" 1875 | version = "0.2.95" 1876 | source = "registry+https://github.com/rust-lang/crates.io-index" 1877 | checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" 1878 | dependencies = [ 1879 | "cfg-if", 1880 | "once_cell", 1881 | "wasm-bindgen-macro", 1882 | ] 1883 | 1884 | [[package]] 1885 | name = "wasm-bindgen-backend" 1886 | version = "0.2.95" 1887 | source = "registry+https://github.com/rust-lang/crates.io-index" 1888 | checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" 1889 | dependencies = [ 1890 | "bumpalo", 1891 | "log", 1892 | "once_cell", 1893 | "proc-macro2", 1894 | "quote", 1895 | "syn", 1896 | "wasm-bindgen-shared", 1897 | ] 1898 | 1899 | [[package]] 1900 | name = "wasm-bindgen-futures" 1901 | version = "0.4.45" 1902 | source = "registry+https://github.com/rust-lang/crates.io-index" 1903 | checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" 1904 | dependencies = [ 1905 | "cfg-if", 1906 | "js-sys", 1907 | "wasm-bindgen", 1908 | "web-sys", 1909 | ] 1910 | 1911 | [[package]] 1912 | name = "wasm-bindgen-macro" 1913 | version = "0.2.95" 1914 | source = "registry+https://github.com/rust-lang/crates.io-index" 1915 | checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" 1916 | dependencies = [ 1917 | "quote", 1918 | "wasm-bindgen-macro-support", 1919 | ] 1920 | 1921 | [[package]] 1922 | name = "wasm-bindgen-macro-support" 1923 | version = "0.2.95" 1924 | source = "registry+https://github.com/rust-lang/crates.io-index" 1925 | checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" 1926 | dependencies = [ 1927 | "proc-macro2", 1928 | "quote", 1929 | "syn", 1930 | "wasm-bindgen-backend", 1931 | "wasm-bindgen-shared", 1932 | ] 1933 | 1934 | [[package]] 1935 | name = "wasm-bindgen-shared" 1936 | version = "0.2.95" 1937 | source = "registry+https://github.com/rust-lang/crates.io-index" 1938 | checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" 1939 | 1940 | [[package]] 1941 | name = "wasmparser" 1942 | version = "0.214.0" 1943 | source = "registry+https://github.com/rust-lang/crates.io-index" 1944 | checksum = "5309c1090e3e84dad0d382f42064e9933fdaedb87e468cc239f0eabea73ddcb6" 1945 | dependencies = [ 1946 | "ahash", 1947 | "bitflags 2.6.0", 1948 | "hashbrown 0.14.5", 1949 | "indexmap", 1950 | "semver", 1951 | "serde", 1952 | ] 1953 | 1954 | [[package]] 1955 | name = "watto" 1956 | version = "0.1.0" 1957 | source = "registry+https://github.com/rust-lang/crates.io-index" 1958 | checksum = "6746b5315e417144282a047ebb82260d45c92d09bf653fa9ec975e3809be942b" 1959 | dependencies = [ 1960 | "leb128", 1961 | "thiserror", 1962 | ] 1963 | 1964 | [[package]] 1965 | name = "web-sys" 1966 | version = "0.3.72" 1967 | source = "registry+https://github.com/rust-lang/crates.io-index" 1968 | checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" 1969 | dependencies = [ 1970 | "js-sys", 1971 | "wasm-bindgen", 1972 | ] 1973 | 1974 | [[package]] 1975 | name = "windows" 1976 | version = "0.58.0" 1977 | source = "registry+https://github.com/rust-lang/crates.io-index" 1978 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 1979 | dependencies = [ 1980 | "windows-core", 1981 | "windows-targets", 1982 | ] 1983 | 1984 | [[package]] 1985 | name = "windows-core" 1986 | version = "0.58.0" 1987 | source = "registry+https://github.com/rust-lang/crates.io-index" 1988 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 1989 | dependencies = [ 1990 | "windows-implement", 1991 | "windows-interface", 1992 | "windows-result", 1993 | "windows-strings", 1994 | "windows-targets", 1995 | ] 1996 | 1997 | [[package]] 1998 | name = "windows-implement" 1999 | version = "0.58.0" 2000 | source = "registry+https://github.com/rust-lang/crates.io-index" 2001 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 2002 | dependencies = [ 2003 | "proc-macro2", 2004 | "quote", 2005 | "syn", 2006 | ] 2007 | 2008 | [[package]] 2009 | name = "windows-interface" 2010 | version = "0.58.0" 2011 | source = "registry+https://github.com/rust-lang/crates.io-index" 2012 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 2013 | dependencies = [ 2014 | "proc-macro2", 2015 | "quote", 2016 | "syn", 2017 | ] 2018 | 2019 | [[package]] 2020 | name = "windows-registry" 2021 | version = "0.2.0" 2022 | source = "registry+https://github.com/rust-lang/crates.io-index" 2023 | checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" 2024 | dependencies = [ 2025 | "windows-result", 2026 | "windows-strings", 2027 | "windows-targets", 2028 | ] 2029 | 2030 | [[package]] 2031 | name = "windows-result" 2032 | version = "0.2.0" 2033 | source = "registry+https://github.com/rust-lang/crates.io-index" 2034 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 2035 | dependencies = [ 2036 | "windows-targets", 2037 | ] 2038 | 2039 | [[package]] 2040 | name = "windows-strings" 2041 | version = "0.1.0" 2042 | source = "registry+https://github.com/rust-lang/crates.io-index" 2043 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 2044 | dependencies = [ 2045 | "windows-result", 2046 | "windows-targets", 2047 | ] 2048 | 2049 | [[package]] 2050 | name = "windows-sys" 2051 | version = "0.52.0" 2052 | source = "registry+https://github.com/rust-lang/crates.io-index" 2053 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2054 | dependencies = [ 2055 | "windows-targets", 2056 | ] 2057 | 2058 | [[package]] 2059 | name = "windows-sys" 2060 | version = "0.59.0" 2061 | source = "registry+https://github.com/rust-lang/crates.io-index" 2062 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2063 | dependencies = [ 2064 | "windows-targets", 2065 | ] 2066 | 2067 | [[package]] 2068 | name = "windows-targets" 2069 | version = "0.52.6" 2070 | source = "registry+https://github.com/rust-lang/crates.io-index" 2071 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2072 | dependencies = [ 2073 | "windows_aarch64_gnullvm", 2074 | "windows_aarch64_msvc", 2075 | "windows_i686_gnu", 2076 | "windows_i686_gnullvm", 2077 | "windows_i686_msvc", 2078 | "windows_x86_64_gnu", 2079 | "windows_x86_64_gnullvm", 2080 | "windows_x86_64_msvc", 2081 | ] 2082 | 2083 | [[package]] 2084 | name = "windows_aarch64_gnullvm" 2085 | version = "0.52.6" 2086 | source = "registry+https://github.com/rust-lang/crates.io-index" 2087 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2088 | 2089 | [[package]] 2090 | name = "windows_aarch64_msvc" 2091 | version = "0.52.6" 2092 | source = "registry+https://github.com/rust-lang/crates.io-index" 2093 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2094 | 2095 | [[package]] 2096 | name = "windows_i686_gnu" 2097 | version = "0.52.6" 2098 | source = "registry+https://github.com/rust-lang/crates.io-index" 2099 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2100 | 2101 | [[package]] 2102 | name = "windows_i686_gnullvm" 2103 | version = "0.52.6" 2104 | source = "registry+https://github.com/rust-lang/crates.io-index" 2105 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2106 | 2107 | [[package]] 2108 | name = "windows_i686_msvc" 2109 | version = "0.52.6" 2110 | source = "registry+https://github.com/rust-lang/crates.io-index" 2111 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2112 | 2113 | [[package]] 2114 | name = "windows_x86_64_gnu" 2115 | version = "0.52.6" 2116 | source = "registry+https://github.com/rust-lang/crates.io-index" 2117 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2118 | 2119 | [[package]] 2120 | name = "windows_x86_64_gnullvm" 2121 | version = "0.52.6" 2122 | source = "registry+https://github.com/rust-lang/crates.io-index" 2123 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2124 | 2125 | [[package]] 2126 | name = "windows_x86_64_msvc" 2127 | version = "0.52.6" 2128 | source = "registry+https://github.com/rust-lang/crates.io-index" 2129 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2130 | 2131 | [[package]] 2132 | name = "write16" 2133 | version = "1.0.0" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 2136 | 2137 | [[package]] 2138 | name = "writeable" 2139 | version = "0.5.5" 2140 | source = "registry+https://github.com/rust-lang/crates.io-index" 2141 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 2142 | 2143 | [[package]] 2144 | name = "yoke" 2145 | version = "0.7.4" 2146 | source = "registry+https://github.com/rust-lang/crates.io-index" 2147 | checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" 2148 | dependencies = [ 2149 | "serde", 2150 | "stable_deref_trait", 2151 | "yoke-derive", 2152 | "zerofrom", 2153 | ] 2154 | 2155 | [[package]] 2156 | name = "yoke-derive" 2157 | version = "0.7.4" 2158 | source = "registry+https://github.com/rust-lang/crates.io-index" 2159 | checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" 2160 | dependencies = [ 2161 | "proc-macro2", 2162 | "quote", 2163 | "syn", 2164 | "synstructure", 2165 | ] 2166 | 2167 | [[package]] 2168 | name = "zerocopy" 2169 | version = "0.7.35" 2170 | source = "registry+https://github.com/rust-lang/crates.io-index" 2171 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 2172 | dependencies = [ 2173 | "zerocopy-derive", 2174 | ] 2175 | 2176 | [[package]] 2177 | name = "zerocopy-derive" 2178 | version = "0.7.35" 2179 | source = "registry+https://github.com/rust-lang/crates.io-index" 2180 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 2181 | dependencies = [ 2182 | "proc-macro2", 2183 | "quote", 2184 | "syn", 2185 | ] 2186 | 2187 | [[package]] 2188 | name = "zerofrom" 2189 | version = "0.1.4" 2190 | source = "registry+https://github.com/rust-lang/crates.io-index" 2191 | checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" 2192 | dependencies = [ 2193 | "zerofrom-derive", 2194 | ] 2195 | 2196 | [[package]] 2197 | name = "zerofrom-derive" 2198 | version = "0.1.4" 2199 | source = "registry+https://github.com/rust-lang/crates.io-index" 2200 | checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" 2201 | dependencies = [ 2202 | "proc-macro2", 2203 | "quote", 2204 | "syn", 2205 | "synstructure", 2206 | ] 2207 | 2208 | [[package]] 2209 | name = "zeroize" 2210 | version = "1.8.1" 2211 | source = "registry+https://github.com/rust-lang/crates.io-index" 2212 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 2213 | 2214 | [[package]] 2215 | name = "zerovec" 2216 | version = "0.10.4" 2217 | source = "registry+https://github.com/rust-lang/crates.io-index" 2218 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 2219 | dependencies = [ 2220 | "yoke", 2221 | "zerofrom", 2222 | "zerovec-derive", 2223 | ] 2224 | 2225 | [[package]] 2226 | name = "zerovec-derive" 2227 | version = "0.10.3" 2228 | source = "registry+https://github.com/rust-lang/crates.io-index" 2229 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 2230 | dependencies = [ 2231 | "proc-macro2", 2232 | "quote", 2233 | "syn", 2234 | ] 2235 | 2236 | [[package]] 2237 | name = "zip" 2238 | version = "2.2.0" 2239 | source = "registry+https://github.com/rust-lang/crates.io-index" 2240 | checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" 2241 | dependencies = [ 2242 | "arbitrary", 2243 | "crc32fast", 2244 | "crossbeam-utils", 2245 | "displaydoc", 2246 | "flate2", 2247 | "indexmap", 2248 | "memchr", 2249 | "thiserror", 2250 | "zopfli", 2251 | ] 2252 | 2253 | [[package]] 2254 | name = "zopfli" 2255 | version = "0.8.1" 2256 | source = "registry+https://github.com/rust-lang/crates.io-index" 2257 | checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" 2258 | dependencies = [ 2259 | "bumpalo", 2260 | "crc32fast", 2261 | "lockfree-object-pool", 2262 | "log", 2263 | "once_cell", 2264 | "simd-adler32", 2265 | ] 2266 | 2267 | [[package]] 2268 | name = "zstd" 2269 | version = "0.13.2" 2270 | source = "registry+https://github.com/rust-lang/crates.io-index" 2271 | checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" 2272 | dependencies = [ 2273 | "zstd-safe", 2274 | ] 2275 | 2276 | [[package]] 2277 | name = "zstd-safe" 2278 | version = "7.2.1" 2279 | source = "registry+https://github.com/rust-lang/crates.io-index" 2280 | checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" 2281 | dependencies = [ 2282 | "zstd-sys", 2283 | ] 2284 | 2285 | [[package]] 2286 | name = "zstd-sys" 2287 | version = "2.0.13+zstd.1.5.6" 2288 | source = "registry+https://github.com/rust-lang/crates.io-index" 2289 | checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" 2290 | dependencies = [ 2291 | "cc", 2292 | "pkg-config", 2293 | ] 2294 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "crypt_decrypt_memory" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | aes = "0.8.4" 8 | block-modes = "0.9.1" 9 | cipher = "0.4.4" 10 | kdmp-parser = "0.5.0" 11 | libaes = "0.7.0" 12 | reqwest = { version = "0.12.9", features = ["blocking"] } 13 | sha1 = "0.10.6" 14 | symbolic = "12.12.1" 15 | windows = { version = "0.58.0", features = ["Win32_Security_Cryptography", "Win32_Storage_FileSystem"] } 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CryptDecryptMemory 2 | 3 | A proof of concept that encrypts memory using `CryptProtectMemory` with the `CRYPTPROTECTMEMORY_SAME_PROCESS` flag, and then decrypts it without calling the API again. 4 | Must be run with `SeDebugPrivilege`. 5 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use libaes::Cipher; 2 | use sha1::{Digest, Sha1}; 3 | use std::{ 4 | ffi::c_void, 5 | fs::{self, File}, 6 | io::Cursor, 7 | ptr::{null, null_mut}, 8 | }; 9 | 10 | use kdmp_parser::{Gva, Gxa, KernelDumpParser}; 11 | use symbolic::debuginfo::{pdb, pdb::pdb::FallibleIterator, pe::PeObject}; 12 | use windows::{ 13 | core::PCSTR, 14 | Win32::{ 15 | Foundation::{CloseHandle, HANDLE, NTSTATUS}, 16 | Security::Cryptography::{CryptProtectMemory, CRYPTPROTECTMEMORY_SAME_PROCESS}, 17 | Storage::FileSystem::{ 18 | CreateFileA, FILE_CREATION_DISPOSITION, FILE_FLAGS_AND_ATTRIBUTES, FILE_SHARE_MODE, 19 | }, 20 | }, 21 | }; 22 | 23 | // Taken from https://docs.rs/symcrypt-sys/latest/symcrypt_sys/type.SYMCRYPT_SHA1_STATE.html 24 | #[allow(non_camel_case_types, non_snake_case)] 25 | struct SYMCRYPT_SHA1_STATE { 26 | pub _padding: [u8; 0x20], 27 | pub buffer: [u8; 0x18], 28 | } 29 | 30 | fn main() { 31 | let plaintext_data_original = [0u8; 0x20]; 32 | println!("Original data : {:X?}", plaintext_data_original); 33 | let mut plaintext_data = plaintext_data_original.clone(); 34 | 35 | unsafe { 36 | CryptProtectMemory( 37 | plaintext_data.as_mut_ptr() as *mut c_void, 38 | plaintext_data.len() as u32, 39 | CRYPTPROTECTMEMORY_SAME_PROCESS, 40 | ) 41 | .expect("Failed :(") 42 | }; 43 | 44 | println!("Encrypted: {:X?}", plaintext_data); 45 | 46 | create_dump_file(r"C:\Windows\Temp\livedump.DMP".to_string()) 47 | .expect("[-] Failed creating livedump."); 48 | 49 | let dump_file = File::open(r"C:\Windows\Temp\livedump.DMP") 50 | .expect("[-] Failed opening livedump."); 51 | 52 | let dump_parser = 53 | KernelDumpParser::with_reader(dump_file).expect("[-] Failed parsing livedump."); 54 | 55 | let active_process_head = dump_parser.headers().ps_active_process_head; 56 | 57 | println!("[+] Found PsActiveProcessListHead: {active_process_head:#X}"); 58 | 59 | let cng_data = 60 | fs::read(r"C:\Windows\System32\drivers\cng.sys").expect("[-] Failed reading cng.sys"); 61 | 62 | let cng_object = PeObject::parse(&cng_data).expect("[-] Failed parsing cng.sys"); 63 | let pdb_id = cng_object.debug_id().to_string().replace("-", ""); 64 | let pdb_url = format!("https://msdl.microsoft.com/download/symbols/cng.pdb/{pdb_id}/cng.pdb"); 65 | println!("[+] Downloading cng.sys PDB from {:?}", pdb_url); 66 | 67 | let cng_pdb_data = reqwest::blocking::get(pdb_url) 68 | .unwrap() 69 | .bytes() 70 | .unwrap() 71 | .to_vec(); 72 | 73 | let mut pdb_parser = 74 | pdb::pdb::PDB::open(Cursor::new(cng_pdb_data)).expect("[-] Failed parsing PDB data."); 75 | 76 | let mut random_salt_offset = 0; 77 | let mut g_sha_hash_offset = 0; 78 | let address_map = pdb_parser 79 | .address_map() 80 | .expect("[-] Failed building address map"); 81 | 82 | let symbol_table = pdb_parser 83 | .global_symbols() 84 | .expect("[-] Failed parsing PDB."); 85 | let mut symbols = symbol_table.iter(); 86 | while let Some(sym) = symbols.next().unwrap() { 87 | match sym.parse() { 88 | Ok(pdb::pdb::SymbolData::Public(data)) => { 89 | if data.name.to_string().eq("?RandomSalt@@3PAEA") { 90 | random_salt_offset = data 91 | .offset 92 | .to_rva(&address_map) 93 | .expect("[-] Failed calculating RVA.") 94 | .0; 95 | } else if data 96 | .name 97 | .to_string() 98 | .eq("?g_ShaHash@@3U_SYMCRYPT_SHA1_STATE@@A") 99 | { 100 | g_sha_hash_offset = data 101 | .offset 102 | .to_rva(&address_map) 103 | .expect("[-] Failed calculating RVA.") 104 | .0; 105 | } 106 | } 107 | _ => {} 108 | } 109 | } 110 | 111 | println!( 112 | "[+] Found cng.sys offsets 113 | \tg_ShaHash offset {g_sha_hash_offset:#X} 114 | \tRandomSalt offset {random_salt_offset:#X}" 115 | ); 116 | 117 | let (cng_base, _) = dump_parser 118 | .kernel_modules() 119 | .filter(|(_range, name)| name.ends_with("cng.sys")) 120 | .next() 121 | .expect("[-] Failed finding cng.sys"); 122 | 123 | let cng_base = cng_base.start.u64(); 124 | println!("[+] cng.sys base address: {cng_base:#X}"); 125 | 126 | let random_salt_value: [u8; 16]; 127 | 128 | random_salt_value = dump_parser 129 | .virt_read_struct(Gva::new(cng_base + random_salt_offset as u64)) 130 | .expect("[-] Failed reading RandomSalt value."); 131 | 132 | println!("\tRandomSalt: {:X?}", random_salt_value); 133 | 134 | let g_sha_hash_value: SYMCRYPT_SHA1_STATE; 135 | 136 | g_sha_hash_value = dump_parser 137 | .virt_read_struct(Gva::new(cng_base + g_sha_hash_offset as u64)) 138 | .expect("[-] Failed reading g_ShaHash"); 139 | println!("\tg_ShaHash: {:X?}", g_sha_hash_value.buffer); 140 | 141 | // NTOSKRNL.EXE 142 | let ntoskrnl_data = 143 | fs::read(r"C:\Windows\System32\ntoskrnl.exe").expect("[-] Failed reading ntoskrnl.exe"); 144 | 145 | let ntoskrnl_object = PeObject::parse(&ntoskrnl_data).expect("[-] Failed parsing ntoskrnl.exe"); 146 | let pdb_id = ntoskrnl_object.debug_id().to_string().replace("-", ""); 147 | let pdb_url = 148 | format!("https://msdl.microsoft.com/download/symbols/ntkrnlmp.pdb/{pdb_id}/ntkrnlmp.pdb"); 149 | 150 | println!("[+] Downloading ntoskrnl.exe PDB from {:?}", pdb_url); 151 | 152 | let pdb_data = reqwest::blocking::get(pdb_url) 153 | .unwrap() 154 | .bytes() 155 | .unwrap() 156 | .to_vec(); 157 | 158 | let mut pdb_parser = 159 | pdb::pdb::PDB::open(Cursor::new(pdb_data)).expect("[-] Failed parsing PDB data."); 160 | 161 | let type_infos = pdb_parser.type_information().unwrap(); 162 | let mut type_finder = type_infos.finder(); 163 | let mut iter = type_infos.iter(); 164 | 165 | let mut active_process_link_offset = 0; 166 | let mut cookie_offset = 0; 167 | let mut creation_time_offset = 0; 168 | let mut pid_offset = 0; 169 | 170 | // Parse PDB to find offsets. 171 | 172 | while let Some(info) = iter.next().unwrap() { 173 | type_finder.update(&iter); 174 | match info.parse() { 175 | Ok(pdb::pdb::TypeData::Class(pdb::pdb::ClassType { 176 | name, 177 | properties: _, 178 | fields: Some(fields), 179 | .. 180 | })) => { 181 | if name.to_string().eq("_EPROCESS") { 182 | match type_finder.find(fields).unwrap().parse().unwrap() { 183 | pdb::pdb::TypeData::FieldList(list) => { 184 | for field in list.fields { 185 | if let pdb::pdb::TypeData::Member(member) = field { 186 | if member.name.to_string().eq("ActiveProcessLinks") { 187 | active_process_link_offset = member.offset; 188 | } 189 | if member.name.to_string().eq("Cookie") { 190 | cookie_offset = member.offset; 191 | } 192 | if member.name.to_string().eq("CreateTime") { 193 | creation_time_offset = member.offset; 194 | } 195 | if member.name.to_string().eq("UniqueProcessId") { 196 | pid_offset = member.offset; 197 | } 198 | } 199 | } 200 | } 201 | _ => {} 202 | } 203 | 204 | break; 205 | } 206 | } 207 | Ok(_) => {} 208 | Err(_) => {} 209 | } 210 | } 211 | 212 | println!( 213 | "[+] Found EPROCESS offsets: 214 | UniqueProcessID offset: {pid_offset:#X} 215 | Cookie offset: {cookie_offset:#X} 216 | CreateTime offset: {creation_time_offset:#X} 217 | ActiveProcessLinks: {active_process_link_offset:#X}" 218 | ); 219 | 220 | let target_pid = std::process::id(); 221 | 222 | let mut eprocess_start: u64 = dump_parser 223 | .virt_read_struct(Gva::new(active_process_head)) 224 | .expect("[-] Failed reading first EPROCESS."); 225 | 226 | eprocess_start -= active_process_link_offset; 227 | 228 | loop { 229 | let eprocess_pid: u64 = dump_parser 230 | .virt_read_struct(Gva::new(eprocess_start + pid_offset)) 231 | .expect("[-] Failed reading PID of EPROCESS struct."); 232 | 233 | if eprocess_pid == target_pid as u64 { 234 | println!("[+] Found EPROCESS struct @ {eprocess_start:#X} for PID {target_pid}"); 235 | break; 236 | } 237 | 238 | eprocess_start = dump_parser 239 | .virt_read_struct(Gva::new(eprocess_start + active_process_link_offset)) 240 | .expect("Failed finding next EPROCESS."); 241 | eprocess_start -= active_process_link_offset; 242 | } 243 | 244 | let cookie_value: u64 = dump_parser 245 | .virt_read_struct(Gva::new(eprocess_start + cookie_offset)) 246 | .expect("[-] Failed retrieving Cookie field."); 247 | let create_time: u64 = dump_parser 248 | .virt_read_struct(Gva::new(eprocess_start + creation_time_offset)) 249 | .expect("[-] Failed retrieving CreateTime field."); 250 | 251 | println!("\tCookie: {cookie_value:#X}"); 252 | println!("\tCreateTime: {create_time:#X}"); 253 | let mut hasher = Sha1::new(); 254 | hasher.update(g_sha_hash_value.buffer); 255 | 256 | let mut data = (cookie_value as u32).to_le_bytes().to_vec(); 257 | 258 | data.extend(create_time.to_le_bytes()); 259 | 260 | hasher.update(data); 261 | let hash = hasher.finalize(); 262 | println!("[+] SHA1 hash : {:X?}", hash); 263 | 264 | let key: [u8; 16] = hash[..0x10].try_into().unwrap(); 265 | //let mut aes_dec = Aes128::new(key.into(), &random_salt_value.into()); 266 | let cipher = Cipher::new_128(&key); 267 | let decrypted = cipher.cbc_decrypt(&random_salt_value, &plaintext_data[..]); 268 | println!("[+] Decrypted AES data: {:X?}", decrypted); 269 | println!("Checking value is correctly decrypted..."); 270 | assert_eq!(decrypted, plaintext_data_original); 271 | println!("[+] Success !"); 272 | 273 | } 274 | 275 | #[derive(Debug)] 276 | pub enum DumpError { 277 | CreateFileError, 278 | DebuggerNotEnabled, 279 | } 280 | 281 | #[allow(non_snake_case, non_camel_case_types)] 282 | #[repr(C)] 283 | struct SYSDBG_LIVEDUMP_CONTROL { 284 | Version: u32, 285 | BugCheckCode: u32, 286 | BugCheckParam1: u64, 287 | BugCheckParam2: u64, 288 | BugCheckParam3: u64, 289 | BugCheckParam4: u64, 290 | FileHandle: HANDLE, 291 | CancelHandle: HANDLE, 292 | Flags: u32, 293 | Pages: u32, 294 | } 295 | 296 | #[link(name = "ntdll.dll", kind = "raw-dylib", modifiers = "+verbatim")] 297 | extern "C" { 298 | #[link_name = "NtSystemDebugControl"] 299 | fn NtSystemDebugControl( 300 | command: usize, 301 | input_buffer: *const SYSDBG_LIVEDUMP_CONTROL, 302 | input_buffer_length: usize, 303 | output_buffer: *const c_void, 304 | output_buffer_len: usize, 305 | return_length: *mut usize, 306 | ) -> NTSTATUS; 307 | } 308 | 309 | pub fn create_dump_file(path: String) -> Result<(), DumpError> { 310 | let file_handle = unsafe { 311 | CreateFileA( 312 | PCSTR(format!("{}\0", path).as_ptr()), 313 | 0x10000000, 314 | FILE_SHARE_MODE(0), 315 | None, 316 | FILE_CREATION_DISPOSITION(2), 317 | FILE_FLAGS_AND_ATTRIBUTES(0x80), 318 | HANDLE::default(), 319 | ) 320 | .map_err(|_| DumpError::CreateFileError)? 321 | }; 322 | 323 | let dump_control = SYSDBG_LIVEDUMP_CONTROL { 324 | Version: 1, 325 | BugCheckCode: 0x161, 326 | BugCheckParam1: 0, 327 | BugCheckParam2: 0, 328 | BugCheckParam3: 0, 329 | BugCheckParam4: 0, 330 | FileHandle: file_handle, 331 | CancelHandle: HANDLE::default(), 332 | Flags: 0, 333 | Pages: 0, 334 | }; 335 | 336 | let status = unsafe { 337 | NtSystemDebugControl( 338 | 37, 339 | &dump_control, 340 | size_of::(), 341 | null(), 342 | 0, 343 | null_mut(), 344 | ) 345 | }; 346 | 347 | if status.is_err() { 348 | println!("NTSTATUS : {:#X}", status.0); 349 | return Err(DumpError::DebuggerNotEnabled); 350 | } 351 | 352 | unsafe { CloseHandle(file_handle).unwrap() }; 353 | 354 | Ok(()) 355 | } 356 | --------------------------------------------------------------------------------