def do_tests(src_dir, patterns, target_dir, start_with=None, do_verify=0): def visitor(files, dirname, names): files.extend( [os.path.normpath(os.path.join(dirname, n)) for n in names for pat in patterns if fnmatch(n, pat)]) files = [] cwd = os.getcwd() os.chdir(src_dir) os.path.walk(os.curdir, visitor, files) os.chdir(cwd) files.sort() if start_with: try: start_with = files.index(start_with) files = files[start_with:] print '>>> starting with file', files[0] except ValueError: pass print time.ctime() print 'Working directory: ', src_dir try: main(src_dir, target_dir, files, [], do_verify=do_verify) except (KeyboardInterrupt, OSError): print exit(1)
def onProcess(self): src_zip = self.cbxPath.currentText() if not QDir().exists(src_zip): QMessageBox.critical(self, 'Error', "Cannot find file %s" % src_zip) return src_zip = src_zip work_dir = QDir.currentPath() SRC_PYO = 'process/wingctl.pyo' UNCOMP_PY = 'u_wingctl.py' HACK_PY = 'wingctl.py' COMP_PYO = 'wingctl.pyo' TGT_ZIP = 'src.zip' fh_zip_w = zipfile.ZipFile(TGT_ZIP, 'w') fh_zip = zipfile.ZipFile(str(src_zip), 'r') fh_zip.extract(SRC_PYO, str(work_dir)) for f in fh_zip.namelist(): if f != SRC_PYO: fh_zip_w.writestr(f, fh_zip.read(f)) fh_zip.close() uncompyle2.main(str(work_dir), str(work_dir), [SRC_PYO], [], outfile=UNCOMP_PY) fh_pyr = open(UNCOMP_PY, 'r') fh_pyd = open(HACK_PY, 'w') for line in fh_pyr: fh_pyd.write(line.replace('self.LicenseOK()', '1')) fh_pyr.close() fh_pyd.close() py_compile.compile(HACK_PY, COMP_PYO) fh_zip_w.write(COMP_PYO, SRC_PYO) fh_zip_w.close() shutil.move(TGT_ZIP, str(src_zip)) os.remove(SRC_PYO) os.remove(UNCOMP_PY) os.remove(HACK_PY) os.remove(COMP_PYO)
def onProcess(self): src_zip = self.cbxPath.currentText() if not QDir().exists(src_zip): QMessageBox.critical(self,'Error',"Cannot find file %s" % src_zip) return src_zip = src_zip work_dir = QDir.currentPath() SRC_PYO = 'process/wingctl.pyo' UNCOMP_PY = 'u_wingctl.py' HACK_PY = 'wingctl.py' COMP_PYO = 'wingctl.pyo' TGT_ZIP = 'src.zip' fh_zip_w = zipfile.ZipFile(TGT_ZIP,'w') fh_zip = zipfile.ZipFile(str(src_zip),'r') fh_zip.extract(SRC_PYO,str(work_dir)) for f in fh_zip.namelist(): if f != SRC_PYO: fh_zip_w.writestr(f,fh_zip.read(f)) fh_zip.close() uncompyle2.main(str(work_dir),str(work_dir),[SRC_PYO],[],outfile=UNCOMP_PY) fh_pyr = open(UNCOMP_PY,'r') fh_pyd = open(HACK_PY,'w') for line in fh_pyr: fh_pyd.write(line.replace('self.LicenseOK()','1')) fh_pyr.close() fh_pyd.close() py_compile.compile(HACK_PY,COMP_PYO) fh_zip_w.write(COMP_PYO,SRC_PYO) fh_zip_w.close() shutil.move(TGT_ZIP,str(src_zip)) os.remove(SRC_PYO) os.remove(UNCOMP_PY) os.remove(HACK_PY) os.remove(COMP_PYO)
def process_func(): try: (tot_files, okay_files, failed_files, verify_failed_files) = (0,0,0,0) while 1: f = fqueue.get() if f == None: break (t, o, f, v) = \ main(src_base, out_base, [f], codes, outfile, showasm, showast, do_verify) tot_files += t okay_files += o failed_files += f verify_failed_files += v except (Empty, KeyboardInterrupt): pass rqueue.put((tot_files, okay_files, failed_files, verify_failed_files)) rqueue.close()
def uncompile(path, wdir): logger.info('# decpompile *.pyc files') showasm = showast = do_verify = 0 codes = [] list = [] for root, dirs, files in os.walk(path): files = filter(lambda f: os.path.splitext(f)[1] in ['.pyc', '.pyo'], files) root = root.replace(wdir, '')[1:] list += map(lambda f: os.path.join(root, f), files) src_base = out_base = wdir files = list outfile = None result = uncompyle2.main(src_base, out_base, files, codes, outfile, showasm, showast, do_verify) logger.info('# decompiled %i files: %i okay, %i failed, %i verify failed' % result)
def process_func(fq, rq, src_base, out_base, codes, outfile, showasm, showast, do_verify, py, deob): try: (tot_files, okay_files, failed_files, verify_failed_files) = (0,0,0,0) while 1: f = fq.get() if f == None: break (t, o, f, v) = \ main(src_base, out_base, [f], codes, outfile, showasm, showast, do_verify, py, deob) tot_files += t okay_files += o failed_files += f verify_failed_files += v except (Empty, KeyboardInterrupt): pass rq.put((tot_files, okay_files, failed_files, verify_failed_files)) rq.close()
def do_uncompile(src_base, out_base, files): codes = [] outfile = None showasm = showast = do_verify = 0 result = uncompyle2.main(src_base, out_base, files, codes, outfile, showasm, showast, do_verify) print '# decompiled %i files: %i okay, %i failed, %i verify failed' % result for file in files: srcfile = os.path.join(out_base, file) outfile = srcfile + '_dis' if not os.path.isfile(outfile): continue dstbase, ext = os.path.splitext(srcfile) if ext not in ['.pyc', '.pyo']: continue dstfile = dstbase + '.py' if not os.path.isfile(dstfile): os.rename(outfile, dstfile)
sb_len = len( os.path.join(src_base, '') ) files = map(lambda f: f[sb_len:], files) del sb_len if outfile == '-': outfile = None # use stdout elif outfile and os.path.isdir(outfile): out_base = outfile; outfile = None elif outfile and len(files) > 1: out_base = outfile; outfile = None if timestamp: print time.strftime(timestampfmt) if numproc <= 1: try: result = main(src_base, out_base, files, codes, outfile, showasm, showast, do_verify) print '# decompiled %i files: %i okay, %i failed, %i verify failed' % result except (KeyboardInterrupt): pass except verify.VerifyCmpError: raise else: from multiprocessing import Process, Queue from Queue import Empty fqueue = Queue(len(files)+numproc) for f in files: fqueue.put(f) for i in range(numproc): fqueue.put(None) rqueue = Queue(numproc)
del sb_len if outfile == '-': outfile = None # use stdout elif outfile and os.path.isdir(outfile): out_base = outfile outfile = None elif outfile and len(files) > 1: out_base = outfile outfile = None if timestamp: print time.strftime(timestampfmt) if numproc <= 1: try: result = main(src_base, out_base, files, codes, outfile, showasm, showast, do_verify) print '# decompiled %i files: %i okay, %i failed, %i verify failed' % result except (KeyboardInterrupt): pass except verify.VerifyCmpError: raise else: from multiprocessing import Process, Queue from Queue import Empty fqueue = Queue(len(files) + numproc) for f in files: fqueue.put(f) for i in range(numproc): fqueue.put(None) rqueue = Queue(numproc)