コード例 #1
0
ファイル: test_pythonlib.py プロジェクト: vipwp/uncompyle2-1
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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
ファイル: uncompyle2.py プロジェクト: Quakexxx/uncompyle2
 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()
コード例 #5
0
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)
コード例 #6
0
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()
コード例 #7
0
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)
コード例 #8
0
ファイル: uncompyle2.py プロジェクト: Quakexxx/uncompyle2
    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)
コード例 #9
0
    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)