This commit is contained in:
young thug 2021-02-12 20:49:04 -05:00
parent 11f4531e80
commit b3ee8ce119
2 changed files with 75 additions and 0 deletions

28
README.md Normal file
View File

@ -0,0 +1,28 @@
# b64mute - Base64 Mutator
This program applies simple mutations to base64 encoded strings for obfuscation purposes. It applies an uneven chunk approach to concatenate arbitrary chunks with padding.
For more info read [this writeup](https://n0.lol/encmute/)!
[Duck Duck Go](https://duckduckgo.com)
## Usage ##
Generate a mutation from a string
$ python3 b64mute.py -d "netspooky"
bmU=dHNwb28=a3k=
Generate a mutation on a file:
$ python3 b64mute.py -f test.txt
aA==dHQ=cHM6Ly90d2k=dHRlcg==Lg==Y28=bS8=bg==ZQ==dA==c3Bvb2t5
Save the output to a file:
$ python3 b64mute.py -d "admin:hunter2" -o out.txt
Test your string:
$ base64 -d <<< "bmU=dHNwb28=a3k="
netspooky

47
b64mute.py Normal file
View File

@ -0,0 +1,47 @@
import base64
import argparse
from random import randrange
parser = argparse.ArgumentParser(description='Base64 Mutator')
parser.add_argument('-d', dest='indata', help='Input data (string)')
parser.add_argument('-f', dest='infile', help='Input file')
parser.add_argument('-o', dest='outfile', help='Output file')
def doEncode(mBytes):
b64Bytes = base64.b64encode(mBytes)
return b64Bytes
def openFile(filename):
with open(filename, "rb") as f:
fileobj = f.read()
return fileobj
if __name__ == '__main__':
args = parser.parse_args()
indata = args.indata
infile = args.infile
outfile = args.outfile
outmsg = b'' # This will hold the base64 object
if indata:
data2enc = indata
data2enc_bytes = data2enc.encode('utf-8') # Convert to bytes object
elif infile:
data2enc = openFile(infile)
data2enc_bytes = data2enc # It's already a bytes object here
msgLen = len(data2enc_bytes)
x = 0
while x < msgLen:
chunkSize = randrange(1,4)
outmsg += doEncode(data2enc_bytes[x:x+chunkSize])
x = x + chunkSize
if outfile: # We write to file
f = open(outfile, 'wb')
f.write(outmsg)
f.close()
else: # Otherwise write to stdout
b64Enc = outmsg.decode('utf-8')
print("{}".format(b64Enc))