Exemple #1
0
def outputCodeFile(filesDict, mixDir, appDir):
    cHeader = MixCode.randomClassHeader(1, 48)
    randDir = MixRandUtils.randomDir(1, 4)
    claFile = cHeader.className + '.h'
    fImport = appDir + '/' + randDir + claFile # "include xxx/xxx/xx.h"
    fParent = mixDir + os.sep + appDir + os.sep + randDir
    MixFileUtils.tryMkdir(fParent)
    MixFileUtils.outputText(fParent + claFile, MixCode.buildClassHeader(cHeader))
    filesDict[fImport] = cHeader
Exemple #2
0
def makePackFiles(mixParams):
    ignors = ['.mp3']
    dir = mixParams.assetsSrc
    count = MixRandUtils.randNumber(mixParams.packageFiles)
    for i in range(count):
        print "make mix file : %d/%d" % (i, count)
        fdir = dir + os.sep + MixRandUtils.randomDir(0, 2)
        word = MixRandUtils.randNumber(mixParams.fileSizeArea)
        MixFileUtils.tryMkdir(fdir)
        outputFile(word, fdir, ignors)
Exemple #3
0
def renameSound(soundPath, upsetDirName, mapping):
    resPos = soundPath.rfind(SOUND_DIR_NAME)
    if -1 == resPos :
        return
    resPath = soundPath[0:resPos]
    srcSearchPath = soundPath[resPos:]
    dstSearchPath = randomName(upsetDirName, mapping)
    dstPath = resPath + dstSearchPath
    MixFileUtils.tryMkdir(os.path.dirname(dstPath))
    shutil.move(soundPath, dstPath)
    mapping[dstSearchPath] = srcSearchPath
Exemple #4
0
def makeMixCodeFiles(mixDir, mixRange):
    appDir = 'app'
    # 清理混淆内容
    MixFileUtils.tryRmdir(mixDir + os.sep + appDir + os.sep)
    # 混淆代码 start
    filesDict = {}
    fileAmout = MixRandUtils.randNumber(mixRange)
    for i in range(fileAmout) :
        outputCodeFile(filesDict, mixDir, appDir)
        print 'create mix code:' + str(i) + '/' + str(fileAmout)
    # 混淆代码 end
    return filesDict
Exemple #5
0
def main(mixParams, assetsInfo):
    mapping  = None
    if mixParams.soundMapping :
        mapping = {}
        assetsInfo.soundMapping = mapping
    signName = MixFileUtils.getFileName(mixParams.assetsName)
    bitchMix(mixParams.assetsRes, signName, mapping)
Exemple #6
0
def makeMixIndex(indexPath, fileDict, assetsInfo):
    indexInfo = ClassImplInfo()
    indexInfo.className = MixFileUtils.getFileName(indexPath)

    # include start
    indexInfo.includes.append(indexInfo.className + '.h')
    mixAmount = len(fileDict)
    if mixAmount > 0:
        abmanagerPos = random.randint(1, mixAmount - 1)
        for fpath in fileDict:
            # 随机位置插入
            abmanagerPos -= 1
            if 0 == abmanagerPos:
                indexInfo.includes.append('AssetsBinManager.h')
            # 导入混淆代码
            indexInfo.includes.append(fpath)
    else:
        indexInfo.includes.append('AssetsBinManager.h')
    # include end

    # init method start
    initMethod = MethodInfo()
    initMethod.static = '+'
    initMethod.methodName = 'startGameApp'
    initMethod.returnType = 'void'
    if mixAmount > 0:
        initMethod.body = makeInitGameContent(assetsInfo, fileDict)
    else:
        initMethod.body = makeAssetsConfigs(assetsInfo)
    indexInfo.methods.append(initMethod)
    # init method end

    return buildClassImplement(indexInfo)
Exemple #7
0
def makeShowFiles(mixParams, assetsInfo):
    ignors = []
    # 生成虚拟目录结构
    dirlist = getVitruDirs(mixParams.assetsRes, (2, 4), (20, 60))
    dirnums = dirlist.__len__() - 1
    # 输出混淆文件
    count = MixRandUtils.randNumber(mixParams.displayFiles)
    for i in range(count):
        print "make mix file : %d/%d" % (i, count)
        fdir = dirlist[MixRandUtils.randNumber((0, dirnums))]
        word = MixRandUtils.randNumber(mixParams.fileSizeArea)
        MixFileUtils.tryMkdir(fdir)
        outputFile(word, fdir, ignors)
    # 更换资源包名称
    assetsDir = dirlist[MixRandUtils.randNumber((0, dirnums))]
    assetsPos = assetsDir + mixParams.assetsFile
    shutil.move(assetsInfo.assetsPath, assetsPos)
    assetName = assetsPos[assetsPos.find('/res/') + 1:]
    assetsInfo.assetsName = assetName
Exemple #8
0
def bitchMix(resDir, signName, mapping):
    # 签名
    soundDir = resDir + os.sep + SOUND_DIR_NAME
    files = []
    MixFileUtils.listfiles(soundDir, files)
    track = 0
    for f in files:
        if '.mp3' != os.path.splitext(f)[1] :
            continue
        track += 1
        print 'mix sound : %d-%s' % (track, f)
        setProperty(f, track, signName) # 签名MP3
    # 打乱文件
    if mapping != None :
        upsetDir = None
        while True:
            upsetDir = MixRandUtils.randomDir(1, 3)
            if upsetDir.find(SOUND_DIR_NAME) != 0:
                break
        for f in files:
            renameSound(f, upsetDir, mapping)
        MixFileUtils.tryRmdir(soundDir)
Exemple #9
0
def packAssets(mixParams):
    # 生成隐藏的混淆文件
    MixConfuse.makePackFiles(mixParams)
    # 构造打包信息
    assetsInfo = AssetsInfo()
    assetsInfo.assetsName = mixParams.assetsName
    assetsInfo.assetsPath = mixParams.assetsDst + os.sep + mixParams.assetsName
    assetsInfo.sign = str(MixRandUtils.randNumber((1000000, 9999999)))
    assetsInfo.version = time.strftime('%Y%m%d%H', time.localtime(time.time()))
    # 打包资源
    os.system('exec %s %s %s %s %s %s' % (
        MixFileUtils.getPacker(),
        assetsInfo.sign,
        assetsInfo.version,
        mixParams.assetsSrc,
        assetsInfo.assetsPath,
        mixParams.assetsDst
    ))
    # 混淆声音文件
    MixSound.main(mixParams, assetsInfo)
    # 生成显示的混淆文件
    MixConfuse.makeShowFiles(mixParams, assetsInfo)
    return assetsInfo
Exemple #10
0
def outputMainFile(indexPath, assetsInfo, fileDict):
    MixFileUtils.tryMkdir(os.path.dirname(indexPath))
    MixFileUtils.outputText(indexPath, MixCode.makeMixIndex(indexPath, fileDict, assetsInfo))