@@ -352,16 +352,49 @@ static BOOL shelldev_edit(shell_t* sh, std::vector<asm_t>* assemblies, std::vect
352352
353353static BOOL shelldev_toshell (std::vector<asm_t >* assemblies, std::vector<std::string> parts)
354354{
355- if (parts[0 ] == " c" || parts[ 0 ] == " C " )
355+ if (parts[0 ] == " c" )
356356 {
357+ int count = 0 ;
357358 std::cout << " unsigned char shellcode[] = {" << std::endl;
358- for (asm_t assembly : * assemblies)
359+ for (int i = 0 ; i < assemblies-> size (); i++ )
359360 {
360- for (unsigned char byte : assembly.bytes )
361- printf (" 0x%x, " , byte);
361+ for (int j = 0 ; j < assemblies->at (i).instruction .size (); j++)
362+ {
363+ if (count % 12 == 0 )
364+ printf (" \n " );
365+ else
366+ printf (" 0x%x, " , assemblies->at (i).instruction [j]);
367+
368+ count++;
369+ }
362370 }
363371 std::cout << " };" << std::endl;
364372 }
373+ else if (parts[0 ] == " cs" )
374+ {
375+ int count = 0 ;
376+ std::cout << " byte[] shellcode = {" << std::endl;
377+ for (int i = 0 ; i < assemblies->size (); i++)
378+ {
379+ for (int j = 0 ; j < assemblies->at (i).instruction .size (); j++)
380+ {
381+ if (count % 12 == 0 )
382+ printf (" \n " );
383+ else
384+ printf (" 0x%x, " , assemblies->at (i).instruction [j]);
385+
386+ count++;
387+ }
388+ }
389+ std::cout << " };" << std::endl;
390+ }
391+ else if (parts[0 ] == " raw" )
392+ {
393+ for (int i = 0 ; i < assemblies->size (); i++)
394+ for (int j = 0 ; j < assemblies->at (i).instruction .size (); j++)
395+ printf (" %X" , assemblies->at (i).instruction [j]);
396+ printf (" \n " );
397+ }
365398
366399 return TRUE ;
367400}
@@ -385,7 +418,8 @@ static BOOL winrepl_command_help()
385418 std::cout << " .del line\t\t Delete specified line from list." << std::endl;
386419 std::cout << " .read addr size\t\t Read from a memory address." << std::endl;
387420 std::cout << " .write addr hexdata\t Write to a memory address." << std::endl;
388- std::cout << " .toshell format\t\t Convert list to selected shellcode format. Available formats: c" << std::endl;
421+ std::cout << " .toshell format\t\t Convert list to selected shellcode format. Available formats: c, cs, raw" << std::endl;
422+ // std::cout << ".inject pid\t\tTest shellcode by injecting it into the process." << std::endl;
389423 std::cout << " .allocate size\t\t Allocate a memory buffer." << std::endl;
390424 std::cout << " .loadlibrary path\t Load a DLL into the process." << std::endl;
391425 std::cout << " .kernel32 func\t\t Get address of a kernel32 export." << std::endl;
@@ -412,6 +446,8 @@ BOOL shelldev_run_command(shell_t* sh, std::string command, std::vector<asm_t>*
412446 return shelldev_edit (sh, assemblies, parts);
413447 else if (mainCmd == " .toshell" )
414448 return shelldev_toshell (assemblies, parts);
449+ else if (mainCmd == " .inject" )
450+ return shelldev_inject_shellcode (assemblies, parts[0 ]);
415451 else if (mainCmd == " .read" )
416452 return shelldev_command_read (sh, parts);
417453 else if (mainCmd == " .del" )
0 commit comments