From e0c9004c799cc9f3ffeea98f206b1929c99470dd Mon Sep 17 00:00:00 2001 From: psycore8 <76014584+psycore8@users.noreply.github.com> Date: Mon, 16 Dec 2024 23:45:59 +0100 Subject: [PATCH 1/5] bytes2chem initial --- obfuscator/mrwhite.py | 34 ++++++++++++++++++++++++++++++++++ shencode.py | 18 +++++++++++++++++- utils/msf.py | 6 +++--- 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 obfuscator/mrwhite.py diff --git a/obfuscator/mrwhite.py b/obfuscator/mrwhite.py new file mode 100644 index 0000000..427c477 --- /dev/null +++ b/obfuscator/mrwhite.py @@ -0,0 +1,34 @@ +import utils.arg + +class ByteToChemicalMapping: + Author = 'psycore8' + Description = 'Obfuscate bytes - the Breaking Bad Style' + Version = '1.0.0' + + def __init__(self, input_file, output_file): + self.input_file = input_file + self.output_file = output_file + self.mapping = { + i: f"Chemical Compound {i}" for i in range(256) + } + + def init(): + spName = 'bytes2chem' + spArgList = [ + ['-i', '--input', '', '', 'Input File'], + ['-o', '--output', '', '', 'Output File'] + ] + utils.arg.CreateSubParser(spName, ByteToChemicalMapping.Description, spArgList) + + def byte_to_chemical(self, byte_sequence): + """ + Konvertiert eine Sequenz von Bytes (0-255) in chemische Verbindungen. + + :param byte_sequence: Liste von Bytes (z. B. [0, 1, 2, 255]) + :return: Liste von Strings, die die chemischen Verbindungen repräsentieren + """ + compounds = [] + for byte in byte_sequence: + compound = self.mapping.get(byte, f"Unknown byte: {byte}") + compounds.append(compound) + return compounds \ No newline at end of file diff --git a/shencode.py b/shencode.py index 41bcae2..83b9322 100644 --- a/shencode.py +++ b/shencode.py @@ -13,11 +13,12 @@ import encoder.byteswap as byteswap import encoder.xorpoly as xorpoly import encoder.xor as xor +import obfuscator.mrwhite as mrwhite import obfuscator.qrcode as qrcode import obfuscator.rolhash as rolhash import obfuscator.uuid as uuid -Version = '0.6.0' +Version = '0.6.1' # make sure your metasploit binary folder is in your PATH variable if os.name == 'nt': @@ -51,6 +52,7 @@ def main(command_line=None): if os.name == 'nt': injection.inject.init() msf.msfvenom.init() + mrwhite.ByteToChemicalMapping.init() qrcode.qrcode_obfuscator.init() if os.name == 'nt': rolhash.ror2rol_obfuscator.init() @@ -143,6 +145,20 @@ def main(command_line=None): print(f"{nstate.OKBLUE} try to generate UUIDs") print(uuid_obf.CreateVar()) + elif arguments.command == 'bytes2chem': + # Instanz der Klasse + mapper = mrwhite.ByteToChemicalMapping(arguments.input, arguments.output) + + # Beispiel-Byte-Sequenz + byte_sequence = [0, 1, 2, 255, 28, 128, 37] # Beispielbytes + + # Bytes zu chemischen Verbindungen zuordnen + result = mapper.byte_to_chemical(byte_sequence) + + # Ausgabe + for byte, compound in zip(byte_sequence, result): + print(f"Byte {byte}: {compound}") + elif arguments.command == 'qrcode': qr = qrcode.qrcode_obfuscator(arguments.input, arguments.output, '') filecheck, outstrings = FileCheck.CheckSourceFile(qr.input_file, 'OBF-QRC') diff --git a/utils/msf.py b/utils/msf.py index 5525fa2..51eb043 100644 --- a/utils/msf.py +++ b/utils/msf.py @@ -3,9 +3,9 @@ class msfvenom: - Author = 'psycore8' - Description = 'Generate payloads with metasploit' - Version = '1.1.0' + Author = 'psycore8' + Description = 'Generate payloads with metasploit' + Version = '1.1.0' def __init__(self, command_line): self.command_line = command_line From 8acd0cac5cb0b11acb423248a2cd12d66d18cf6e Mon Sep 17 00:00:00 2001 From: psycore8 <76014584+psycore8@users.noreply.github.com> Date: Thu, 19 Dec 2024 22:57:43 +0100 Subject: [PATCH 2/5] feed obfuscator --- _dev.bat | 2 +- obfuscator/feed.py | 84 ++++++++++++++++++++++++++++++++++++++++++ obfuscator/mrwhite.py | 34 ----------------- requirements.txt | Bin 392 -> 418 bytes shencode.py | 49 +++++++++++++----------- utils/header.py | 40 ++++++++++++++++++++ 6 files changed, 152 insertions(+), 57 deletions(-) create mode 100644 obfuscator/feed.py delete mode 100644 obfuscator/mrwhite.py create mode 100644 utils/header.py diff --git a/_dev.bat b/_dev.bat index b4bb3fc..f43aa1e 100644 --- a/_dev.bat +++ b/_dev.bat @@ -9,5 +9,5 @@ rem doskey shen-ror=python3.12 shencode.py ror2rol $* rem doskey shen-uid=python3.12 shencode.py uuid $* rem doskey shen-xop=python3.12 shencode.py xorpoly $* rem doskey shen-xoe=python3.12 shencode.py xorenc $* -doskey shc=python3.12 shencode.py $* +doskey shc=python shencode.py $* doskey /MACROS \ No newline at end of file diff --git a/obfuscator/feed.py b/obfuscator/feed.py new file mode 100644 index 0000000..7fdc496 --- /dev/null +++ b/obfuscator/feed.py @@ -0,0 +1,84 @@ +import utils.arg +import datetime +from lxml import etree + +class feed_obfuscator: + Author = 'psycore8' + Description = 'obfuscate shellcodes as XML Feed' + Version = '1.0.0' + feed_fake_uri = 'https://www.microloft.com/' + feed_fake_title = 'Developer News' + feed_fake_subtitle = 'The latest developer news from microloft.com' + feed_fake_author = 'Bill Ports' + feed_fake_ids = [] + shellcode = '' + + def __init__(self, input_file, output_file): + self.input_file = input_file + self.output_file = output_file + + + def init(): + spName = 'feed' + spArgList = [ + ['-i', '--input', '', '', 'Input file for feed obfucsation'], + ['-o', '--output', '', '', 'Output file for feed obfucsation'] + ] + utils.arg.CreateSubParser(spName, feed_obfuscator.Description, spArgList) + + def open_file(self): + try: + for b in open(self.input_file, 'rb').read(): + self.shellcode += b.to_bytes(1, 'big').hex() + return True + except FileNotFoundError: + return False + + def convert_bytes_to_fake_id(self, block_size=16): + s = self.shellcode.encode('utf-8') + self.feed_fake_ids.extend([s[i:i + block_size] for i in range(0, len(s), block_size)]) + print(f'{self.feed_fake_ids}') + + + def generate_feed(self): + date_time = datetime.datetime.now() + root = etree.Element('feed') + + # Header + feed_link = etree.SubElement(root, 'link', attrib= + { + 'href': f'{self.feed_fake_uri}feed.xml', + 'rel': 'self', + 'type': 'application/atom+xml' + }) + feed_updated = etree.SubElement(root, 'updated') + feed_updated.text = f'{date_time}' + feed_id = etree.SubElement(root, 'id') + feed_id.text = f'{self.feed_fake_uri}feed.xml' + feed_title = etree.SubElement(root, 'title', attrib={'type': 'html'}) + feed_title.text = f'{self.feed_fake_title}' + feed_subtitle = etree.SubElement(root, 'subtitle') + feed_subtitle.text = f'{self.feed_fake_subtitle}' + feed_author = etree.SubElement(root, 'author') + feed_author_name = etree.SubElement(feed_author, 'name') + feed_author_name.text = f'{self.feed_fake_author}' + + # Entries + i = 1 + for id in self.feed_fake_ids: + entry = etree.SubElement(root, 'entry') + entry_title = etree.SubElement(entry, 'title', attrib={'type': 'html'}) + entry_title.text = f'Title {i}' + entry_link = etree.SubElement(entry, 'link', attrib={'href': f'{self.feed_fake_uri}0{i}/02/title{i}', 'rel': 'alternate', 'type': 'text/html', 'title': 'Title 1'}) + entry_published = etree.SubElement(entry, 'published') + entry_published.text = f'{date_time}' + entry_updated = etree.SubElement(entry, 'updated') + entry_updated.text = f'{date_time}' + entry_id = etree.SubElement(entry, 'id') + entry_id.text = f'{self.feed_fake_uri}{id.decode('utf-8')}' # 16 bytes part of shellcode + i += 1 + + xml_str = etree.tostring(root, pretty_print=True, xml_declaration=True, encoding="utf-8") + with open(self.output_file, "wb") as file: + file.write(xml_str) + diff --git a/obfuscator/mrwhite.py b/obfuscator/mrwhite.py deleted file mode 100644 index 427c477..0000000 --- a/obfuscator/mrwhite.py +++ /dev/null @@ -1,34 +0,0 @@ -import utils.arg - -class ByteToChemicalMapping: - Author = 'psycore8' - Description = 'Obfuscate bytes - the Breaking Bad Style' - Version = '1.0.0' - - def __init__(self, input_file, output_file): - self.input_file = input_file - self.output_file = output_file - self.mapping = { - i: f"Chemical Compound {i}" for i in range(256) - } - - def init(): - spName = 'bytes2chem' - spArgList = [ - ['-i', '--input', '', '', 'Input File'], - ['-o', '--output', '', '', 'Output File'] - ] - utils.arg.CreateSubParser(spName, ByteToChemicalMapping.Description, spArgList) - - def byte_to_chemical(self, byte_sequence): - """ - Konvertiert eine Sequenz von Bytes (0-255) in chemische Verbindungen. - - :param byte_sequence: Liste von Bytes (z. B. [0, 1, 2, 255]) - :return: Liste von Strings, die die chemischen Verbindungen repräsentieren - """ - compounds = [] - for byte in byte_sequence: - compound = self.mapping.get(byte, f"Unknown byte: {byte}") - compounds.append(compound) - return compounds \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 08cfa18276ef39640740b2d1386564794366e3fb..bf244d1f24e5315f0d90fe9e2e59c43e5bdb1148 100644 GIT binary patch delta 31 jcmeBRUc@}1Pc(<2f+3e7hrt#IO&RnUjDgr-V&{JVdU6M- delta 9 QcmZ3)+`&AdZ{mty01~1Ef&c&j diff --git a/shencode.py b/shencode.py index 83b9322..77dcaa2 100644 --- a/shencode.py +++ b/shencode.py @@ -6,6 +6,7 @@ import utils.extract as extract import utils.formatout as formatout import utils.hashes as hashes +import utils.header if os.name == 'nt': import utils.injection as injection import utils.msf as msf @@ -13,7 +14,7 @@ import encoder.byteswap as byteswap import encoder.xorpoly as xorpoly import encoder.xor as xor -import obfuscator.mrwhite as mrwhite +import obfuscator.feed as feed import obfuscator.qrcode as qrcode import obfuscator.rolhash as rolhash import obfuscator.uuid as uuid @@ -30,13 +31,15 @@ def main(command_line=None): print(f"{nstate.HEADER}") - print(f" _______ __ _______ __ ") - print(f" | _ | | |--. .-----. .-----. | _ | .-----. .--| | .-----.") - print(f" | 1___| | | | -__| | | |. 1___| | _ | | _ | | -__|") - print(f" |____ | |__|__| |_____| |__|__| |. |___ |_____| |_____| |_____|") - print(f" |: 1 | |: 1 | ") - print(f" |::.. . | |::.. . | ") - print(f" `-------\' `-------\' ") + print(f'{utils.header.get_header()}') + # print(f"{nstate.HEADER}") + # print(f" _______ __ _______ __ ") + # print(f" | _ | | |--. .-----. .-----. | _ | .-----. .--| | .-----.") + # print(f" | 1___| | | | -__| | | |. 1___| | _ | | _ | | -__|") + # print(f" |____ | |__|__| |_____| |__|__| |. |___ |_____| |_____| |_____|") + # print(f" |: 1 | |: 1 | ") + # print(f" |::.. . | |::.. . | ") + # print(f" `-------\' `-------\' ") print(f'Version {Version} by psycore8 -{nstate.ENDC} {nstate.TextLink('https://www.nosociety.de')}') #print(f"Version {Version} by psycore8 -{nstate.ENDC} {nstate.LINK}https://www.nosociety.de{nstate.ENDC}") @@ -52,7 +55,7 @@ def main(command_line=None): if os.name == 'nt': injection.inject.init() msf.msfvenom.init() - mrwhite.ByteToChemicalMapping.init() + feed.feed_obfuscator.init() qrcode.qrcode_obfuscator.init() if os.name == 'nt': rolhash.ror2rol_obfuscator.init() @@ -145,19 +148,21 @@ def main(command_line=None): print(f"{nstate.OKBLUE} try to generate UUIDs") print(uuid_obf.CreateVar()) - elif arguments.command == 'bytes2chem': - # Instanz der Klasse - mapper = mrwhite.ByteToChemicalMapping(arguments.input, arguments.output) - - # Beispiel-Byte-Sequenz - byte_sequence = [0, 1, 2, 255, 28, 128, 37] # Beispielbytes - - # Bytes zu chemischen Verbindungen zuordnen - result = mapper.byte_to_chemical(byte_sequence) - - # Ausgabe - for byte, compound in zip(byte_sequence, result): - print(f"Byte {byte}: {compound}") + elif arguments.command == 'feed': + feed_obf = feed.feed_obfuscator(arguments.input, arguments.output) + + filecheck, outstrings = FileCheck.CheckSourceFile(feed_obf.input_file, 'OBF-RSS') + for string in outstrings: + print(string) + if filecheck: + feed_obf.open_file() + feed_obf.convert_bytes_to_fake_id() + feed_obf.generate_feed() + else: + exit() + filecheck, outstrings = FileCheck.CheckSourceFile(feed_obf.output_file, 'OBF-RSS') + for string in outstrings: + print(string) elif arguments.command == 'qrcode': qr = qrcode.qrcode_obfuscator(arguments.input, arguments.output, '') diff --git a/utils/header.py b/utils/header.py new file mode 100644 index 0000000..8f7936f --- /dev/null +++ b/utils/header.py @@ -0,0 +1,40 @@ +import random + +header1 = """ + _______ __ _______ __ + | _ | | |--. .-----. .-----. | _ | .-----. .--| | .-----. + | 1___| | | | -__| | | |. 1___| | _ | | _ | | -__| + |____ | |__|__| |_____| |__|__| |. |___ |_____| |_____| |_____| + |: 1 | |: 1 | + |::.. . | |::.. . | + `-------\' `-------\' + """ + +header2 = """ + .dMMMb dMP dMP dMMMMMP dMMMMb .aMMMb .aMMMb dMMMMb dMMMMMP + dMP" VP dMP dMP dMP dMP dMP dMP"VMP dMP"dMP dMP VMP dMP + VMMMb dMMMMMP dMMMP dMP dMP dMP dMP dMP dMP dMP dMMMP +dP .dMP dMP dMP dMP dMP dMP dMP.aMP dMP.aMP dMP.aMP dMP +VMMMP" dMP dMP dMMMMMP dMP dMP VMMMP" VMMMP" dMMMMP" dMMMMMP +""" + +header3 = """ + .d8888b. 888 .d8888b. 888 +d88P Y88b 888 d88P Y88b 888 +Y88b. 888 888 888 888 + "Y888b. 88888b. .d88b. 88888b. 888 .d88b. .d88888 .d88b. + "Y88b. 888 "88b d8P Y8b 888 "88b 888 d88""88b d88" 888 d8P Y8b + "888 888 888 88888888 888 888 888 888 888 888 888 888 88888888 +Y88b d88P 888 888 Y8b. 888 888 Y88b d88P Y88..88P Y88b 888 Y8b. + "Y8888P" 888 888 "Y8888 888 888 "Y8888P" "Y88P" "Y88888 "Y8888 +""" + +def get_header(): + rnd = random.randint(1, 3) + print(f'{rnd}') + if rnd == 1: + return header1 + elif rnd == 2: + return header2 + elif rnd == 3: + return header3 \ No newline at end of file From e9ad3c776ff17aef1cce0f42eb859c87bd53d95d Mon Sep 17 00:00:00 2001 From: psycore8 <76014584+psycore8@users.noreply.github.com> Date: Sun, 22 Dec 2024 12:55:53 +0100 Subject: [PATCH 3/5] Feed Obfuscator --- README.md | 20 +--- feedtest.x | 235 +++++++++++++++++++++++++++++++++++++++++++++ obfuscator/feed.py | 21 +++- shencode.py | 10 +- utils/header.py | 28 +++++- 5 files changed, 291 insertions(+), 23 deletions(-) create mode 100644 feedtest.x diff --git a/README.md b/README.md index 5076373..e36e662 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## Features -### Version 0.6.0 +### Version 0.6.1 - general - `extract` - [extract](https://github.com/psycore8/shencode/wiki/extract) from/to offset @@ -19,6 +19,7 @@ - `xorenc` - [Encode payload](https://github.com/psycore8/shencode/wiki/xorenc) with custom XOR key - `xorpoly` - [polymorphic x64](https://github.com/psycore8/shencode/wiki/xorpoly) in-memory decoder (for details, visit this [Blog Post](https://www.nosociety.de/en:it-security:blog:obfuscation_polymorphic_in_memory_decoder)) - obfuscator + - `Feed` - - `QR-Code` hide OpCodes as [QR-Code image](https://github.com/psycore8/shencode/wiki/qrcode) - `ROR13` to `ROL` [conversion with custom key](https://github.com/psycore8/shencode/wiki/ror2rol) (Windows only) - `UUID` [obfuscation](https://github.com/psycore8/shencode/wiki/uuid) - Please, check out my [Blog Post](https://www.nosociety.de/en:it-security:blog:obfuscation_shellcode_als_uuids_tarnen_-_teil_1) about this encoder @@ -29,21 +30,10 @@ Check out the [ShenCode Docs](https://heckhausen.it/shencode/wiki/) for more inf ## Release Notes -#### Improvements - -- `byteswap` - New XOR Encryption, Swapping Bytes +- `feed` - `core` - Tested on Linux and Windows -- `core` - Output optimizations -- `core` - Better class implementations -- `core` - Fixed Linux import error -- `formatout` - Missing comma at EOL of C# output -- `formatout` - `--no-break` disable line break in output -- `extract` - Replaced `--first-byte` with `--start-offset` argument -- `extract` - Replaced `--last-byte` with `--end-offset` argument -- `extract` - Short arguments are `-so / -eo` -- `qrcode` - Fixed non functional implementation -- `xorpoly` - Code optimizations -- +- `core` - header... + ## References - [Byte-Swapping](https://www.nosociety.de/en:it-security:blog:obfuscation_byteswapping) diff --git a/feedtest.x b/feedtest.x new file mode 100644 index 0000000..81b2876 --- /dev/null +++ b/feedtest.x @@ -0,0 +1,235 @@ + + + + 2024-12-22 12:15:03.104716 + https://www.microloft.com/feed.xml + Developer News + The latest developer news from microloft.com + + Bill Ports + + + Title 1 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/554889e54883ec40 + + + Title 2 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/4831c0488945f848 + + + Title 3 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/8945f0488945e848 + + + Title 4 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/8945e0488945d848 + + + Title 5 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/8945d0488945c850 + + + Title 6 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/48b857696e457865 + + + Title 7 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/631148c1e00848c1 + + + Title 8 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/e80850488965d848 + + + Title 9 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/31c065488b406048 + + + Title 10 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/8b4018488b402048 + + + Title 11 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/8b18488b03488b40 + + + Title 12 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/204889c34831c98b + + + Title 13 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/433c4801d84831c9 + + + Title 14 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/80c1888b04084801 + + + Title 15 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/d88b481448894df8 + + + Title 16 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/8b481c4801d94889 + + + Title 17 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/4df08b48204801d9 + + + Title 18 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/48894de88b482448 + + + Title 19 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/01d948894de04831 + + + Title 20 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/c04831c9488b75d8 + + + Title 21 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/488b7de8fc8b3c87 + + + Title 22 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/4801dfb108f3a674 + + + Title 23 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/0948ffc0483b45f8 + + + Title 24 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/75e2488b4de0488b + + + Title 25 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/55f0668b04418b04 + + + Title 26 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/824801d84831d248 + + + Title 27 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/31c95148b963616c + + + Title 28 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/632e657865514889 + + + Title 29 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/e1b2014883e4f048 + + + Title 30 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/83ec20ffd04883c4 + + + Title 31 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/384883c4184883c4 + + + Title 32 + + 2024-12-22 12:15:03.104716 + 2024-12-22 12:15:03.104716 + https://www.microloft.com/085dc3 + + diff --git a/obfuscator/feed.py b/obfuscator/feed.py index 7fdc496..4b1f7b4 100644 --- a/obfuscator/feed.py +++ b/obfuscator/feed.py @@ -1,5 +1,6 @@ import utils.arg import datetime +import feedparser from lxml import etree class feed_obfuscator: @@ -13,16 +14,19 @@ class feed_obfuscator: feed_fake_ids = [] shellcode = '' - def __init__(self, input_file, output_file): + def __init__(self, input_file, output_file, uri): self.input_file = input_file self.output_file = output_file + self.uri = uri def init(): spName = 'feed' spArgList = [ ['-i', '--input', '', '', 'Input file for feed obfucsation'], - ['-o', '--output', '', '', 'Output file for feed obfucsation'] + ['-o', '--output', '', '', 'Output file for feed obfucsation'], + ['-r', '--reassemble', '', 'store_true', 'Reassemble fake feed to Shellcode'], + ['-u', '--uri', '', '', 'URI to fake feed'] ] utils.arg.CreateSubParser(spName, feed_obfuscator.Description, spArgList) @@ -37,7 +41,7 @@ def open_file(self): def convert_bytes_to_fake_id(self, block_size=16): s = self.shellcode.encode('utf-8') self.feed_fake_ids.extend([s[i:i + block_size] for i in range(0, len(s), block_size)]) - print(f'{self.feed_fake_ids}') + #print(f'{self.feed_fake_ids}') def generate_feed(self): @@ -82,3 +86,14 @@ def generate_feed(self): with open(self.output_file, "wb") as file: file.write(xml_str) + def reassemble_shellcode(self): + feed = feedparser.parse(self.uri) + for entry in feed.entries: + pos = entry.id.rfind('/') + self.shellcode += entry.id[pos + 1:] + #print(self.shellcode) + out_shellcode = bytes.fromhex(self.shellcode) + with open(self.output_file, 'wb') as file: + file.write(out_shellcode) + + diff --git a/shencode.py b/shencode.py index 77dcaa2..a18d937 100644 --- a/shencode.py +++ b/shencode.py @@ -149,8 +149,14 @@ def main(command_line=None): print(uuid_obf.CreateVar()) elif arguments.command == 'feed': - feed_obf = feed.feed_obfuscator(arguments.input, arguments.output) - + feed_obf = feed.feed_obfuscator(arguments.input, arguments.output, arguments.uri) + + if feed_obf.uri: + feed_obf.reassemble_shellcode() + filecheck, outstrings = FileCheck.CheckSourceFile(feed_obf.output_file, 'OBF-RSS') + for string in outstrings: + print(string) + exit() filecheck, outstrings = FileCheck.CheckSourceFile(feed_obf.input_file, 'OBF-RSS') for string in outstrings: print(string) diff --git a/utils/header.py b/utils/header.py index 8f7936f..14141c2 100644 --- a/utils/header.py +++ b/utils/header.py @@ -29,12 +29,34 @@ "Y8888P" 888 888 "Y8888 888 888 "Y8888P" "Y88P" "Y88888 "Y8888 """ +header4 = """ + :::=== ::: === :::===== :::= === :::===== :::==== :::==== :::===== + ::: ::: === ::: :::===== ::: ::: === ::: === ::: + ===== ======== ====== ======== === === === === === ====== + === === === === === ==== === === === === === === + ====== === === ======== === === ======= ====== ======= ======== +""" + +header5 = """ + + ____ ___ ______ _______ ____ ________ ____ ______ +/ ___| |_ ||____ ||. __ | / ___||. ___ | |__ | |____ | +\\___ \\ |_| _ | | | | | || | | | | | | | _ | | + ___) | | | |_| | | _| || |___ | |___| | ____| | | | |_| +|____/ | | |_||___| \\____| |_______|/____/\\_\\ | | + |_| |_| +""" + def get_header(): - rnd = random.randint(1, 3) - print(f'{rnd}') + rnd = random.randint(1, 5) + # print(f'{rnd}') if rnd == 1: return header1 elif rnd == 2: return header2 elif rnd == 3: - return header3 \ No newline at end of file + return header3 + elif rnd == 4: + return header4 + elif rnd == 5: + return header5 \ No newline at end of file From 08c1a618465bfa1b5d4ecb2f21f7a63088ed4f42 Mon Sep 17 00:00:00 2001 From: psycore8 <76014584+psycore8@users.noreply.github.com> Date: Sun, 22 Dec 2024 16:16:39 +0100 Subject: [PATCH 4/5] 061 --- README.md | 31 +++++++++++++++---------------- requirements.txt | Bin 418 -> 494 bytes shencode-061.png | Bin 0 -> 76386 bytes shencode.py | 10 +--------- 4 files changed, 16 insertions(+), 25 deletions(-) create mode 100644 shencode-061.png diff --git a/README.md b/README.md index e36e662..28d8147 100644 --- a/README.md +++ b/README.md @@ -2,27 +2,27 @@ **A versatile tool for working with shellcodes.** -![](shencode-060.png) +![|800](shencode-061.png) ## Features ### Version 0.6.1 - general - - `extract` - [extract](https://github.com/psycore8/shencode/wiki/extract) from/to offset - - `formatout` - [display raw shellcodes](https://github.com/psycore8/shencode/wiki/formatout) in `C++, C#` and more - - `inject` - [inject shellcode](https://github.com/psycore8/shencode/wiki/inject) into process (Windows only) - - `msfvenom` - [create payloads](https://github.com/psycore8/shencode/wiki/msfvenom) with msfvenom + - `extract` - [extract](https://www.heckhausen.it/shencode/wiki/extract) from/to offset + - `formatout` - [display raw shellcodes](https://www.heckhausen.it/shencode/wiki/formatout) in `C++, C#` and more + - `inject` - [inject shellcode](https://www.heckhausen.it/shencode/wiki/inject) into process (Windows only) + - `msfvenom` - [create payloads](https://www.heckhausen.it/shencode/wiki/msfvenom) with msfvenom - encoder - - `aesenc` - [Encrypt](https://github.com/psycore8/shencode/wiki/aesenc) payload with AES - - `byteswap` - New XOR Encryption, [Swapping Bytes](https://github.com/psycore8/shencode/wiki/byteswap) ([Blog Post](https://www.nosociety.de/en:it-security:blog:obfuscation_byteswapping)) - - `xorenc` - [Encode payload](https://github.com/psycore8/shencode/wiki/xorenc) with custom XOR key - - `xorpoly` - [polymorphic x64](https://github.com/psycore8/shencode/wiki/xorpoly) in-memory decoder (for details, visit this [Blog Post](https://www.nosociety.de/en:it-security:blog:obfuscation_polymorphic_in_memory_decoder)) + - `aesenc` - [Encrypt](https://www.heckhausen.it/shencode/wiki/aesenc) payload with AES + - `byteswap` - New XOR Encryption, [Swapping Bytes](https://www.heckhausen.it/shencode/wiki/byteswap) ([Blog Post](https://www.nosociety.de/en:it-security:blog:obfuscation_byteswapping)) + - `xorenc` - [Encode payload](https://www.heckhausen.it/shencode/wiki/xorenc) with custom XOR key + - `xorpoly` - [polymorphic x64](https://www.heckhausen.it/shencode/wiki/xorpoly) in-memory decoder (for details, visit this [Blog Post](https://www.nosociety.de/en:it-security:blog:obfuscation_polymorphic_in_memory_decoder)) - obfuscator - - `Feed` - - - `QR-Code` hide OpCodes as [QR-Code image](https://github.com/psycore8/shencode/wiki/qrcode) - - `ROR13` to `ROL` [conversion with custom key](https://github.com/psycore8/shencode/wiki/ror2rol) (Windows only) - - `UUID` [obfuscation](https://github.com/psycore8/shencode/wiki/uuid) - Please, check out my [Blog Post](https://www.nosociety.de/en:it-security:blog:obfuscation_shellcode_als_uuids_tarnen_-_teil_1) about this encoder + - `Feed` - Splits Bytes in a [feed.xml file](https://www.heckhausen.it/shencode/wiki/feed) as article IDs + - `QR-Code` hide OpCodes as [QR-Code image](https://www.heckhausen.it/shencode/wiki/qrcode) + - `ROR13` to `ROL` [conversion with custom key](https://www.heckhausen.it/shencode/wiki/ror2rol) (Windows only) + - `UUID` [obfuscation](https://www.heckhausen.it/shencode/wiki/uuid) - Please, check out my [Blog Post](https://www.nosociety.de/en:it-security:blog:obfuscation_shellcode_als_uuids_tarnen_-_teil_1) about this encoder ## How to use @@ -30,9 +30,8 @@ Check out the [ShenCode Docs](https://heckhausen.it/shencode/wiki/) for more inf ## Release Notes -- `feed` -- `core` - Tested on Linux and Windows -- `core` - header... +- `feed` - A new obfuscation module +- `core` - added some different logos for startup ## References diff --git a/requirements.txt b/requirements.txt index bf244d1f24e5315f0d90fe9e2e59c43e5bdb1148..00eb581682cfe4142dc0d1f9c3d18a4d4983e0e7 100644 GIT binary patch delta 81 zcmZ3){Em4-pK=;QDiEeH6fh(*6fqP7*+mStKxoFG$6x@&h75)iJ5S3OGo&-*GUNbZ VCPNZ~F+(<3ks(x(!DN5NU;y`<5WoNc delta 13 VcmaFIyoh;1-^6XlCNE(00{|^>21Eb= diff --git a/shencode-061.png b/shencode-061.png new file mode 100644 index 0000000000000000000000000000000000000000..93ad53ac44c3c35a94905064489c188b7868a181 GIT binary patch literal 76386 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

