Skip to content

Commit

Permalink
New tool to generate spoof Apple data for VMX file
Browse files Browse the repository at this point in the history
  • Loading branch information
DrDonk committed Jun 4, 2016
1 parent 490cb90 commit 0aa719f
Show file tree
Hide file tree
Showing 7 changed files with 2,250 additions and 1 deletion.
16 changes: 16 additions & 0 deletions extract-smbiosdb.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import plistlib


smbiosdb = plistlib.readPlist('smbiosdb.plist')
# print header
print 'hw.model' + '\t' + 'family' + '\t' + 'board-id' + '\t' + 'serial.type' + '\t' + 'eee.code' + '\t' + \
'bios.version' + '\t' + 'y1' + '\t' + 'y2' + '\t' + 'y3' + '\t' + 'y4'

for model in smbiosdb.keys():
data = smbiosdb[model]
for s in data:
line = s['SMproductname'] + '\t' + s['SMfamily'] + '\t' + s['SMboardproduct'] + '\t' + str(len(s['SMserial'])) \
+ '\t' + s['Number'] + '\t' + s['SMbiosversion']
for y in s['Years']:
line = line + '\t' + y
print line
193 changes: 193 additions & 0 deletions generate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
import json
import random
import string

# Years and months
# 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022
years = ['C','D','F','G','H','J','K','L','M','N','P','Q','R','T','V','W','X','Y','1','2','3','4','5','6','7','8']

# Week numbers from 1-52
# B is used to shift indexing to 1 and is not used
weeks = ['B','C','D','F','G','H','J','K','L','M','N','P','Q','R','T','V','W','X','Y','1','2','3','4','5','6','7','8',
'C','D','F','G','H','J','K','L','M','N','P','Q','R','T','V','W','X','Y','1','2','3','4','5','6','7','8']

# Values to generate 3 code production number
production = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'0','1','2','3','4','5','6','7','8','9']

# MLB codes
ttt = ['200', '600', '403', '404', '405', '303', '108', '207', '609', '501', '306', '102', '701', '301', '501',
'101', '300', '130', '100', '270', '310', '902', '104', '401', '902', '500', '700', '802']

cc = ['GU', '4N', 'J9', 'QX', 'OP', 'CD', 'GU']

eeee = ['DYWF', 'F117', 'F502', 'F505', 'F9GY', 'F9H0', 'F9H1', 'F9H2', 'DYWD', 'F504', 'F116', 'F503', 'F2FR',
'F653', 'F49P', 'F651', 'F49R', 'F652', 'DYW3', 'F64V', 'F0V5', 'F64W', 'FF4G', 'FF4H', 'FF4J', 'FF4K',
'FF4L', 'FF4M', 'FF4N', 'FF4P', 'DNY3', 'DP00', 'DJWK', 'DM66', 'DNJK', 'DKG1', 'DM65', 'DNJJ', 'DKG2',
'DM67', 'DNJL', 'DJWM', 'DMT3', 'DMT5', 'DJWN', 'DM69', 'DJWP', 'DM6C']

kk = ['1H', '1M' 'AD' '1F' 'A8' 'UE' 'JA' 'JC' '8C' 'CB' 'FB']

# Loaded JSON model database
smbiosdb = {}

model = None
year = None
week = None
yearweek = None
run = None
mlb = None
rom = None


def loaddb():
global smbiosdb
# Load the json database file
with open('smbiosdb.json') as json_file:
smbiosdb = json.load(json_file)


def getmlb():
global mlb

if model['serial.type'] == 11:
mlb = yearweek + '0'+ run + id_generator(4)
elif model['serial.type'] == 12:
mlb = 'C02{0}{1}{2}{3}{4}{5}'.format(str(year - 2010), str(week).zfill(2),
random.choice(ttt), random.choice(cc), random.choice(eeee), random.choice(kk))
else:
pass


def getmodel():
global model
modeltype = None

