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)
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)