^z~}&Z{P83tZS#W8{R_JyP|;M-+-EeqkKW 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 a`;Mg@ym^lMgd@ChCPwDhDz4uB?f(LB>Du`K literal 0 HcmV?d00001 diff --git a/shencode.py b/shencode.py index a18d937..d3aff9e 100644 --- a/shencode.py +++ b/shencode.py @@ -32,16 +32,8 @@ def main(command_line=None): print(f"{nstate.HEADER}") print(f'{utils.header.get_header()}') - # print(f"{nstate.HEADER}") - # print(f" _______ __ _______ __ ") - # print(f" | _ | | |--. .-----. .-----. | _ | .-----. .--| | .-----.") - # print(f" | 1___| | | | -__| | | |. 1___| | _ | | _ | | -__|") - # print(f" |____ | |__|__| |_____| |__|__| |. |___ |_____| |_____| |_____|") - # print(f" |: 1 | |: 1 | ") - # print(f" |::.. . | |::.. . | ") - # print(f" `-------\' `-------\' ") print(f'Version {Version} by psycore8 -{nstate.ENDC} {nstate.TextLink('https://www.nosociety.de')}') - #print(f"Version {Version} by psycore8 -{nstate.ENDC} {nstate.LINK}https://www.nosociety.de{nstate.ENDC}") + ########################## ### BEGIN INIT SECTION ### From 4e9bf01f49fc75233de8d46445babd60ab882d00 Mon Sep 17 00:00:00 2001 From: psycore8 <76014584+psycore8@users.noreply.github.com> Date: Sun, 22 Dec 2024 19:44:31 +0100 Subject: [PATCH 5/5] Hotfox msf.py --- utils/msf.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/utils/msf.py b/utils/msf.py index 5525fa2..51eb043 100644 --- a/utils/msf.py +++ b/utils/msf.py @@ -3,9 +3,9 @@ class msfvenom: - Author = 'psycore8' - Description = 'Generate payloads with metasploit' - Version = '1.1.0' + Author = 'psycore8' + Description = 'Generate payloads with metasploit' + Version = '1.1.0' def __init__(self, command_line): self.command_line = command_line