mirror of
https://github.com/dobin/SuperMega
synced 2026-06-03 01:27:11 +00:00
78 lines
2.9 KiB
Python
78 lines
2.9 KiB
Python
from jinja2 import Template
|
|
import pprint
|
|
import shutil
|
|
|
|
from helper import *
|
|
from config import config
|
|
from project import project
|
|
from model import *
|
|
from observer import observer
|
|
|
|
use_templates = True
|
|
|
|
|
|
# INPUT:
|
|
# plugins/
|
|
# source/
|
|
#
|
|
# Output:
|
|
# build/main.c
|
|
# build/*.h
|
|
def create_c_from_template():
|
|
plugin_allocator = ""
|
|
plugin_decoder = ""
|
|
plugin_executor = ""
|
|
|
|
with open("plugins/allocator/rwx_1.c", "r", encoding='utf-8') as file:
|
|
plugin_allocator = file.read()
|
|
|
|
if project.decoder_style == DecoderStyle.PLAIN_1:
|
|
with open("plugins/decoder/plain_1.c", "r", encoding='utf-8') as file:
|
|
plugin_decoder = file.read()
|
|
elif project.decoder_style == DecoderStyle.XOR_1:
|
|
with open("plugins/decoder/xor_1.c", "r", encoding='utf-8') as file:
|
|
plugin_decoder = file.read()
|
|
|
|
with open("plugins/executor/direct_1.c", "r", encoding='utf-8') as file:
|
|
plugin_executor = file.read()
|
|
|
|
|
|
if project.source_style == SourceStyle.peb_walk:
|
|
if use_templates:
|
|
with open("source/peb_walk/template.c", 'r', encoding='utf-8') as file:
|
|
template_content = file.read()
|
|
observer.add_text("main_c_template", template_content)
|
|
|
|
template = Template(template_content)
|
|
rendered_template = template.render({
|
|
'plugin_allocator': plugin_allocator,
|
|
'plugin_decoder': plugin_decoder,
|
|
'plugin_executor': plugin_executor,
|
|
})
|
|
with open("build/main.c", "w", encoding='utf-8') as file:
|
|
file.write(rendered_template)
|
|
observer.add_text("main_c_rendered", rendered_template)
|
|
shutil.copy("source/peb_walk/peb_lookup.h", "build/peb_lookup.h")
|
|
|
|
else:
|
|
observer.add_text("main_c", file_readall_text("source/peb_walk/main.c"))
|
|
shutil.copy("source/peb_walk/main.c", "build/main.c")
|
|
shutil.copy("source/peb_walk/peb_lookup.h", "build/peb_lookup.h")
|
|
|
|
elif project.source_style == SourceStyle.iat_reuse:
|
|
if use_templates:
|
|
with open("source/iat_reuse/template.c", 'r', encoding='utf-8') as file:
|
|
template_content = file.read()
|
|
observer.add_text("main_c_template", template_content)
|
|
template = Template(template_content)
|
|
rendered_template = template.render({
|
|
'plugin_allocator': plugin_allocator,
|
|
'plugin_decoder': plugin_decoder,
|
|
'plugin_executor': plugin_executor,
|
|
})
|
|
with open("build/main.c", "w", encoding='utf-8') as file:
|
|
file.write(rendered_template)
|
|
observer.add_text("main_c_rendered", rendered_template)
|
|
else:
|
|
observer.add_text("main_c", file_readall_text("source/iat_reuse/main.c"))
|
|
shutil.copy("source/iat_reuse/main.c", "build/main.c") |