# Build a menu with the types of Mac to select hw.model
modeltypes = ['iMac', 'Mac mini', 'Mac Pro', 'MacBook', 'MacBook Air', 'MacBook Pro']
print("[1] iMac\n[2] Mac mini\n[3] Mac Pro\n[4] MacBook\n[5] MacBook Air\n[6] MacBook Pro\n")
while True:
try:
index = int(raw_input('Please enter model family [1-6]: '))
except:
print "This is not a number."
else:
if (index >= 1) and (index <= 6):
modeltype = modeltypes[index - 1]
break
else:
print 'Invalid model family selected: ', index

# Now build a menu with selected models
i = 1
models = []
for m in smbiosdb:
if m['family'] == modeltype:
print '[' + str(i) + '] ' + m['hw.model']
models.append(m['hw.model'])
i += 1

while True:
try:
index = int(raw_input('Please enter model [1-{}]: '.format(i - 1)))
except:
print "This is not a number."
else:
if (index >= 1) and (index <= (i-1)):
model = models[index - 1]
break
else:
print 'Invalid model selected: ', index

for m in smbiosdb:
if m['hw.model'] == model:
model = m


def getrom():
global rom

# Using an Apple Wifi ethernet OUI AC:BC:32
rom = "acbc32%02x%02x%02x" % (
random.randint(0, 255),
random.randint(0, 255),
random.randint(0, 255),
)


def getrun():
global run

# Generate 3 random characters from list
run = id_generator()


def getweek():
global year
global week
global yearweek

# Get the serial number type
serlen = model['serial.type']

# Save year for MLB processing
year = model['y1']

# Get a week number
while True:
try:
week = int(input('Please enter week for year {0} (1 - 53): '.format(year)))
except:
print "This is not a week number."
else:
if (week >= 1) and (week <= 53):
break
else:
print 'Invalid week: ', week

# Format date based on serial number length
if serlen == 11:
yearweek = 'CK{0}{1}'.format(str(year)[-1], str(week).zfill(2))
elif serlen == 12:
index_year = (year - 2010) * 2

if week <= 27:
yearweek = 'C02{0}{1}'.format(years[index_year], weeks[week])
else:
yearweek = 'C02{0}{1}'.format(years[index_year + 1], weeks[week])
else:
return


def id_generator(size=3, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))


def main():
loaddb()
getmodel()
getweek()
getrun()
getmlb()
print
print '# Passthru host definitions - FALSE'
print 'board-id.reflectHost = "FALSE"'
print 'hw.model.reflectHost = "FALSE"'
print 'serialNumber.reflectHost = "FALSE"'
print 'smbios.reflectHost = "FALSE"'
print 'efi.nvram.var.ROM.reflectHost = "FALSE"'
print 'efi.nvram.var.MLB.reflectHost = "FALSE"'
print 'SMBIOS.use12CharSerialNumber = "TRUE"'
print 'smc.version = "0"'
print
print '# Generated information'
print 'hw.model = "{0}"'.format(model['hw.model'])
print 'board-id = "{0}"'.format(model['board-id'])
print 'serialNumber = "{0}{1}{2}"'.format(yearweek, run, model['eee.code'])
print 'efi.nvram.var.ROM = "{0}"'.format(rom)
print 'efi.nvram.var.MLB = "{0}"'.format(mlb)
print


if __name__ == '__main__':
main()
2 changes: 1 addition & 1 deletion gettools.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def main():
shutil.move(convertPath(dir + '/tools/payload/darwin.iso'), convertPath(dir + '/tools/darwin.iso'))
shutil.move(convertPath(dir + '/tools/payload/darwin.iso.sig'), convertPath(dir + '/tools/darwin.iso.sig'))

# Cleanup workiong files and folders
# Cleanup working files and folders
shutil.rmtree(convertPath(dir + '/tools/payload'), True)
os.remove(convertPath(dir + '/tools/com.vmware.fusion.tools.darwin.zip.tar'))
os.remove(convertPath(dir + '/tools/com.vmware.fusion.tools.darwin.zip'))
Expand Down
Loading

0 comments on commit 0aa719f

Please sign in to comment.