212 lines
7.9 KiB
Python
212 lines
7.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created on Thu Jan 19 15:04:52 2012
|
|
|
|
@author: Fesh0r
|
|
@version: v1.0
|
|
"""
|
|
|
|
import time
|
|
|
|
from commands import CLIENT, SIDE_NAME
|
|
|
|
|
|
def decompile_side(commands, side, use_ff=False, use_srg=False, no_comments=False, no_reformat=False, no_renamer=False,
|
|
no_patch=False, strip_comments=True, exc_update=False, keep_lvt=False, keep_generics=False, force_rg=False):
|
|
if not commands.checkjars(side):
|
|
commands.logger.warning('!! Missing %s jar file. Aborting !!', SIDE_NAME[side])
|
|
return False
|
|
if commands.checksourcedir(side):
|
|
commands.logger.warning('!! %s already decompiled. Run cleanup before decompiling again !!', SIDE_NAME[side])
|
|
return False
|
|
starttime = time.time()
|
|
decompiler = 'JAD'
|
|
if use_ff:
|
|
decompiler = 'fernflower'
|
|
commands.logger.info('== Decompiling %s using %s ==', SIDE_NAME[side], decompiler)
|
|
commands.logger.info('> Creating SRGs')
|
|
commands.createsrgs(side, use_srg=use_srg)
|
|
if force_rg:
|
|
commands.logger.info('> Applying Retroguard')
|
|
commands.applyrg(side)
|
|
else:
|
|
commands.logger.info('> Applying SpecialSource')
|
|
commands.applyss(side, keep_lvt=keep_lvt, keep_generics=keep_generics)
|
|
commands.logger.info('> Applying MCInjector')
|
|
commands.applyexceptor(side, exc_update=exc_update)
|
|
commands.logger.info('> Creating renamed srg')
|
|
commands.createclssrg(side)
|
|
if use_ff:
|
|
commands.logger.info('> Filtering classes')
|
|
commands.filterffjar(side)
|
|
commands.logger.info('> Decompiling')
|
|
commands.applyff(side)
|
|
else:
|
|
commands.logger.info('> Unpacking jar')
|
|
commands.extractjar(side)
|
|
commands.logger.info('> Copying classes')
|
|
commands.copycls(side)
|
|
commands.logger.info('> Applying jadretro')
|
|
commands.applyjadretro(side)
|
|
commands.logger.info('> Decompiling')
|
|
commands.applyjad(side)
|
|
commands.logger.info('> Copying sources')
|
|
commands.copysrc(side)
|
|
if use_ff:
|
|
commands.logger.info('> Applying fernflower fixes')
|
|
commands.process_fffixes(side)
|
|
else:
|
|
commands.logger.info('> Applying JAD fixes')
|
|
commands.process_jadfixes(side)
|
|
if commands.osname == 'osx' and not no_patch:
|
|
commands.logger.info('> Applying OSX JAD fixes')
|
|
commands.applypatches(side, use_ff=False, use_osx=True)
|
|
if not no_patch:
|
|
commands.logger.info('> Applying patches')
|
|
commands.applypatches(side, use_ff=use_ff)
|
|
if strip_comments:
|
|
commands.logger.info('> Cleaning comments')
|
|
commands.process_comments(side)
|
|
else:
|
|
commands.logger.warning('!! comment cleaning disabled !!')
|
|
else:
|
|
commands.logger.warning('!! patches disabled !!')
|
|
commands.logger.info('- Done in %.2f seconds', time.time() - starttime)
|
|
if not no_reformat:
|
|
reformat_side(commands, side)
|
|
else:
|
|
commands.logger.warning('!! reformating disabled !!')
|
|
if not no_renamer:
|
|
updatenames_side(commands, side, no_comments=no_comments)
|
|
else:
|
|
commands.logger.warning('!! renaming disabled !!')
|
|
return True
|
|
|
|
|
|
def reformat_side(commands, side):
|
|
if not commands.checksourcedir(side):
|
|
return False
|
|
starttime = time.time()
|
|
commands.logger.info('== Reformating %s ==', SIDE_NAME[side])
|
|
commands.logger.info('> Cleaning sources')
|
|
commands.process_cleanup(side)
|
|
if side == CLIENT:
|
|
commands.logger.info('> Replacing OpenGL constants')
|
|
commands.process_annotate(side)
|
|
if commands.has_astyle:
|
|
commands.logger.info('> Reformating sources')
|
|
commands.applyastyle(side)
|
|
else:
|
|
commands.logger.warning('!! reformating disabled due to no astyle or config !!')
|
|
commands.logger.info('- Done in %.2f seconds', time.time() - starttime)
|
|
return True
|
|
|
|
|
|
def updatenames_side(commands, side, no_comments=False):
|
|
if not commands.checksourcedir(side):
|
|
return False
|
|
starttime = time.time()
|
|
commands.logger.info('== Updating %s ==', SIDE_NAME[side])
|
|
if not no_comments:
|
|
if commands.has_doc_csv:
|
|
commands.logger.info('> Adding javadoc')
|
|
commands.process_javadoc(side)
|
|
else:
|
|
commands.logger.warning('!! javadoc disabled due to no csvs !!')
|
|
else:
|
|
commands.logger.warning('!! javadoc disabled !!')
|
|
if commands.has_name_csv:
|
|
commands.logger.info('> Renaming sources')
|
|
commands.process_rename(side)
|
|
else:
|
|
commands.logger.warning('!! renaming disabled due to no csvs !!')
|
|
commands.logger.info('- Done in %.2f seconds', time.time() - starttime)
|
|
return True
|
|
|
|
|
|
def recompile_side(commands, side):
|
|
if not commands.checksources(side):
|
|
commands.logger.warning('!! Can not find %s sources, try decompiling !!', SIDE_NAME[side])
|
|
return False
|
|
starttime = time.time()
|
|
commands.logger.info('== Recompiling %s ==', SIDE_NAME[side])
|
|
commands.logger.info('> Cleaning bin')
|
|
commands.cleanbindirs(side)
|
|
commands.logger.info('> Recompiling')
|
|
commands.recompile(side)
|
|
commands.logger.info('- Done in %.2f seconds', time.time() - starttime)
|
|
return True
|
|
|
|
|
|
def updatemd5_side(commands, side):
|
|
recomp = recompile_side(commands, side)
|
|
if recomp:
|
|
commands.logger.info('> Generating %s md5s', SIDE_NAME[side])
|
|
commands.gathermd5s(side)
|
|
return True
|
|
return False
|
|
|
|
|
|
def reobfuscate_side(commands, side, reobf_all=False, srg_names=False, force_rg=False, keep_lvt=True, keep_generics=False):
|
|
if not commands.checkmd5s(side):
|
|
commands.logger.warning('!! Can not find %s md5s !!', SIDE_NAME[side])
|
|
return False
|
|
if not commands.checkbins(side):
|
|
commands.logger.warning('!! Can not find %s bins, try recompiling !!', SIDE_NAME[side])
|
|
return False
|
|
starttime = time.time()
|
|
commands.logger.info('== Reobfuscating %s ==', SIDE_NAME[side])
|
|
commands.logger.info('> Cleaning reobf')
|
|
commands.cleanreobfdir(side)
|
|
commands.logger.info('> Generating md5s')
|
|
commands.gathermd5s(side, True)
|
|
commands.logger.info('> Packing jar')
|
|
commands.packbin(side)
|
|
commands.logger.info('> Generating class markers')
|
|
commands.applyexceptor(side, dryrun=True)
|
|
|
|
#commands.cmpclassmarkers(side)
|
|
# List gen by MCInjector should be done here
|
|
commands.logger.info('> Creating reobf mapping')
|
|
commands.creatergreobfsrg(side)
|
|
if srg_names:
|
|
commands.logger.info('> Creating srg maping')
|
|
commands.createreobfsrg()
|
|
|
|
commands.logger.info('> Reobfuscating jar')
|
|
if force_rg:
|
|
commands.applyrg(side, True)
|
|
else:
|
|
commands.applyss(side, True, srg_names=srg_names, keep_lvt=keep_lvt, keep_generics=keep_generics)
|
|
commands.logger.info('> Extracting modified classes')
|
|
commands.unpackreobfclasses(side, reobf_all, srg_names=srg_names)
|
|
commands.logger.info('- Done in %.2f seconds', time.time() - starttime)
|
|
return True
|
|
|
|
|
|
def getchangedsrc_side(commands, side):
|
|
if not commands.checkmd5s(side):
|
|
commands.logger.warning('!! Can not find %s md5s !!', SIDE_NAME[side])
|
|
return False
|
|
if not commands.checksources(side):
|
|
commands.logger.warning('!! Can not find %s sources !!', SIDE_NAME[side])
|
|
return False
|
|
commands.logger.info('> Getting changed %s source', SIDE_NAME[side])
|
|
commands.gathermd5s(side, True)
|
|
commands.unpackmodifiedclasses(side)
|
|
return True
|
|
|
|
|
|
def updateids_side(commands, side, no_comments=False):
|
|
if not commands.checksourcedir(side):
|
|
return False
|
|
starttime = time.time()
|
|
commands.logger.info('== Updating %s ==', SIDE_NAME[side])
|
|
if commands.has_renumber_csv:
|
|
commands.logger.info('> Renumbering sources')
|
|
commands.process_renumber(side)
|
|
else:
|
|
commands.logger.warning('!! renumbering disabled due to no csvs !!')
|
|
commands.logger.info('- Done in %.2f seconds', time.time() - starttime)
|
|
return True
|