Ejemplo n.º 1
0
def main():
    userOptions = OptionParser()
    userOptions.add_option("-i",
                           "--input",
                           dest="inputFile",
                           type="string",
                           help="Input file")
    userOptions.add_option("-o",
                           "--output",
                           dest="outputFile",
                           type="string",
                           help="Where to save plain data")
    userOptions.add_option("-v",
                           "--verbose",
                           dest="isVerbose",
                           action="store_true",
                           help="Set verbose output on")
    userOptions.set_defaults(inputFile=None, outputFile=None, isVerbose=False)
    (options, args) = userOptions.parse_args(sys.argv[1:])
    inputFile = options.inputFile
    outputFile = options.outputFile
    isVerbose = options.isVerbose
    inputFile = cmdLineInputFile({}, inputFile, userOptions)
    outputFile = cmdLineOutputFile({}, outputFile, inputFile)

    data = file(inputFile, 'rb').read()
    if len(data) < 0x100:
        raise Exception("Input file too short to be a NokiaFile")

    nokiaFile = NokiaFile(data, isVerbose=isVerbose)

    if None != outputFile:
        file(outputFile, 'wb').write(nokiaFile.plain)
Ejemplo n.º 2
0
def main():
    userOptions = OptionParser()
    userOptions.add_option(
        "-p",
        "--patches",
        dest="patchesFile",
        type="string",
        help=
        "Python scriptin that defines global var PATCHES. The file would be executed!"
    )
    userOptions.add_option(
        "-i",
        "--input",
        dest="inputFile",
        type="string",
        help=
        "Input MCUSW file. It is also possible to set a global INPUT_FILE var in the PATCHES file"
    )
    userOptions.add_option(
        "-o",
        "--output",
        dest="outputFile",
        type="string",
        help=
        "Output file. If not set the output file is dervid from the input file name"
    )
    userOptions.add_option("-d",
                           "--plain",
                           dest="dumpPlain",
                           action="store_true",
                           help="Save the plain (deobfuscated) data to file")
    userOptions.add_option("-u",
                           "--plainDst",
                           dest="dumpDest",
                           type="string",
                           help="Where to dump plain data to")
    userOptions.add_option("-v",
                           "--verbose",
                           dest="isVerbose",
                           action="store_true",
                           help="Set verbose output on")
    userOptions.add_option("-z",
                           "--dontFixChecksum",
                           dest="dontFixChecksum",
                           action="store_true",
                           help="Don't fix the plain checksum")
    userOptions.set_defaults(inputFile=None,
                             outputFile=None,
                             isVerbose=False,
                             dumpDest=None,
                             dumpPlain=False,
                             dontFixChecksum=False)
    (options, args) = userOptions.parse_args(sys.argv[1:])
    patchesFile = options.patchesFile
    inputFile = options.inputFile
    outputFile = options.outputFile
    isDumpPlain = options.dumpPlain
    dumpDest = options.dumpDest
    isVerbose = options.isVerbose
    dontFixChecksum = options.dontFixChecksum
    PATCHES, patchesDefines = loadPatchesFromFile(patchesFile, userOptions,
                                                  isVerbose)
    inputFile = cmdLineInputFile(patchesDefines, inputFile, userOptions)
    outputFile = cmdLineOutputFile(patchesDefines, outputFile, inputFile)
    nokiaFile = NokiaFile(inputFile, isVerbose=isVerbose)
    plain = nokiaFile.plain
    plainAddr = nokiaFile.address

    if None != patchesFile:
        plain = patchMcusw(plainAddr, plain, nokiaFile, PATCHES, isVerbose)
        nokiaFile.plain = plain
    if False == dontFixChecksum:
        plain = fixChecksum(plainAddr, plain, nokiaFile, isVerbose)
        nokiaFile.plain = plain
    if isDumpPlain:
        dumpDest = cmdLineDumpDestFile(patchesDefines, dumpDest, outputFile,
                                       plainAddr)
        file(dumpDest, 'wb').write(plain)
    mcuData = nokiaFile.encode()
    file(outputFile, 'wb').write(mcuData)