feat: add pumpbin maker

This commit is contained in:
b1n
2024-06-21 20:04:21 +08:00
parent 8615191aa1
commit afe0840adb
6 changed files with 867 additions and 823 deletions

759
Cargo.lock generated
View File

@@ -165,143 +165,6 @@ dependencies = [
"libloading 0.7.4", "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]] [[package]]
name = "atomic-waker" name = "atomic-waker"
version = "1.1.2" version = "1.1.2"
@@ -387,15 +250,6 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 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]] [[package]]
name = "block2" name = "block2"
version = "0.5.1" version = "0.5.1"
@@ -405,19 +259,6 @@ dependencies = [
"objc2", "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]] [[package]]
name = "bumpalo" name = "bumpalo"
version = "3.16.0" version = "3.16.0"
@@ -772,16 +613,6 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" 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]] [[package]]
name = "dirs" name = "dirs"
version = "5.0.1" version = "5.0.1"
@@ -809,17 +640,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 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]] [[package]]
name = "dlib" name = "dlib"
version = "0.5.2" version = "0.5.2"
@@ -879,33 +699,6 @@ dependencies = [
"linux-raw-sys 0.6.4", "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]] [[package]]
name = "equivalent" name = "equivalent"
version = "1.0.1" version = "1.0.1"
@@ -947,27 +740,6 @@ dependencies = [
"num-traits", "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]] [[package]]
name = "fast-srgb8" name = "fast-srgb8"
version = "1.0.0" version = "1.0.0"
@@ -1074,15 +846,6 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 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]] [[package]]
name = "futures" name = "futures"
version = "0.3.30" version = "0.3.30"
@@ -1132,19 +895,6 @@ version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 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]] [[package]]
name = "futures-macro" name = "futures-macro"
version = "0.3.30" version = "0.3.30"
@@ -1396,12 +1146,6 @@ version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]] [[package]]
name = "hexf-parse" name = "hexf-parse"
version = "0.2.1" version = "0.2.1"
@@ -1564,136 +1308,6 @@ dependencies = [
"winit", "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]] [[package]]
name = "imagesize" name = "imagesize"
version = "0.12.0" version = "0.12.0"
@@ -1894,12 +1508,6 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4"
[[package]]
name = "litemap"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
[[package]] [[package]]
name = "lock_api" name = "lock_api"
version = "0.4.12" version = "0.4.12"
@@ -1955,15 +1563,6 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "memoffset"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
dependencies = [
"autocfg",
]
[[package]] [[package]]
name = "metal" name = "metal"
version = "0.27.0" version = "0.27.0"
@@ -1989,17 +1588,6 @@ dependencies = [
"simd-adler32", "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]] [[package]]
name = "naga" name = "naga"
version = "0.19.2" version = "0.19.2"
@@ -2059,19 +1647,6 @@ dependencies = [
"jni-sys", "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]] [[package]]
name = "num-traits" name = "num-traits"
version = "0.2.19" version = "0.2.19"
@@ -2401,16 +1976,6 @@ dependencies = [
"libredox 0.0.2", "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]] [[package]]
name = "owned_ttf_parser" name = "owned_ttf_parser"
version = "0.21.0" version = "0.21.0"
@@ -2444,12 +2009,6 @@ dependencies = [
"syn 2.0.66", "syn 2.0.66",
] ]
[[package]]
name = "parking"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
[[package]] [[package]]
name = "parking_lot" name = "parking_lot"
version = "0.11.2" version = "0.11.2"
@@ -2596,17 +2155,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 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]] [[package]]
name = "pkg-config" name = "pkg-config"
version = "0.3.30" version = "0.3.30"
@@ -2854,7 +2402,6 @@ version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251" checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251"
dependencies = [ dependencies = [
"ashpd",
"block", "block",
"dispatch", "dispatch",
"js-sys", "js-sys",
@@ -3026,37 +2573,6 @@ dependencies = [
"syn 2.0.66", "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]] [[package]]
name = "simd-adler32" name = "simd-adler32"
version = "0.3.7" version = "0.3.7"
@@ -3147,16 +2663,6 @@ dependencies = [
"serde", "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]] [[package]]
name = "softbuffer" name = "softbuffer"
version = "0.4.3" version = "0.4.3"
@@ -3199,12 +2705,6 @@ dependencies = [
"bitflags 2.5.0", "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]] [[package]]
name = "static_assertions" name = "static_assertions"
version = "1.1.0" version = "1.1.0"
@@ -3275,17 +2775,6 @@ dependencies = [
"unicode-ident", "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]] [[package]]
name = "sys-locale" name = "sys-locale"
version = "0.3.1" version = "0.3.1"
@@ -3295,18 +2784,6 @@ dependencies = [
"libc", "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]] [[package]]
name = "termcolor" name = "termcolor"
version = "1.4.1" version = "1.4.1"
@@ -3375,16 +2852,6 @@ dependencies = [
"tracing", "tracing",
] ]
[[package]]
name = "tinystr"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
dependencies = [
"displaydoc",
"zerovec",
]
[[package]] [[package]]
name = "tinyvec" name = "tinyvec"
version = "1.6.0" version = "1.6.0"
@@ -3407,15 +2874,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a"
dependencies = [ dependencies = [
"backtrace", "backtrace",
"bytes",
"libc",
"mio",
"num_cpus", "num_cpus",
"pin-project-lite", "pin-project-lite",
"signal-hook-registry",
"socket2",
"tracing",
"windows-sys 0.48.0",
] ]
[[package]] [[package]]
@@ -3490,17 +2950,6 @@ version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 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]] [[package]]
name = "unicode-bidi" name = "unicode-bidi"
version = "0.3.15" version = "0.3.15"
@@ -3577,18 +3026,6 @@ dependencies = [
"subtle", "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]] [[package]]
name = "usvg" name = "usvg"
version = "0.36.0" version = "0.36.0"
@@ -3650,18 +3087,6 @@ dependencies = [
"tiny-skia-path", "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]] [[package]]
name = "version_check" name = "version_check"
version = "0.9.4" version = "0.9.4"
@@ -4348,18 +3773,6 @@ dependencies = [
"memchr", "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]] [[package]]
name = "x11-dl" name = "x11-dl"
version = "2.21.0" version = "2.21.0"
@@ -4398,16 +3811,6 @@ version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" 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]] [[package]]
name = "xkbcommon-dl" name = "xkbcommon-dl"
version = "0.4.2" version = "0.4.2"
@@ -4451,87 +3854,6 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" 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]] [[package]]
name = "zeno" name = "zeno"
version = "0.2.3" version = "0.2.3"
@@ -4557,84 +3879,3 @@ dependencies = [
"quote", "quote",
"syn 2.0.66", "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",
]

View File

@@ -2,13 +2,18 @@
name = "pumpbin" name = "pumpbin"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"
default-run = "pumpbin"
authors = ["b1n <b1n@b1n.io>"] authors = ["b1n <b1n@b1n.io>"]
license = "MIT" license = "MIT"
homepage = "https://b1n.io" homepage = "https://b1n.io"
repository = "https://github.com/pumpbin/pumpbin" repository = "https://github.com/pumpbin/pumpbin"
[[bin]]
name = "maker"
path = "src/bin/maker.rs"
[dependencies] [dependencies]
rfd = { version = "0.14.1", default-features = false , features = ["tokio"]} rfd = { version = "0.14.1", default-features = false}
dirs = "5.0.1" dirs = "5.0.1"
flatbuffers = "24.3.25" flatbuffers = "24.3.25"
open = "5.1.4" open = "5.1.4"

783
src/bin/maker.rs Normal file
View File

@@ -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<String, String>),
WindowsLibChooseDone(Result<String, String>),
LinuxExeChooseDone(Result<String, String>),
LinuxLibChooseDone(Result<String, String>),
DarwinExeChooseDone(Result<String, String>),
DarwinLibChooseDone(Result<String, String>),
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::Message>) {
(Self::default(), Task::none())
}
fn title(&self) -> String {
"PumpBin Maker".to_string()
}
fn update(&mut self, message: Self::Message) -> iced::Task<Self::Message> {
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::<usize>() {
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())
}

View File

@@ -1,6 +1,6 @@
mod button_style; mod button_style;
mod plugin; pub mod plugin;
mod svg_style; pub mod svg_style;
use std::{fmt::Display, fs, iter, ops::Not, path::PathBuf}; use std::{fmt::Display, fs, iter, ops::Not, path::PathBuf};
@@ -8,12 +8,14 @@ use dirs::{desktop_dir, home_dir};
use iced::{ use iced::{
advanced::Application, advanced::Application,
executor, executor,
font::{Family, Stretch, Style, Weight},
widget::{ widget::{
button, column, container, horizontal_rule, pick_list, row, scrollable, button, column, container, horizontal_rule, pick_list, row, scrollable,
svg::{self, Handle}, svg::{self, Handle},
text, text_editor, text_input, vertical_rule, Scrollable, Svg, 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 memchr::memmem;
use plugin::{EncryptType, Plugin, Plugins}; use plugin::{EncryptType, Plugin, Plugins};
@@ -60,6 +62,36 @@ impl Default for Pumpbin {
} }
impl 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) { fn show_message(&mut self, message: String) {
self.message = message; self.message = message;
} }
@@ -159,8 +191,8 @@ pub enum ShellcodeSaveType {
impl Display for ShellcodeSaveType { impl Display for ShellcodeSaveType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
ShellcodeSaveType::Local => write!(f, "Shellcode path:"), ShellcodeSaveType::Local => write!(f, "Local"),
ShellcodeSaveType::Remote => write!(f, "Shellcode url:"), ShellcodeSaveType::Remote => write!(f, "Remote"),
} }
} }
} }
@@ -694,15 +726,21 @@ impl Application for Pumpbin {
let font = Font::with_name("JetBrainsMono Nerd Font"); let font = Font::with_name("JetBrainsMono Nerd Font");
let shellcode_src = row![ let shellcode_src = row![
text_input(&self.shellcode_save_type.to_string(), &self.shellcode_src) text_input(
.on_input(Message::ShellcodeSrcChanged) match self.shellcode_save_type() {
.icon(text_input::Icon { ShellcodeSaveType::Local => "Shellcode path:",
font, ShellcodeSaveType::Remote => "Shellcode url:",
code_point: '󱓞', },
size: None, &self.shellcode_src
spacing: 12.0, )
side: text_input::Side::Left, .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() { button(match self.shellcode_save_type() {
ShellcodeSaveType::Local => row![Svg::new(Handle::from_memory(include_bytes!( ShellcodeSaveType::Local => row![Svg::new(Handle::from_memory(include_bytes!(
"../assets/svg/three-dots.svg" "../assets/svg/three-dots.svg"

View File

@@ -1,39 +1,6 @@
use iced::{ use iced::advanced::Application;
advanced::Application,
font::{Family, Stretch, Style, Weight},
window::{self, Level, Position},
Font, Pixels, Settings, Size,
};
use pumpbin::Pumpbin; use pumpbin::Pumpbin;
fn main() -> iced::Result { fn main() -> iced::Result {
let size = Size::new(1000.0, 600.0); Pumpbin::run(Pumpbin::settings())
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)
} }

View File

@@ -47,6 +47,16 @@ impl Display for EncryptType {
} }
impl 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<Vec<u8>> { pub fn encrypt(&self, path: &Path) -> anyhow::Result<Vec<u8>> {
let data = fs::read(path)?; let data = fs::read(path)?;
@@ -70,8 +80,8 @@ impl EncryptType {
#[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)]
pub struct Bins { pub struct Bins {
executable: Option<Vec<u8>>, pub executable: Option<Vec<u8>>,
dynamic_library: Option<Vec<u8>>, pub dynamic_library: Option<Vec<u8>>,
} }
impl Bins { impl Bins {
@@ -86,9 +96,9 @@ impl Bins {
#[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)]
pub struct Platforms { pub struct Platforms {
windows: Option<Bins>, pub windows: Option<Bins>,
linux: Option<Bins>, pub linux: Option<Bins>,
darwin: Option<Bins>, pub darwin: Option<Bins>,
} }
impl Platforms { impl Platforms {
@@ -107,15 +117,15 @@ impl Platforms {
#[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)]
pub struct Plugin { pub struct Plugin {
plugin_name: String, pub plugin_name: String,
author: Option<String>, pub author: Option<String>,
version: Option<String>, pub version: Option<String>,
desc: Option<String>, pub desc: Option<String>,
prefix: Vec<u8>, pub prefix: Vec<u8>,
size_holder: Option<Vec<u8>>, pub size_holder: Option<Vec<u8>>,
max_len: usize, pub max_len: usize,
encrypt_type: EncryptType, pub encrypt_type: EncryptType,
platforms: Platforms, pub platforms: Platforms,
} }
impl Plugin { impl Plugin {