def updateKeyDatabase(): print "Updating: "+defs.getWorkingDir()+"/keydb.ini" configParser = ConfigParser.RawConfigParser() configParser.read(defs.getWorkingDir()+"/keydb.ini") try: configParser.add_section("zrif") configParser.add_section("klicense") except: "" try: open("temp.csv","wb").write(requests.get(nps_games).text.encode("utf-8").replace("\t",",")) ## So just convert tsv to csv! with open('temp.csv', 'rb') as csvfile: keydb = csv.DictReader(csvfile) for row in keydb: try: if row['zRIF'] == "MISSING" or row['zRIF'] == "NOT REQUIRED" or row['zRIF'] == "Probably not required": "" else: configParser.set(defs.getKeyType(row['zRIF']),row['Title ID'].upper(),row['zRIF']) except ConfigParser.Error: print("Failed to add key for "+row['Title ID']) with open(defs.getWorkingDir()+"/keydb.ini","wb") as configfile: configParser.write(configfile) os.remove("temp.csv") except requests.exceptions.ConnectionError: print "Unable To Connect To Server.."
def patch(backup): import sign_support unsign_support.goUnsign(backup, CMA, False, "PGAME", account, ".") print "Patching " + backup + " With VHBL." if os.path.exists(CMA + "/EXTRACTED/PGAME/" + backup + "/game/ux0_pspemu_temp_game_PSP_GAME_" + backup + "/PBOOT.PBP"): print "Removing VHBL.." os.remove(CMA + "/EXTRACTED/PGAME/" + backup + "/game/ux0_pspemu_temp_game_PSP_GAME_" + backup + "/PBOOT.PBP") print "Re-Patching VHBL" shutil.copy( defs.getWorkingDir() + "/easyinstallers/VHBL/patch/PBOOT.PBP", CMA + "/EXTRACTED/PGAME/" + backup + "/game/ux0_pspemu_temp_game_PSP_GAME_" + backup + "/PBOOT.PBP") print "Signing to: " + account sign_support.goSign(account, "PGAME", backup, True) print "Copying Savedata To " + CMA + "/PSAVEDATA/" + defs.getAid( account) + "/VHBL01234" if not os.path.exists(CMA + "/PSAVEDATA/" + defs.getAid(account) + "/VHBL01234"): shutil.copytree( defs.getWorkingDir() + "/easyinstallers/VHBL/VHBL01234", CMA + "/PSAVEDATA/" + defs.getAid(account) + "/VHBL01234") import easyInstallers tkMessageBox.showinfo( title="ARK Easy Installer", message= "VHBL Backup Created!\n(Note: Icon will be the same as base game)\nBe sure to copy the VHBL Savedata file too!" ) easyInstallers.vp_start_gui()
def createBackup(emulator, backup, account): print emulator, account, backup import unsign_support unsign_support.goUnsign(cmaBackup=backup, account=account, load="PGAME", resign=".") from distutils.dir_util import copy_tree print "Copying " + defs.getWorkingDir( ) + "/easyinstallers/EmuBubble/FILES/" + emulator + " To " + defs.getCmaDir( ) + "/EXTRACTED/PGAME/" + backup + "/game/ux0_pspemu_temp_game_PSP_GAME_" + backup + "/" copy_tree( defs.getWorkingDir() + "/easyinstallers/EmuBubble/FILES/" + emulator, defs.getCmaDir() + "/EXTRACTED/PGAME/" + backup + "/game/ux0_pspemu_temp_game_PSP_GAME_" + backup + "/") import sign_support sign_support.goSign(account, "PGAME", backup, True) print "Removing: " + defs.getCmaDir() + "/EXTRACTED/PGAME/" + backup shutil.rmtree(defs.getCmaDir() + "/EXTRACTED/PGAME/" + backup + "/") tkMessageBox.showinfo(title="Emulator Bubble", message=emulator + " Backup Created! (remember to refresh QCMA)") emububble.destroy_New_Toplevel_1() import easyinstallers.EmuBubble.chooseBackup as CB CB.destroy_Unsign_Backup()
def patch(backup): import sign_support unsign_support.pushVars(account, "PGAME", ".") unsign_support.goUnsign(backup, CMA) print "Patching With VHBL" shutil.copy( defs.getWorkingDir() + "/easyinstallers/VHBL/patch/PBOOT.PBP", CMA + "/EXTRACTED/PGAME/" + backup + "/game/ux0_pspemu_temp_game_PSP_GAME_" + backup + "/") print "Signing to: " + account sign_support.goSign(account, "PGAME", backup, True) print "Copying Savedata To " + CMA + "/PSAVEDATA/" + defs.getAid( account) + "/VHBL01234" if not os.path.exists(CMA + "/PSAVEDATA/" + defs.getAid(account) + "/VHBL01234"): shutil.copytree( defs.getWorkingDir() + "/easyinstallers/VHBL/VHBL01234", CMA + "/PSAVEDATA/" + defs.getAid(account) + "/VHBL01234") import easyInstallers tkMessageBox.showinfo( title="VHBL Easy Installer", message= "VHBL Backup Created! (Note: Icon will be the same as base game)") easyInstallers.close_window(root) easyInstallers.vp_start_gui()
def patch(backup): import sign_support print "Patching " + backup + " With VHBL." unsign_support.goUnsign(backup, CMA, False, "PGAME", account, ".") print "Patching With ARK-2" shutil.copy( defs.getWorkingDir() + "/easyinstallers/ARK/patch/PBOOT.PBP", CMA + "/EXTRACTED/PGAME/" + backup + "/game/ux0_pspemu_temp_game_PSP_GAME_" + backup + "/") print "Signing to: " + account sign_support.goSign(account, "PGAME", backup, True) if tkMessageBox.askyesno(title="OneMenu?", message="Would you like to use ONEMENU?"): print "Copying Savedata To " + CMA + "/PSAVEDATA/" + defs.getAid( account) + "/ARK_01234" if not os.path.exists(CMA + "/PSAVEDATA/" + defs.getAid(account) + "/ARK_01234"): shutil.copytree( defs.getWorkingDir() + "/easyinstallers/ARK/ONEMENU", CMA + "/PSAVEDATA/" + defs.getAid(account) + "/ARK_01234") else: print "Copying Savedata To " + CMA + "/PSAVEDATA/" + defs.getAid( account) + "/ARK_01234" if not os.path.exists(CMA + "/PSAVEDATA/" + defs.getAid(account) + "/ARK_01234"): shutil.copytree( defs.getWorkingDir() + "/easyinstallers/ARK/ARK_01234", CMA + "/PSAVEDATA/" + defs.getAid(account) + "/ARK_01234") import easyInstallers tkMessageBox.showinfo( title="ARK Easy Installer", message= "ARK Backup Created! (Note: Icon will be the same as base game)\nBe sure to copy the PSP ARK-2 Savedata file too!" ) easyInstallers.vp_start_gui()
def decryptSavedata(titleid): CMADir = defs.getCmaDir() if os.path.exists(CMADir+'/EXTRACTED/APP/'+titleid+'/savedata/ux0_temp_game_'+titleid+'_savedata_'+titleid): if sys.platform.__contains__("linux" or "darwin"): cmd = defs.getWorkingDir()+'/psvpfsparser --title_id_src="'+CMADir+'/EXTRACTED/APP/'+titleid+'/savedata/ux0_temp_game_'+titleid+'_savedata_'+titleid+'" --title_id_dst="'+CMADir+'/EXTRACTED/DPFS/SAVEDATA/'+titleid+'" --f00d_url=cma.henkaku.xyz' elif sys.platform.__contains__("win") and not sys.platform.__contains__("darwin"): cmd = defs.getWorkingDir() + '\\psvpfsparser.exe --title_id_src="' + CMADir + '\\EXTRACTED\\APP\\' + titleid + '\\savedata\\ux0_temp_game_' + titleid + '_savedata_' + titleid + '" --title_id_dst="' + CMADir + '\\EXTRACTED\\DPFS\\SAVEDATA\\' + titleid + '" --f00d_url=cma.henkaku.xyz' print "Executing: "+cmd os.system(cmd)
def addKey(titleid,key): configParser = ConfigParser.RawConfigParser() configParser.read(defs.getWorkingDir()+"/keydb.ini") try: configParser.set(defs.getKeyType(key),titleid,key) except: print("Failed to add key for "+titleid) with open(defs.getWorkingDir()+"/keydb.ini","wb") as configfile: configParser.write(configfile)
def install(plugin): if plugin == 'ARK': if tkMessageBox.askyesno(title="3.65?",message="ARK WILL NOT WORK ON 3.65+\nDo you still want to continue?"): ARK.vp_start_gui() elif plugin == 'VHBL': VHBL.vp_start_gui() elif plugin == 'HiddenApps': HiddenApps.run() elif plugin == 'Whitelister': Whitelister.vp_start_gui() elif plugin == 'UriCaller': UriCaller.vp_start_gui() elif plugin == 'PSMRuntime': PSMRuntime.run() elif plugin == 'Skype': if tkMessageBox.askyesno(title="3.65?",message="SKYPE WILL NOT WORK ON 3.65+\nDo you still want to continue?"): Skype.run() elif plugin == 'RemoveFeatured': RemoveFeatured.vp_start_gui() elif plugin == 'CmBackup': cmbackup.vp_start_gui() elif plugin == 'EmuBubble': emububble.vp_start_gui() elif plugin == 'ClonePSP': clonePSP.vp_start_gui() elif plugin == 'VitaShell': VitaShell.run() else: ### Load Custom EasyInstaller. ### defs.executePy(defs.getWorkingDir()+'/easyinstallers/'+plugin+'/main.py') sys.stdout.flush()
def run(): CMA = defs.getCmaDir() if not os.path.exists(CMA + "/EXTRACTED/APP/PCSF00124"): shutil.copytree( defs.getWorkingDir() + "/easyinstallers/Skype/PCSF00124", CMA + "/EXTRACTED/APP/PCSF00124") signTo.vp_start_gui()
def run(): CMA = defs.getCmaDir() if not os.path.exists(CMA + "/EXTRACTED/APP/HIDENAPPS"): shutil.copytree( defs.getWorkingDir() + "/easyinstallers/HiddenApps/HIDENAPPS", CMA + "/EXTRACTED/APP/HIDENAPPS") signTo.vp_start_gui()
def patch(backup): import sign_support unsign_support.pushVars(account, "SYSTEM", ".") unsign_support.goUnsign(backup, CMA) print "Setting All URI Calls To User Mode." dbPath = CMA + "/EXTRACTED/SYSTEM/" + backup + "/ur0_shell/db/app.db" print "Opening: " + dbPath appDatabase = sqlite3.connect(dbPath) print "Executing " + sqlQuery + "To app.db!" appDatabase.executescript(sqlQuery) appDatabase.close() print("Uri's Patched.") sign_support.goSign(account, "SYSTEM", backup, True) if not os.path.exists(CMA + "/EXTRACTED/APP/URICALL00"): shutil.copytree( defs.getWorkingDir() + "/easyinstallers/UriCaller/URICALL00", CMA + "/EXTRACTED/APP/URICALL00") sign_support.goSign(account, "APP", "URICALL00", True) tkMessageBox.showinfo( title="UriCaller", message= "Completed! Refresh QCMA Database then restore the SYSTEM Backup + The URICaller App." ) easyInstallers.close_window(root) easyInstallers.vp_start_gui()
def run(): CMA = defs.getCmaDir() if not os.path.exists(CMA + "/EXTRACTED/APP/VITASHELL"): shutil.copytree( defs.getWorkingDir() + "/easyinstallers/VitaShell/VITASHELL", CMA + "/EXTRACTED/APP/VITASHELL") signTo.vp_start_gui()
def vp_start_gui(): """Starting point when module is the main routine.""" global root root = Tk() if sys.platform.__contains__("win") and not sys.platform.__contains__("darwin"): root.iconbitmap(bitmap=defs.getWorkingDir()+'\icon.ico') top = Unsign_Backup(root) unsign_support.init(root, top)
def vp_start_gui(): '''Starting point when module is the main routine.''' global val, w, root root = Tk() if sys.platform.__contains__("win") and not sys.platform.__contains__("darwin"): root.iconbitmap(bitmap=defs.getWorkingDir()+'\icon.ico') top = Backup_Mannager (root) bkupMgr_support.init(root, top) root.mainloop()
def vp_start_gui(): '''Starting point when module is the main routine.''' global val, w, root root = Tk() if sys.platform.__contains__("win") and not sys.platform.__contains__("darwin"): import defs root.iconbitmap(bitmap=defs.getWorkingDir()+'\icon.ico') top = Account_Selector (root) accSelect_support.init(root, top) root.mainloop()
def vp_start_gui(): """Starting point when module is the main routine.""" global root root = Tk() if sys.platform.__contains__( "win") and not sys.platform.__contains__("darwin"): root.iconbitmap(bitmap=defs.getWorkingDir() + '\icon.ico') easyInstallers_support.set_Tk_var() top = Easy_Installers(root) easyInstallers_support.init(root, top) root.mainloop()
def vp_start_gui(): '''Starting point when module is the main routine.''' global val, w, root root = Tk() if sys.platform.__contains__("win") and not sys.platform.__contains__("darwin"): import defs root.iconbitmap(bitmap=defs.getWorkingDir()+'\icon.ico') top = Cma_Directory (root) cmaDir_support.init(root, top) root.mainloop() root.resizable(0, 0)
def isKeyKnown(titleid): configParser = ConfigParser.RawConfigParser() configParser.read(defs.getWorkingDir()+"/keydb.ini") try: if configParser.has_option("zrif",titleid): return True if configParser.has_option("klicense",titleid): return True else: return False except: return False
def decrypt(titleid): print("Preparing to PFS decrypt "+titleid) rifkey = getKey(titleid) CMADir = defs.getCmaDir() if rifkey == 404: return 404 if defs.getKeyType(rifkey) == "zrif": keyType = "--zRIF=" else: keyType = "--klicensee=" if os.path.exists(CMADir+'/EXTRACTED/APP/'+titleid+'/app/ux0_temp_game_'+titleid+'_app_'+titleid): if sys.platform.__contains__("linux" or "darwin"): cmd = defs.getWorkingDir()+'/psvpfsparser --title_id_src="'+CMADir+'/EXTRACTED/APP/'+titleid+'/app/ux0_temp_game_'+titleid+'_app_'+titleid+'" --title_id_dst="'+CMADir+'/EXTRACTED/DPFS/APP/'+titleid+'" '+str(keyType)+str(rifkey)+' --f00d_url=cma.henkaku.xyz' elif sys.platform.__contains__("win") and not sys.platform.__contains__("darwin"): cmd = defs.getWorkingDir() + '\\psvpfsparser.exe --title_id_src="' + CMADir + '\\EXTRACTED\\APP\\' + titleid + '\\app\\ux0_temp_game_' + titleid + '_app_' + titleid + '" --title_id_dst="' + CMADir + '\\EXTRACTED\\DPFS\\APP\\' + titleid + '" ' + str(keyType) + str(rifkey) + ' --f00d_url=cma.henkaku.xyz' print "Executing: "+cmd os.system(cmd) if os.path.exists(CMADir+'/EXTRACTED/APP/'+titleid+'/patch/ux0_temp_game_'+titleid+'_patch_'+titleid): if sys.platform.__contains__("linux" or "darwin"): cmd = defs.getWorkingDir()+'/psvpfsparser --title_id_src="'+CMADir+'/EXTRACTED/APP/'+titleid+'/patch/ux0_temp_game_'+titleid+'_patch_'+titleid+'" --title_id_dst="'+CMADir+'/EXTRACTED/DPFS/PATCH/'+titleid+'" '+str(keyType)+str(rifkey)+' --f00d_url=cma.henkaku.xyz' elif sys.platform.__contains__("win") and not sys.platform.__contains__("darwin"): cmd = defs.getWorkingDir() + '\\psvpfsparser.exe --title_id_src="' + CMADir + '\\EXTRACTED\\APP\\' + titleid + '\\patch\\ux0_temp_game_' + titleid + '_patch_' + titleid + '" --title_id_dst="' + CMADir + '\\EXTRACTED\\DPFS\\PATCH\\' + titleid + '" ' + str(keyType) + str(rifkey) + ' --f00d_url=cma.henkaku.xyz' print "Executing: "+cmd os.system(cmd) if os.path.exists(CMADir+'/EXTRACTED/APP/'+titleid+'/savedata/ux0_temp_game_'+titleid+'_savedata_'+titleid): if sys.platform.__contains__("linux" or "darwin"): cmd = defs.getWorkingDir()+'/psvpfsparser --title_id_src="'+CMADir+'/EXTRACTED/APP/'+titleid+'/savedata/ux0_temp_game_'+titleid+'_savedata_'+titleid+'" --title_id_dst="'+CMADir+'/EXTRACTED/DPFS/SAVEDATA/'+titleid+'" --f00d_url=cma.henkaku.xyz' elif sys.platform.__contains__("win") and not sys.platform.__contains__("darwin"): cmd = defs.getWorkingDir() + '\\psvpfsparser.exe --title_id_src="' + CMADir + '\\EXTRACTED\\APP\\' + titleid + '\\savedata\\ux0_temp_game_' + titleid + '_savedata_' + titleid + '" --title_id_dst="' + CMADir + '\\EXTRACTED\\DPFS\\SAVEDATA\\' + titleid + '" --f00d_url=cma.henkaku.xyz' print "Executing: "+cmd os.system(cmd)
def vp_start_gui(backup, account): bkup = backup acc = account '''Starting point when module is the main routine.''' global val, w, root root = Tk() if sys.platform.__contains__( "win") and not sys.platform.__contains__("darwin"): import defs root.iconbitmap(bitmap=defs.getWorkingDir() + '\icon.ico') top = New_Toplevel_1(root) emububble_support.init(root, top) root.mainloop()
def vp_start_gui(): '''Starting point when module is the main routine.''' global val, w, root root = Tk() if sys.platform.__contains__( "win") and not sys.platform.__contains__("darwin"): import defs root.iconbitmap(bitmap=defs.getWorkingDir() + '\icon.ico') accMgr_support.set_Tk_var() top = Account_Mannager(root) accMgr_support.init(root, top) root.mainloop() root.resizable(0, 0)
def vp_start_gui(acc=0, bkup=0, cma=0): global account global oldtitleid global CMA account = acc oldtitleid = bkup CMA = cma '''Starting point when module is the main routine.''' global val, w, root root = Tk() if sys.platform.__contains__( "win") and not sys.platform.__contains__("darwin"): import defs root.iconbitmap(bitmap=defs.getWorkingDir() + '\icon.ico') top = Clone_Bubble(root) clone_support.init(root, top) root.mainloop()
def __init__(self, top=None): """This class configures and populates the toplevel window. top is the toplevel containing window.""" _bgcolor = '#d9d9d9' _fgcolor = '#000000' _compcolor = '#d9d9d9' _ana1color = '#d9d9d9' _ana2color = '#d9d9d9' font10 = '-family {DejaVu Sans Mono} -size 12 -weight normal -slant roman -underline 0 -overstrike 0' self.style = ttk.Style() if sys.platform == 'win32': self.style.theme_use('winnative') self.style.configure('.', background=_bgcolor) self.style.configure('.', foreground=_fgcolor) self.style.map('.', background=[('selected', _compcolor), ('active', _ana2color)]) top.geometry('600x450+387+80') top.title('Easy Installers') top.configure(highlightcolor='black') self.Button3 = Button(top) self.Button3.place(relx=0.62, rely=0.91, height=26, width=217) self.Button3.configure(activebackground='#d9d9d9') self.Button3.configure(command=lambda: easyInstallers_support.install( self.backupList.get(ACTIVE))) self.Button3.configure(text='Install') a = 0 self.backupList = ScrolledListBox(top) self.backupList.place(relx=0.02, rely=0.02, relheight=0.96, relwidth=0.58) self.backupList.configure(background='white') self.backupList.configure(font=font10) self.backupList.configure(highlightcolor='#d9d9d9') self.backupList.configure(selectbackground='#c4c4c4') self.backupList.configure(width=10) for root, dir, files in os.walk(defs.getWorkingDir() + '/easyinstallers'): for items in fnmatch.filter(dir, '*'): a += 1 if defs.isPlugin(items): self.backupList.insert(a, items)
def getKey(titleid): print "Looking up key for "+titleid try: configParser = ConfigParser.RawConfigParser() configParser.read(defs.getWorkingDir()+"/keydb.ini") print("Checking zRIF..") key = configParser.get("zrif",titleid) print "Key found in zRIF" return key except ConfigParser.NoOptionError: print "Key not found in zRIF" try: print("Checking klicense..") key = configParser.get("klicense",titleid) print("Key found in klicense") return key except: print "Key not found in klicense" print "Key is not found in the key database." return 404
def __init__(self, top=None): '''This class configures and populates the toplevel window. top is the toplevel containing window.''' _bgcolor = '#d9d9d9' # X11 color: 'gray85' _fgcolor = '#000000' # X11 color: 'black' _compcolor = '#d9d9d9' # X11 color: 'gray85' _ana1color = '#d9d9d9' # X11 color: 'gray85' _ana2color = '#d9d9d9' # X11 color: 'gray85' font10 = "-family {DejaVu Sans Mono} -size 12 -weight normal " \ "-slant roman -underline 0 -overstrike 0" self.style = ttk.Style() if sys.platform == "win32": self.style.theme_use('winnative') self.style.configure('.', background=_bgcolor) self.style.configure('.', foreground=_fgcolor) self.style.map('.', background=[('selected', _compcolor), ('active', _ana2color)]) top.geometry("600x450+453+158") top.title("Create Emulator Bubble") global a a = 0 self.Label1 = Label(top) self.Label1.place(relx=0.02, rely=0.02, height=28, width=576) self.Label1.configure(text='''Create Emulator Bubble''') self.Label1.configure(width=576) self.Scrolledlistbox1 = ScrolledListBox(top) self.Scrolledlistbox1.place(relx=0.02, rely=0.09, relheight=0.81, relwidth=0.96) self.Scrolledlistbox1.configure(background="white") self.Scrolledlistbox1.configure(font=font10) self.Scrolledlistbox1.configure(highlightcolor="#d9d9d9") self.Scrolledlistbox1.configure(selectbackground="#c4c4c4") self.Scrolledlistbox1.configure(width=10) print "Looking in: " + defs.getWorkingDir( ) + "/easyinstallers/EmuBubble/FILES" for root, dir, files in defs.walklevel( defs.getWorkingDir() + "/easyinstallers/EmuBubble/FILES", level=0): for items in fnmatch.filter(dir, "*"): a += 1 self.Scrolledlistbox1.insert(a, items) self.Button1 = Button(top) self.Button1.place(relx=0.02, rely=0.91, height=36, width=377) self.Button1.configure(activebackground="#d9d9d9") self.Button1.configure(text='''Create Bubble''') self.Button1.configure(width=377) self.Button1.configure(command=lambda: emububble_support.createBackup( self.Scrolledlistbox1.get(ACTIVE), account, backup)) self.Button2 = Button(top) self.Button2.place(relx=0.65, rely=0.91, height=36, width=197) self.Button2.configure(activebackground="#d9d9d9") self.Button2.configure(command=lambda: emububble_support.folder( self.Scrolledlistbox1.get(ACTIVE))) self.Button2.configure(text='''Open Emulators Folder''') self.Button2.configure(width=197)
def folder(dir): defs.openFolder(defs.getWorkingDir()+"/easyinstallers/EmuBubble/FILES/"+dir)
def run(): CMA = defs.getCmaDir() if not os.path.exists(CMA + "/EXTRACTED/APP/PCSI00011"): shutil.copytree(defs.getWorkingDir() + "/easyinstallers/PSMRuntime/PCSI00011", CMA + "/EXTRACTED/APP/PCSI00011") import easyinstallers.PSMRuntime.signTo as signTo signTo.vp_start_gui()
def install(plugin): if plugin == 'ARK': if tkMessageBox.askyesno( title="3.65?", message= "ARK WILL NOT WORK ON 3.65+\nDo you still want to continue?"): ARK.vp_start_gui() elif plugin == 'VHBL': VHBL.vp_start_gui() elif plugin == 'HiddenApps': HiddenApps.run() elif plugin == 'Whitelister': Whitelister.vp_start_gui() elif plugin == 'UriCaller': UriCaller.vp_start_gui() elif plugin == 'PSMRuntime': PSMRuntime.run() elif plugin == 'Skype': if tkMessageBox.askyesno( title="3.65?", message= "SKYPE WILL NOT WORK ON 3.65+\nDo you still want to continue?" ): Skype.run() elif plugin == 'RemoveFeatured': RemoveFeatured.vp_start_gui() elif plugin == 'CmBackup': cmbackup.vp_start_gui() elif plugin == 'EmuBubble': emububble.vp_start_gui() elif plugin == 'ClonePSP': clonePSP.vp_start_gui() elif plugin == 'VitaShell': VitaShell.run() elif plugin == 'hencore': if not os.path.exists("easyinstallers/hencore/PCSG90096/app"): if tkMessageBox.askyesno( title="Download h-encore?", message= "h-encore is not downloaded\nIt will not work unless you download it\nDo you want to download h-encore?" ): if os.path.exists("hencore"): shutil.rmtree('hencore') if os.path.exists("easyinstallers/hencore/PCSG90096/app"): shutil.rmtree('easyinstallers/hencore/PCSG90096/app') if os.path.exists("easyinstallers/hencore/PCSG90096/appmeta"): shutil.rmtree('easyinstallers/hencore/PCSG90096/appmeta') if os.path.exists("easyinstallers/hencore/PCSG90096/license"): shutil.rmtree('easyinstallers/hencore/PCSG90096/license') if os.path.exists("easyinstallers/hencore/PCSG90096/savedata"): shutil.rmtree('easyinstallers/hencore/PCSG90096/savedata') if os.path.exists("easyinstallers/hencore/PCSG90096/sce_sys"): shutil.rmtree('easyinstallers/hencore/PCSG90096/sce_sys') print 'Downloading bitter smile...\nThis may take a while.' os.makedirs("hencore") open("hencore/bittersmile.pkg", "wb").write( urllib2.urlopen( "http://ares.dl.playstation.net/cdn/JP0741/PCSG90096_00/xGMrXOkORxWRyqzLMihZPqsXAbAXLzvAdJFqtPJLAZTgOcqJobxQAhLNbgiFydVlcmVOrpZKklOYxizQCRpiLfjeROuWivGXfwgkq.pkg" ).read()) print 'Downloading pkg2zip...' open("hencore/pkg2zip_32bit.zip", "wb").write( urllib2.urlopen( "https://github.com/mmozeiko/pkg2zip/releases/download/v1.8/pkg2zip_32bit.zip" ).read()) print 'Unzipping pkg2zip...' zip_ref = zipfile.ZipFile("hencore/pkg2zip_32bit.zip", 'r') zip_ref.extractall("hencore") zip_ref.close() os.remove("hencore/pkg2zip_32bit.zip") print 'Downloading h-encore...' open("hencore/h-encore.zip", "wb").write( urllib2.urlopen( "https://github.com/TheOfficialFloW/h-encore/releases/download/v1.0/h-encore.zip" ).read()) print 'Unzipping h-encore...' zip_ref = zipfile.ZipFile("hencore/h-encore.zip", 'r') zip_ref.extractall("hencore") zip_ref.close() os.remove("hencore/h-encore.zip") print 'Decrypting pkg...' subprocess.call('hencore/pkg2zip -x hencore/bittersmile.pkg') print 'Copying game to h-encore folder...' source = "app/PCSG90096/" dest1 = "hencore/h-encore/app/ux0_temp_game_PCSG90096_app_PCSG90096/" files = os.listdir(source) for f in files: shutil.move(source + f, dest1) shutil.rmtree('app') print 'Copying license...' shutil.copy2( "hencore/h-encore/app/ux0_temp_game_PCSG90096_app_PCSG90096/sce_sys/package/temp.bin", "hencore/h-encore/license/ux0_temp_game_PCSG90096_license_app_PCSG90096" ) shutil.move( "hencore/h-encore/license/ux0_temp_game_PCSG90096_license_app_PCSG90096/temp.bin", "hencore/h-encore/license/ux0_temp_game_PCSG90096_license_app_PCSG90096/6488b73b912a753a492e2714e9b38bc7.rif" ) print 'Finishing up...' if not os.path.exists("hencore/h-encore/sce_sys/"): os.makedirs("hencore/h-encore/sce_sys/") source = "hencore/h-encore/PCSG90096/sce_sys/" dest1 = "hencore/h-encore/sce_sys/" files = os.listdir(source) for f in files: shutil.move(source + f, dest1) os.rmdir("hencore/h-encore/PCSG90096/sce_sys") os.rmdir("hencore/h-encore/PCSG90096/") source = "hencore/h-encore/" dest1 = "easyinstallers/hencore/PCSG90096" files = os.listdir(source) for f in files: shutil.move(source + f, dest1) shutil.rmtree('hencore') hencore.run() else: hencore.run() else: ### Load Custom EasyInstaller. ### defs.executePy(defs.getWorkingDir() + '/easyinstallers/' + plugin + '/main.py') sys.stdout.flush()
import defs import os import fnmatch import getopt import sys import urllib import main # Requires BPlistLib -- https://github.com/tungol/bplistlib # Requires REQUESTS -- pip install requests version = "v0.5.3" os.chdir(defs.getWorkingDir()) print "/--PSVIMGTOOLS-FRONTEND " + version + "--\ " print '| GUI BY SILICAANDPINA! |' print '| CLI BY YIFANLU / MOLECULE |' print '\-------------------------------/' opts, args = getopt.getopt(sys.argv[1:], 'x:y:') try: if args[0] == "m": print "Running in MANUAL mode." print "In this mode you have to setup the application yourself." print "The only reason i added this mode is because people keep getting errors where\nthe application opens and then closes immediatley." print "So yea you just need to enter a few things: " PSNName = raw_input("What is your PSN Account Name? ") aid = raw_input("What is your AID/PSID? ") CmaDir = raw_input("Where is your QCMA Backups Directory? ") print "Downloading key.. - Make sure you are connected to the internet and have access to cma.henkaku.xyz!" urllib.urlretrieve('http://cma.henkaku.xyz/?aid=' + aid, 'tempKey.html')