diff --git a/README.md b/README.md index e17ce92..9a25316 100644 --- a/README.md +++ b/README.md @@ -95,24 +95,22 @@ hunter hunter_patched ld-2.23.so libc.so.6 readme solve.py from pwn import * +context.terminal = ['gnome-terminal', '--'] +context.binary = binary = "./hunter_patched" +context.update(arch='x86_64') + exe = ELF("./hunter_patched") libc = ELF("./libc.so.6") ld = ELF("./ld-2.23.so") -context.binary = exe - - def conn(): - if args.LOCAL: - r = process([exe.path]) - if args.DEBUG: - gdb.attach(r) - else: + if args.REMOTE: r = remote("addr", 1337) - + else: + r = process(binary) + gdb.attach(r) return r - def main(): r = conn() @@ -123,4 +121,5 @@ def main(): if __name__ == "__main__": main() + ``` diff --git a/src/solvepy.rs b/src/solvepy.rs index 1f2ef2e..2c37f52 100644 --- a/src/solvepy.rs +++ b/src/solvepy.rs @@ -62,6 +62,28 @@ fn make_bindings(opts: &Opts) -> String { .join("\n") } +fn make_bin_patched_path(opts: &Opts) -> String { + // Helper to make one binding line + fn bind>(opt_path: Option

) -> Option { + opt_path + .as_ref() + .map(|path| format!("\"{}\"", path.as_ref().display(),)) + } + [ + bind( + patch_bin::bin_patched_path(opts) + .as_ref() + .or_else(|| opts.bin.as_ref()), + ) + ] + .iter() + .filter_map(|x| x.as_ref()) + .cloned() + .collect::>() + .join("\n") +} + + /// Make arguments to pwntools `process()` function fn make_proc_args(opts: &Opts) -> String { format!("[{}.path]", opts.template_bin_name) @@ -69,6 +91,7 @@ fn make_proc_args(opts: &Opts) -> String { /// Fill in template pwntools solve script with (binary, libc, linker) paths fn make_stub(opts: &Opts) -> Result { + let templ = match &opts.template_path { Some(path) => { let data = fs::read(path).context(ReadSnafu)?; @@ -82,6 +105,7 @@ fn make_stub(opts: &Opts) -> Result { "bindings".to_string() => make_bindings(opts), "proc_args".to_string() => make_proc_args(opts), "bin_name".to_string() => opts.template_bin_name.clone(), + "bin_path".to_string() => make_bin_patched_path(opts), }, ) .context(FmtSnafu) diff --git a/src/template.py b/src/template.py index 961da1c..c843e1f 100644 --- a/src/template.py +++ b/src/template.py @@ -2,22 +2,20 @@ from pwn import * -{bindings} - -context.binary = {bin_name} +context.terminal = ['gnome-terminal', '--'] +context.binary = binary = {bin_path} +context.update(arch='x86_64') +{bindings} def conn(): - if args.LOCAL: - r = process({proc_args}) - if args.DEBUG: - gdb.attach(r) + if args.REMOTE: + r = remote("addr", 1234) else: - r = remote("addr", 1337) - + r = process(binary) + gdb.attach(r) return r - def main(): r = conn()