将二进制文件转为C风格shellcode的Python代码
代码
#!/usr/bin/env python
# encoding: utf-8
import os
import binascii
from datetime import datetime, timezone
colnum_per_row = 16
file_path = 'demo.sys'
output_path = 'demo_shellcode.h'
array_name = 'demo_shellcode'
xor_key = 0xd8
def exe_to_c_array(file_path, array_name):
    with open(file_path, 'rb') as file:
        binary_data = file.read()
    
    # Encrypt binary data
    binary_data = bytes( byte ^ xor_key for i, byte in enumerate(binary_data) )
    hex_data = binascii.hexlify(binary_data).decode()
    c_array = "const unsigned char {}[] = \n".format(array_name)
    row = "\""
    for i in range(2, len(hex_data) + 2, 2):
        # print(i, len(hex_data), hex_data[i-2], hex_data[i-1])
        row += "\\x" + hex_data[i-2] + hex_data[i-1]
        if i % (colnum_per_row * 2) == 0 or i >= len(hex_data):
            row += "\""
            if i + 2 < len(hex_data):
                row += "\n"
            c_array += row
            row = "\""
    c_array += ";";
    
    return c_array
if __name__ == '__main__':
    # print(exe_to_c_array(file_path, array_name))
    with open(output_path, 'w', encoding='utf-8') as f:
        utc_time = datetime.now(timezone.utc)
        format_time = utc_time.strftime("%Y-%m-%d %H:%M:%S")
        f.write('// Generate UTC Time: {}\n'.format(format_time))
        f.write('// Source File: {}\n\n'.format(os.path.basename(file_path)))
        f.write('// clang-format off\n\n')
        f.write('const unsigned char xor_key = 0x{:x};\n\n'.format(xor_key))
        f.write(exe_to_c_array(file_path, array_name))
        f.write('\n\n// clang-format on\n')
    本文为博主总结文章,欢迎转载,请注明出处。

                
            
        
浙公网安备 33010602011771号