diff --git a/Cargo.lock b/Cargo.lock index bd3ce51..86da87c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -165,143 +165,6 @@ dependencies = [ "libloading 0.7.4", ] -[[package]] -name = "ashpd" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093" -dependencies = [ - "enumflags2", - "futures-channel", - "futures-util", - "rand", - "serde", - "serde_repr", - "tokio", - "url", - "zbus", -] - -[[package]] -name = "async-broadcast" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" -dependencies = [ - "event-listener", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-io" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" -dependencies = [ - "async-lock", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-lock" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener", - "event-listener-strategy", - "pin-project-lite", -] - -[[package]] -name = "async-process" -version = "2.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" -dependencies = [ - "async-channel", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener", - "futures-lite", - "rustix", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-recursion" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "async-signal" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix", - "signal-hook-registry", - "slab", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - -[[package]] -name = "async-trait" -version = "0.1.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -387,15 +250,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - [[package]] name = "block2" version = "0.5.1" @@ -405,19 +259,6 @@ dependencies = [ "objc2", ] -[[package]] -name = "blocking" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - [[package]] name = "bumpalo" version = "3.16.0" @@ -772,16 +613,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - [[package]] name = "dirs" version = "5.0.1" @@ -809,17 +640,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "displaydoc" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "dlib" version = "0.5.2" @@ -879,33 +699,6 @@ dependencies = [ "linux-raw-sys 0.6.4", ] -[[package]] -name = "endi" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" - -[[package]] -name = "enumflags2" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" -dependencies = [ - "enumflags2_derive", - "serde", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -947,27 +740,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "event-listener" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" -dependencies = [ - "event-listener", - "pin-project-lite", -] - [[package]] name = "fast-srgb8" version = "1.0.0" @@ -1074,15 +846,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" -[[package]] -name = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - [[package]] name = "futures" version = "0.3.30" @@ -1132,19 +895,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" -[[package]] -name = "futures-lite" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - [[package]] name = "futures-macro" version = "0.3.30" @@ -1396,12 +1146,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - [[package]] name = "hexf-parse" version = "0.2.1" @@ -1564,136 +1308,6 @@ dependencies = [ "winit", ] -[[package]] -name = "icu_collections" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locid" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - -[[package]] -name = "icu_normalizer" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "utf16_iter", - "utf8_iter", - "write16", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" - -[[package]] -name = "icu_properties" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8ac670d7422d7f76b32e17a5db556510825b29ec9154f235977c9caba61036" -dependencies = [ - "displaydoc", - "icu_collections", - "icu_locid_transform", - "icu_properties_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" - -[[package]] -name = "icu_provider" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "stable_deref_trait", - "tinystr", - "writeable", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "idna" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed" -dependencies = [ - "icu_normalizer", - "icu_properties", - "smallvec", - "utf8_iter", -] - [[package]] name = "imagesize" version = "0.12.0" @@ -1894,12 +1508,6 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" -[[package]] -name = "litemap" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" - [[package]] name = "lock_api" version = "0.4.12" @@ -1955,15 +1563,6 @@ dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "metal" version = "0.27.0" @@ -1989,17 +1588,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - [[package]] name = "naga" version = "0.19.2" @@ -2059,19 +1647,6 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "nix" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" -dependencies = [ - "bitflags 2.5.0", - "cfg-if", - "cfg_aliases 0.1.1", - "libc", - "memoffset", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -2401,16 +1976,6 @@ dependencies = [ "libredox 0.0.2", ] -[[package]] -name = "ordered-stream" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" -dependencies = [ - "futures-core", - "pin-project-lite", -] - [[package]] name = "owned_ttf_parser" version = "0.21.0" @@ -2444,12 +2009,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "parking" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" - [[package]] name = "parking_lot" version = "0.11.2" @@ -2596,17 +2155,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - [[package]] name = "pkg-config" version = "0.3.30" @@ -2854,7 +2402,6 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251" dependencies = [ - "ashpd", "block", "dispatch", "js-sys", @@ -3026,37 +2573,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "serde_repr" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - [[package]] name = "simd-adler32" version = "0.3.7" @@ -3147,16 +2663,6 @@ dependencies = [ "serde", ] -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "softbuffer" version = "0.4.3" @@ -3199,12 +2705,6 @@ dependencies = [ "bitflags 2.5.0", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "static_assertions" version = "1.1.0" @@ -3275,17 +2775,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "synstructure" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - [[package]] name = "sys-locale" version = "0.3.1" @@ -3295,18 +2784,6 @@ dependencies = [ "libc", ] -[[package]] -name = "tempfile" -version = "3.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" -dependencies = [ - "cfg-if", - "fastrand", - "rustix", - "windows-sys 0.52.0", -] - [[package]] name = "termcolor" version = "1.4.1" @@ -3375,16 +2852,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "tinystr" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", - "zerovec", -] - [[package]] name = "tinyvec" version = "1.6.0" @@ -3407,15 +2874,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", - "bytes", - "libc", - "mio", "num_cpus", "pin-project-lite", - "signal-hook-registry", - "socket2", - "tracing", - "windows-sys 0.48.0", ] [[package]] @@ -3490,17 +2950,6 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "uds_windows" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" -dependencies = [ - "memoffset", - "tempfile", - "winapi", -] - [[package]] name = "unicode-bidi" version = "0.3.15" @@ -3577,18 +3026,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "url" -version = "2.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", -] - [[package]] name = "usvg" version = "0.36.0" @@ -3650,18 +3087,6 @@ dependencies = [ "tiny-skia-path", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - [[package]] name = "version_check" version = "0.9.4" @@ -4348,18 +3773,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - -[[package]] -name = "writeable" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" - [[package]] name = "x11-dl" version = "2.21.0" @@ -4398,16 +3811,6 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" -[[package]] -name = "xdg-home" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca91dcf8f93db085f3a0a29358cd0b9d670915468f4290e8b85d118a34211ab8" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "xkbcommon-dl" version = "0.4.2" @@ -4451,87 +3854,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" -[[package]] -name = "yoke" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", - "synstructure", -] - -[[package]] -name = "zbus" -version = "4.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989c3977a7aafa97b12b9a35d21cdcff9b0d2289762b14683f45d66b1ba6c48f" -dependencies = [ - "async-broadcast", - "async-process", - "async-recursion", - "async-trait", - "enumflags2", - "event-listener", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix", - "ordered-stream", - "rand", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tokio", - "tracing", - "uds_windows", - "windows-sys 0.52.0", - "xdg-home", - "zbus_macros", - "zbus_names", - "zvariant", -] - -[[package]] -name = "zbus_macros" -version = "4.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe9de53245dcf426b7be226a4217dd5e339080e5d46e64a02d6e5dcbf90fca1" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.66", - "zvariant_utils", -] - -[[package]] -name = "zbus_names" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" -dependencies = [ - "serde", - "static_assertions", - "zvariant", -] - [[package]] name = "zeno" version = "0.2.3" @@ -4557,84 +3879,3 @@ dependencies = [ "quote", "syn 2.0.66", ] - -[[package]] -name = "zerofrom" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", - "synstructure", -] - -[[package]] -name = "zerovec" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "zvariant" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa6d31a02fbfb602bfde791de7fedeb9c2c18115b3d00f3a36e489f46ffbbc7" -dependencies = [ - "endi", - "enumflags2", - "serde", - "static_assertions", - "url", - "zvariant_derive", -] - -[[package]] -name = "zvariant_derive" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642bf1b6b6d527988b3e8193d20969d53700a36eac734d21ae6639db168701c8" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.66", - "zvariant_utils", -] - -[[package]] -name = "zvariant_utils" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc242db087efc22bd9ade7aa7809e4ba828132edc312871584a6b4391bdf8786" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] diff --git a/Cargo.toml b/Cargo.toml index ac973c1..0ba68db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,13 +2,18 @@ name = "pumpbin" version = "0.1.0" edition = "2021" +default-run = "pumpbin" authors = ["b1n "] license = "MIT" homepage = "https://b1n.io" repository = "https://github.com/pumpbin/pumpbin" +[[bin]] +name = "maker" +path = "src/bin/maker.rs" + [dependencies] -rfd = { version = "0.14.1", default-features = false , features = ["tokio"]} +rfd = { version = "0.14.1", default-features = false} dirs = "5.0.1" flatbuffers = "24.3.25" open = "5.1.4" diff --git a/src/bin/maker.rs b/src/bin/maker.rs new file mode 100644 index 0000000..2629bf6 --- /dev/null +++ b/src/bin/maker.rs @@ -0,0 +1,783 @@ +use std::{fs, path::PathBuf, usize}; + +use bincode::encode_to_vec; +use dirs::{desktop_dir, home_dir}; +use iced::{ + advanced::Application, + executor, + widget::{ + button, column, horizontal_rule, pick_list, radio, row, svg::Handle, text, text_editor, + text_input, Svg, + }, + Alignment, Font, Length, Renderer, Task, Theme, +}; +use pumpbin::{ + plugin::{Bins, Plugin}, + svg_style, ShellcodeSaveType, +}; +use pumpbin::{ + plugin::{EncryptType, Platforms}, + Pumpbin, +}; +use rfd::AsyncFileDialog; + +#[derive(Debug)] +struct Maker { + plugin_name: String, + author: String, + version: String, + prefix: String, + max_len: String, + shellcode_save_type: ShellcodeSaveType, + size_holder: String, + encrypt_type: EncryptType, + windows_exe: String, + windows_lib: String, + linux_exe: String, + linux_lib: String, + darwin_exe: String, + darwin_lib: String, + desc: text_editor::Content, + message: String, + selected_theme: Theme, +} + +impl Default for Maker { + fn default() -> Self { + Self { + plugin_name: Default::default(), + author: Default::default(), + version: Default::default(), + prefix: Default::default(), + max_len: Default::default(), + shellcode_save_type: ShellcodeSaveType::Local, + size_holder: Default::default(), + encrypt_type: EncryptType::None, + windows_exe: Default::default(), + windows_lib: Default::default(), + linux_exe: Default::default(), + linux_lib: Default::default(), + darwin_exe: Default::default(), + darwin_lib: Default::default(), + desc: text_editor::Content::new(), + message: "Welcom to PumpBin Maker.".to_string(), + selected_theme: Theme::CatppuccinMacchiato, + } + } +} + +impl Maker { + fn plugin_name(&self) -> &str { + &self.plugin_name + } + + fn author(&self) -> &str { + &self.author + } + + fn version(&self) -> &str { + &self.version + } + + fn prefix(&self) -> &str { + &self.prefix + } + + fn max_len(&self) -> &str { + &self.max_len + } + + fn shellcode_save_type(&self) -> ShellcodeSaveType { + self.shellcode_save_type + } + + fn size_holder(&self) -> &str { + &self.size_holder + } + + fn encrypt_type(&self) -> &EncryptType { + &self.encrypt_type + } + + fn encrypt_type_mut(&mut self) -> &mut EncryptType { + &mut self.encrypt_type + } + + fn windows_exe(&self) -> &str { + &self.windows_exe + } + + fn windows_lib(&self) -> &str { + &self.windows_lib + } + + fn linux_exe(&self) -> &str { + &self.linux_exe + } + + fn linux_lib(&self) -> &str { + &self.linux_lib + } + + fn darwin_exe(&self) -> &str { + &self.darwin_exe + } + + fn darwin_lib(&self) -> &str { + &self.darwin_lib + } + + fn desc(&self) -> &text_editor::Content { + &self.desc + } + + fn desc_mut(&mut self) -> &mut text_editor::Content { + &mut self.desc + } + + fn selected_theme(&self) -> Theme { + self.selected_theme.clone() + } +} + +#[derive(Debug, Clone, Copy)] +enum ChooseFileType { + WindowsExe, + WindowsLib, + LinuxExe, + LinuxLib, + DarwinExe, + DarwinLib, +} + +#[derive(Debug, Clone)] +enum MakerMessage { + PluginNameChanged(String), + AuthorChanged(String), + VersionChanged(String), + PrefixChanged(String), + MaxLenChanged(String), + ShellcodeSaveTypeChanged(ShellcodeSaveType), + SizeHolderChanged(String), + EncryptTypeChanged(EncryptType), + XorPassChanged(String), + AesKeyChanged(String), + AesNonceChanged(String), + WindowsExeChanged(String), + WindowsLibChanged(String), + LinuxExeChanged(String), + LinuxLibChanged(String), + DarwinExeChanged(String), + DarwinLibChanged(String), + DescAction(text_editor::Action), + GenerateClicked, + GenerateDone(Result<(), String>), + ChooseFileClicked(ChooseFileType), + WindowsExeChooseDone(Result), + WindowsLibChooseDone(Result), + LinuxExeChooseDone(Result), + LinuxLibChooseDone(Result), + DarwinExeChooseDone(Result), + DarwinLibChooseDone(Result), + B1nClicked, + GithubClicked, + ThemeChanged(Theme), +} + +impl Application for Maker { + type Executor = executor::Default; + type Flags = (); + type Message = MakerMessage; + type Theme = Theme; + type Renderer = Renderer; + + fn new(_flags: Self::Flags) -> (Self, iced::Task) { + (Self::default(), Task::none()) + } + + fn title(&self) -> String { + "PumpBin Maker".to_string() + } + + fn update(&mut self, message: Self::Message) -> iced::Task { + match message { + MakerMessage::PluginNameChanged(x) => { + self.plugin_name = x; + Task::none() + } + MakerMessage::AuthorChanged(x) => { + self.author = x; + Task::none() + } + MakerMessage::VersionChanged(x) => { + self.version = x; + Task::none() + } + MakerMessage::PrefixChanged(x) => { + self.prefix = x; + Task::none() + } + MakerMessage::MaxLenChanged(x) => { + self.max_len = x; + Task::none() + } + MakerMessage::ShellcodeSaveTypeChanged(x) => { + self.shellcode_save_type = x; + Task::none() + } + MakerMessage::SizeHolderChanged(x) => { + self.size_holder = x; + Task::none() + } + + MakerMessage::EncryptTypeChanged(x) => { + self.encrypt_type = x; + Task::none() + } + MakerMessage::XorPassChanged(x) => { + if let EncryptType::Xor(xor) = self.encrypt_type_mut() { + *xor = x.as_bytes().to_vec(); + } + Task::none() + } + MakerMessage::AesKeyChanged(x) => { + if let EncryptType::AesGcm(aes_gcm) = self.encrypt_type_mut() { + *aes_gcm.key_holder_mut() = x.as_bytes().to_vec(); + } + Task::none() + } + MakerMessage::AesNonceChanged(x) => { + if let EncryptType::AesGcm(aes_gcm) = self.encrypt_type_mut() { + *aes_gcm.nonce_holder_mut() = x.as_bytes().to_vec(); + } + Task::none() + } + MakerMessage::WindowsExeChanged(x) => { + self.windows_exe = x; + Task::none() + } + MakerMessage::WindowsLibChanged(x) => { + self.windows_lib = x; + Task::none() + } + MakerMessage::LinuxExeChanged(x) => { + self.linux_exe = x; + Task::none() + } + MakerMessage::LinuxLibChanged(x) => { + self.linux_lib = x; + Task::none() + } + MakerMessage::DarwinExeChanged(x) => { + self.darwin_exe = x; + Task::none() + } + MakerMessage::DarwinLibChanged(x) => { + self.darwin_lib = x; + Task::none() + } + MakerMessage::DescAction(x) => { + self.desc_mut().perform(x); + Task::none() + } + MakerMessage::GenerateClicked => { + if self.plugin_name().is_empty() { + self.message = "Plugin Name is empty.".to_string(); + return Task::none(); + } + + if self.prefix().is_empty() { + self.message = "Prefix is empty.".to_string(); + return Task::none(); + } + + if let ShellcodeSaveType::Local = self.shellcode_save_type() { + if self.size_holder().is_empty() { + self.message = "Size Holder is empty.".to_string(); + return Task::none(); + } + } + + let max_len; + + if let Ok(max) = self.max_len().parse::() { + max_len = max; + } else { + self.message = "MaxLen numeric only.".to_string(); + return Task::none(); + } + + match self.encrypt_type() { + EncryptType::None => (), + EncryptType::Xor(x) => { + if x.is_empty() { + self.message = "Xor Pass is empty.".to_string(); + return Task::none(); + } + } + EncryptType::AesGcm(x) => { + if x.key_holder().is_empty() { + self.message = "AesGcm Key is empty.".to_string(); + return Task::none(); + } else if x.nonce_holder().is_empty() { + self.message = "AesGcm Nonce is empty.".to_string(); + return Task::none(); + } + } + } + + let windows_exe_path = PathBuf::from(self.windows_exe()); + let windows_dll_path = PathBuf::from(self.windows_lib()); + let windows = match ( + windows_exe_path.exists() && windows_exe_path.is_file(), + windows_dll_path.exists() && windows_dll_path.is_file(), + ) { + (false, false) => None, + _ => Some(Bins { + executable: if let Ok(bin) = fs::read(&windows_exe_path) { + Some(bin) + } else { + None + }, + dynamic_library: if let Ok(bin) = fs::read(&windows_dll_path) { + Some(bin) + } else { + None + }, + }), + }; + + let linux_exe_path = PathBuf::from(self.linux_exe()); + let linux_dll_path = PathBuf::from(self.linux_lib()); + let linux = match ( + linux_exe_path.exists() && linux_exe_path.is_file(), + linux_dll_path.exists() && linux_dll_path.is_file(), + ) { + (false, false) => None, + _ => Some(Bins { + executable: if let Ok(bin) = fs::read(&linux_exe_path) { + Some(bin) + } else { + None + }, + dynamic_library: if let Ok(bin) = fs::read(&linux_dll_path) { + Some(bin) + } else { + None + }, + }), + }; + + let darwin_exe_path = PathBuf::from(self.darwin_exe()); + let darwin_dll_path = PathBuf::from(self.darwin_lib()); + let darwin = match ( + darwin_exe_path.exists() && darwin_exe_path.is_file(), + darwin_dll_path.exists() && darwin_dll_path.is_file(), + ) { + (false, false) => None, + _ => Some(Bins { + executable: if let Ok(bin) = fs::read(&darwin_exe_path) { + Some(bin) + } else { + None + }, + dynamic_library: if let Ok(bin) = fs::read(&darwin_dll_path) { + Some(bin) + } else { + None + }, + }), + }; + + let plugin = Plugin { + plugin_name: self.plugin_name().to_string(), + author: match self.author().is_empty() { + true => None, + false => Some(self.author().to_string()), + }, + version: match self.version().is_empty() { + true => None, + false => Some(self.version().to_string()), + }, + desc: match self.desc().text().is_empty() { + true => None, + false => Some(self.desc().text()), + }, + prefix: self.prefix().as_bytes().to_vec(), + size_holder: match self.shellcode_save_type() { + ShellcodeSaveType::Local => Some(self.size_holder().as_bytes().to_vec()), + ShellcodeSaveType::Remote => None, + }, + max_len, + encrypt_type: self.encrypt_type().to_owned(), + platforms: Platforms { + windows, + linux, + darwin, + }, + }; + + let plugin_name = self.plugin_name().to_owned(); + let make_plugin = async move { + let buf = encode_to_vec(plugin, bincode::config::standard()) + .map_err(|_| "Encode plugin failed.".to_string())?; + + let file = AsyncFileDialog::new() + .set_directory(desktop_dir().unwrap_or(".".into())) + .set_file_name(format!("{}.b1n", plugin_name)) + .set_can_create_directories(true) + .set_title("save plugin") + .save_file() + .await + .ok_or("Canceled plugin saving.".to_string())?; + + fs::write(file.path(), buf).map_err(|_| "Write plugin failed.".to_string())?; + + Ok(()) + }; + + Task::perform(make_plugin, MakerMessage::GenerateDone) + } + MakerMessage::GenerateDone(x) => { + self.message = match x { + Ok(_) => "Generate done.".to_string(), + Err(e) => e, + }; + + Task::none() + } + MakerMessage::ChooseFileClicked(x) => { + let choose_file = async move { + AsyncFileDialog::new() + .set_directory(home_dir().unwrap_or(".".into())) + .set_title("choose file") + .pick_file() + .await + .map(|x| x.path().to_string_lossy().to_string()) + .ok_or("Canceled file selection.".to_string()) + }; + + Task::perform( + choose_file, + match x { + ChooseFileType::WindowsExe => MakerMessage::WindowsExeChooseDone, + ChooseFileType::WindowsLib => MakerMessage::WindowsLibChooseDone, + ChooseFileType::LinuxExe => MakerMessage::LinuxExeChooseDone, + ChooseFileType::LinuxLib => MakerMessage::LinuxLibChooseDone, + ChooseFileType::DarwinExe => MakerMessage::DarwinExeChooseDone, + ChooseFileType::DarwinLib => MakerMessage::DarwinLibChooseDone, + }, + ) + } + MakerMessage::WindowsExeChooseDone(x) => { + match x { + Ok(x) => self.windows_exe = x, + Err(x) => self.message = x, + } + Task::none() + } + MakerMessage::WindowsLibChooseDone(x) => { + match x { + Ok(x) => self.windows_lib = x, + Err(x) => self.message = x, + } + Task::none() + } + MakerMessage::LinuxExeChooseDone(x) => { + match x { + Ok(x) => self.linux_exe = x, + Err(x) => self.message = x, + } + Task::none() + } + MakerMessage::LinuxLibChooseDone(x) => { + match x { + Ok(x) => self.linux_lib = x, + Err(x) => self.message = x, + } + Task::none() + } + MakerMessage::DarwinExeChooseDone(x) => { + match x { + Ok(x) => self.darwin_exe = x, + Err(x) => self.message = x, + } + Task::none() + } + MakerMessage::DarwinLibChooseDone(x) => { + match x { + Ok(x) => self.darwin_lib = x, + Err(x) => self.message = x, + } + Task::none() + } + MakerMessage::B1nClicked => { + if open::that(env!("CARGO_PKG_HOMEPAGE")).is_err() { + self.message = "Open home failed.".into(); + } + Task::none() + } + MakerMessage::GithubClicked => { + if open::that(env!("CARGO_PKG_REPOSITORY")).is_err() { + self.message = "Open repo failed.".into(); + } + Task::none() + } + MakerMessage::ThemeChanged(x) => { + self.selected_theme = x; + Task::none() + } + } + } + + fn view(&self) -> iced::Element<'_, Self::Message, Self::Theme, Self::Renderer> { + let font = Font::with_name("JetBrainsMono Nerd Font"); + + let choose_button = || { + button( + Svg::new(Handle::from_memory(include_bytes!( + "../../assets/svg/three-dots.svg" + ))) + .width(20), + ) + }; + + let pick_list_handle = || pick_list::Handle::Dynamic { + closed: pick_list::Icon { + font, + code_point: '', + size: None, + line_height: text::LineHeight::Relative(1.0), + shaping: text::Shaping::Basic, + }, + open: pick_list::Icon { + font, + code_point: '', + size: None, + line_height: text::LineHeight::Relative(1.0), + shaping: text::Shaping::Basic, + }, + }; + + let maker = column![ + row![ + column![ + text("Plugin Name"), + text_input("", self.plugin_name()).on_input(MakerMessage::PluginNameChanged), + ] + .align_items(Alignment::Start), + column![ + text("Author"), + text_input("", self.author()).on_input(MakerMessage::AuthorChanged), + ] + .align_items(Alignment::Start), + column![ + text("Version"), + text_input("", self.version()).on_input(MakerMessage::VersionChanged), + ] + .align_items(Alignment::Start), + column![ + text("Prefix"), + text_input("", self.prefix()).on_input(MakerMessage::PrefixChanged), + ] + .align_items(Alignment::Start), + column![ + text("MaxLen"), + text_input("", self.max_len()).on_input(MakerMessage::MaxLenChanged), + ] + .align_items(Alignment::Start), + ] + .spacing(10) + .align_items(Alignment::Center), + column![ + text("Type"), + row![ + radio( + ShellcodeSaveType::Local.to_string(), + ShellcodeSaveType::Local, + Some(self.shellcode_save_type()), + MakerMessage::ShellcodeSaveTypeChanged + ), + radio( + ShellcodeSaveType::Remote.to_string(), + ShellcodeSaveType::Remote, + Some(self.shellcode_save_type()), + MakerMessage::ShellcodeSaveTypeChanged + ) + ] + .push_maybe(match self.shellcode_save_type() { + ShellcodeSaveType::Local => Some( + row![ + text("Size Holder: "), + text_input("", self.size_holder()) + .on_input(MakerMessage::SizeHolderChanged) + ] + .align_items(Alignment::Center) + ), + ShellcodeSaveType::Remote => None, + }) + .align_items(Alignment::Center) + .height(30) + .spacing(20) + ] + .align_items(Alignment::Start), + column![ + text("Encrypt Type"), + row![pick_list( + EncryptType::all(), + Some(self.encrypt_type()), + MakerMessage::EncryptTypeChanged + ) + .handle(pick_list_handle())] + .push_maybe(match self.encrypt_type() { + EncryptType::None => None, + EncryptType::Xor(x) => Some( + row![ + text("Pass:"), + text_input("", &String::from_utf8_lossy(x)) + .on_input(MakerMessage::XorPassChanged) + ] + .spacing(10) + .align_items(Alignment::Center) + ), + EncryptType::AesGcm(x) => Some( + row![ + text("Key:"), + text_input("", &String::from_utf8_lossy(x.key_holder())) + .on_input(MakerMessage::AesKeyChanged), + text("Nonce:"), + text_input("", &String::from_utf8_lossy(x.nonce_holder())) + .on_input(MakerMessage::AesNonceChanged) + ] + .spacing(10) + .align_items(Alignment::Center) + ), + }) + .spacing(20) + .align_items(Alignment::Center) + ] + .align_items(Alignment::Start), + column![ + text("Windows"), + row![ + text("Exe:"), + row![text_input("", self.windows_exe()) + .on_input(MakerMessage::WindowsExeChanged)], + choose_button() + .on_press(MakerMessage::ChooseFileClicked(ChooseFileType::WindowsExe)), + text("Lib:"), + text_input("", self.windows_lib()).on_input(MakerMessage::WindowsLibChanged), + choose_button() + .on_press(MakerMessage::ChooseFileClicked(ChooseFileType::WindowsLib)), + ] + .align_items(Alignment::Center) + .spacing(10) + ] + .align_items(Alignment::Start), + column![ + text("Linux"), + row![ + text("Exe:"), + row![text_input("", self.linux_exe()).on_input(MakerMessage::LinuxExeChanged)], + choose_button() + .on_press(MakerMessage::ChooseFileClicked(ChooseFileType::LinuxExe)), + text("Lib:"), + text_input("", self.linux_lib()).on_input(MakerMessage::LinuxLibChanged), + choose_button() + .on_press(MakerMessage::ChooseFileClicked(ChooseFileType::LinuxLib)), + ] + .align_items(Alignment::Center) + .spacing(10) + ] + .align_items(Alignment::Start), + column![ + text("Darwin"), + row![ + text("Exe:"), + row![text_input("", self.darwin_exe()) + .on_input(MakerMessage::DarwinExeChanged)], + choose_button() + .on_press(MakerMessage::ChooseFileClicked(ChooseFileType::DarwinExe)), + text("Lib:"), + text_input("", self.darwin_lib()).on_input(MakerMessage::DarwinLibChanged), + choose_button() + .on_press(MakerMessage::ChooseFileClicked(ChooseFileType::DarwinLib)), + ] + .align_items(Alignment::Center) + .spacing(10) + ] + .align_items(Alignment::Start), + column![ + text("Description"), + text_editor(self.desc()) + .on_action(MakerMessage::DescAction) + .height(Length::Fill) + ] + .align_items(Alignment::Start), + column![row![ + button("Generate").on_press(MakerMessage::GenerateClicked) + ]] + .align_items(Alignment::Center) + .width(Length::Fill), + ] + .align_items(Alignment::Start) + .padding(20) + .spacing(10); + + let message = row![text(" ").size(25), text(&self.message)].align_items(Alignment::Center); + let b1n = button( + Svg::new(Handle::from_memory(include_bytes!( + "../../assets/svg/house-heart-fill.svg" + ))) + .width(30) + .height(30) + .style(svg_style::svg_primary_base), + ) + .style(button::text) + .on_press(MakerMessage::B1nClicked); + let github = button( + Svg::new(Handle::from_memory(include_bytes!( + "../../assets/svg/github.svg" + ))) + .width(30) + .height(30) + .style(svg_style::svg_primary_base), + ) + .style(button::text) + .on_press(MakerMessage::GithubClicked); + + let theme_list = pick_list( + Theme::ALL, + Some(self.selected_theme.clone()), + MakerMessage::ThemeChanged, + ); + + let footer = column![ + horizontal_rule(0), + row![ + column![message] + .width(Length::FillPortion(1)) + .align_items(Alignment::Start), + column![row![b1n, github].align_items(Alignment::Center)] + .width(Length::FillPortion(1)) + .align_items(Alignment::Center), + column![theme_list] + .width(Length::FillPortion(1)) + .align_items(Alignment::End) + ] + .padding([0, 20]) + .align_items(Alignment::Center) + ] + .align_items(Alignment::Center); + + column![maker, footer].align_items(Alignment::Center).into() + } + + fn theme(&self) -> Self::Theme { + self.selected_theme() + } +} + +fn main() -> iced::Result { + Maker::run(Pumpbin::settings()) +} diff --git a/src/lib.rs b/src/lib.rs index da3101b..8c950f5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,6 @@ mod button_style; -mod plugin; -mod svg_style; +pub mod plugin; +pub mod svg_style; use std::{fmt::Display, fs, iter, ops::Not, path::PathBuf}; @@ -8,12 +8,14 @@ use dirs::{desktop_dir, home_dir}; use iced::{ advanced::Application, executor, + font::{Family, Stretch, Style, Weight}, widget::{ button, column, container, horizontal_rule, pick_list, row, scrollable, svg::{self, Handle}, text, text_editor, text_input, vertical_rule, Scrollable, Svg, }, - Alignment, Background, Element, Font, Length, Renderer, Task, Theme, + window::{self, Level, Position}, + Alignment, Background, Element, Font, Length, Pixels, Renderer, Settings, Size, Task, Theme, }; use memchr::memmem; use plugin::{EncryptType, Plugin, Plugins}; @@ -60,6 +62,36 @@ impl Default for Pumpbin { } impl Pumpbin { + pub fn settings() -> Settings { + let size = Size::new(1000.0, 600.0); + + Settings { + id: Some(env!("CARGO_PKG_NAME").into()), + window: window::Settings { + size, + position: Position::Centered, + min_size: Some(size), + visible: true, + resizable: true, + decorations: true, + transparent: false, + level: Level::Normal, + exit_on_close_request: true, + ..Default::default() + }, + fonts: vec![include_bytes!("../assets/JetBrainsMonoNerdFontPropo-Regular.ttf").into()], + default_font: Font { + family: Family::Name("JetBrainsMono Nerd Font"), + weight: Weight::Normal, + stretch: Stretch::Normal, + style: Style::Normal, + }, + default_text_size: Pixels(13.0), + antialiasing: true, + ..Default::default() + } + } + fn show_message(&mut self, message: String) { self.message = message; } @@ -159,8 +191,8 @@ pub enum ShellcodeSaveType { impl Display for ShellcodeSaveType { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { - ShellcodeSaveType::Local => write!(f, "Shellcode path:"), - ShellcodeSaveType::Remote => write!(f, "Shellcode url:"), + ShellcodeSaveType::Local => write!(f, "Local"), + ShellcodeSaveType::Remote => write!(f, "Remote"), } } } @@ -694,15 +726,21 @@ impl Application for Pumpbin { let font = Font::with_name("JetBrainsMono Nerd Font"); let shellcode_src = row![ - text_input(&self.shellcode_save_type.to_string(), &self.shellcode_src) - .on_input(Message::ShellcodeSrcChanged) - .icon(text_input::Icon { - font, - code_point: '󱓞', - size: None, - spacing: 12.0, - side: text_input::Side::Left, - }), + text_input( + match self.shellcode_save_type() { + ShellcodeSaveType::Local => "Shellcode path:", + ShellcodeSaveType::Remote => "Shellcode url:", + }, + &self.shellcode_src + ) + .on_input(Message::ShellcodeSrcChanged) + .icon(text_input::Icon { + font, + code_point: '󱓞', + size: None, + spacing: 12.0, + side: text_input::Side::Left, + }), button(match self.shellcode_save_type() { ShellcodeSaveType::Local => row![Svg::new(Handle::from_memory(include_bytes!( "../assets/svg/three-dots.svg" diff --git a/src/main.rs b/src/main.rs index 90ac8cc..3436fb2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,39 +1,6 @@ -use iced::{ - advanced::Application, - font::{Family, Stretch, Style, Weight}, - window::{self, Level, Position}, - Font, Pixels, Settings, Size, -}; +use iced::advanced::Application; use pumpbin::Pumpbin; fn main() -> iced::Result { - let size = Size::new(1000.0, 600.0); - - let settings = Settings { - id: Some(env!("CARGO_PKG_NAME").into()), - window: window::Settings { - size, - position: Position::Centered, - min_size: Some(size), - visible: true, - resizable: true, - decorations: true, - transparent: false, - level: Level::Normal, - exit_on_close_request: true, - ..Default::default() - }, - fonts: vec![include_bytes!("../assets/JetBrainsMonoNerdFontPropo-Regular.ttf").into()], - default_font: Font { - family: Family::Name("JetBrainsMono Nerd Font"), - weight: Weight::Normal, - stretch: Stretch::Normal, - style: Style::Normal, - }, - default_text_size: Pixels(13.0), - antialiasing: true, - ..Default::default() - }; - - Pumpbin::run(settings) + Pumpbin::run(Pumpbin::settings()) } diff --git a/src/plugin.rs b/src/plugin.rs index 3c538fe..000d71e 100644 --- a/src/plugin.rs +++ b/src/plugin.rs @@ -47,6 +47,16 @@ impl Display for EncryptType { } impl EncryptType { + pub const fn all() -> [EncryptType; 3] { + [ + EncryptType::None, + EncryptType::Xor(vec![]), + EncryptType::AesGcm(AesGcmPass { + key_holder: vec![], + nonce_holder: vec![], + }), + ] + } pub fn encrypt(&self, path: &Path) -> anyhow::Result> { let data = fs::read(path)?; @@ -70,8 +80,8 @@ impl EncryptType { #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] pub struct Bins { - executable: Option>, - dynamic_library: Option>, + pub executable: Option>, + pub dynamic_library: Option>, } impl Bins { @@ -86,9 +96,9 @@ impl Bins { #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] pub struct Platforms { - windows: Option, - linux: Option, - darwin: Option, + pub windows: Option, + pub linux: Option, + pub darwin: Option, } impl Platforms { @@ -107,15 +117,15 @@ impl Platforms { #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] pub struct Plugin { - plugin_name: String, - author: Option, - version: Option, - desc: Option, - prefix: Vec, - size_holder: Option>, - max_len: usize, - encrypt_type: EncryptType, - platforms: Platforms, + pub plugin_name: String, + pub author: Option, + pub version: Option, + pub desc: Option, + pub prefix: Vec, + pub size_holder: Option>, + pub max_len: usize, + pub encrypt_type: EncryptType, + pub platforms: Platforms, } impl Plugin {