mirror of
https://github.com/pumpbin/pumpbin
synced 2026-03-14 23:04:30 -07:00
fix(replace): no error returned when holder not found
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -3177,7 +3177,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pumpbin"
|
name = "pumpbin"
|
||||||
version = "1.1.0"
|
version = "1.1.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bincode",
|
"bincode",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "pumpbin"
|
name = "pumpbin"
|
||||||
version = "1.1.0"
|
version = "1.1.1"
|
||||||
authors = ["b1n <b1n@b1n.io>"]
|
authors = ["b1n <b1n@b1n.io>"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "PumpBin is an Implant Generation Platform."
|
description = "PumpBin is an Implant Generation Platform."
|
||||||
|
|||||||
10
build.rs
10
build.rs
@@ -1,15 +1,13 @@
|
|||||||
fn build_capnp() {
|
fn main() {
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
{
|
||||||
capnpc::CompilerCommand::new()
|
capnpc::CompilerCommand::new()
|
||||||
.src_prefix("capnp")
|
.src_prefix("capnp")
|
||||||
.file("capnp/plugin.capnp")
|
.file("capnp/plugin.capnp")
|
||||||
.output_path("capnp")
|
.output_path("capnp")
|
||||||
.run()
|
.run()
|
||||||
.expect("schema compiler command");
|
.expect("schema compiler command");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
|
||||||
#[cfg(debug_assertions)]
|
|
||||||
build_capnp();
|
|
||||||
|
|
||||||
#[cfg(target_os = "windows")]
|
#[cfg(target_os = "windows")]
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -479,14 +479,14 @@ impl Plugin {
|
|||||||
self.replace().src_prefix(),
|
self.replace().src_prefix(),
|
||||||
shellcode_src.as_slice(),
|
shellcode_src.as_slice(),
|
||||||
self.replace().max_len(),
|
self.replace().max_len(),
|
||||||
);
|
)?;
|
||||||
|
|
||||||
// replace pass
|
// replace pass
|
||||||
for pass in pass {
|
for pass in pass {
|
||||||
let holder = pass.holder();
|
let holder = pass.holder();
|
||||||
let replace_by = pass.replace_by();
|
let replace_by = pass.replace_by();
|
||||||
|
|
||||||
utils::replace(bin, holder, replace_by, holder.len());
|
utils::replace(bin, holder, replace_by, holder.len())?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// replace size_holder
|
// replace size_holder
|
||||||
@@ -503,7 +503,7 @@ impl Plugin {
|
|||||||
.collect();
|
.collect();
|
||||||
size_bytes.extend_from_slice(shellcode_len_bytes.as_slice());
|
size_bytes.extend_from_slice(shellcode_len_bytes.as_slice());
|
||||||
|
|
||||||
utils::replace(bin, size_holder, size_bytes.as_slice(), size_holder.len());
|
utils::replace(bin, size_holder, size_bytes.as_slice(), size_holder.len())?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
16
src/utils.rs
16
src/utils.rs
@@ -1,5 +1,6 @@
|
|||||||
use std::iter;
|
use std::iter;
|
||||||
|
|
||||||
|
use anyhow::anyhow;
|
||||||
use iced::{
|
use iced::{
|
||||||
advanced::graphics::image::image_rs::ImageFormat,
|
advanced::graphics::image::image_rs::ImageFormat,
|
||||||
window::{self, Level, Position},
|
window::{self, Level, Position},
|
||||||
@@ -62,11 +63,17 @@ pub fn window_settings() -> window::Settings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn replace(bin: &mut [u8], holder: &[u8], replace_by: &[u8], max_len: usize) {
|
pub fn replace(
|
||||||
|
bin: &mut [u8],
|
||||||
|
holder: &[u8],
|
||||||
|
replace_by: &[u8],
|
||||||
|
max_len: usize,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
let mut replace_by = replace_by.to_owned();
|
let mut replace_by = replace_by.to_owned();
|
||||||
|
|
||||||
let find = memmem::find_iter(bin, holder).next();
|
let position = memmem::find_iter(bin, holder)
|
||||||
if let Some(position) = find {
|
.next()
|
||||||
|
.ok_or(anyhow!("Not found {}", String::from_utf8_lossy(holder)))?;
|
||||||
let mut random: Vec<u8> = iter::repeat(b'0')
|
let mut random: Vec<u8> = iter::repeat(b'0')
|
||||||
.take(max_len - replace_by.len())
|
.take(max_len - replace_by.len())
|
||||||
.collect();
|
.collect();
|
||||||
@@ -74,5 +81,6 @@ pub fn replace(bin: &mut [u8], holder: &[u8], replace_by: &[u8], max_len: usize)
|
|||||||
replace_by.extend_from_slice(random.as_slice());
|
replace_by.extend_from_slice(random.as_slice());
|
||||||
|
|
||||||
bin[position..(position + max_len)].copy_from_slice(replace_by.as_slice());
|
bin[position..(position + max_len)].copy_from_slice(replace_by.as_slice());
|
||||||
}
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user