def testSessionLoad(self): s = session.Session() with open("examples/android/TestsAndroguard/bin/TestActivity.apk", "rb") as fd: s.add("examples/android/TestsAndroguard/bin/TestActivity.apk", fd.read()) session.Save(s, "test_session") self.assertIn( '2f24538b3064f1f88d3eb29ee7fbd2146779a4c9144aefa766d18965be8775c7', s.analyzed_dex.keys()) self.assertIn( '3bb32dd50129690bce850124ea120aa334e708eaa7987cf2329fd1ea0467a0eb', s.analyzed_apk.keys()) x = s.analyzed_apk[ '3bb32dd50129690bce850124ea120aa334e708eaa7987cf2329fd1ea0467a0eb'][ 0] self.assertIsInstance(x, APK) nsession = session.Load("test_session") self.assertIn( '2f24538b3064f1f88d3eb29ee7fbd2146779a4c9144aefa766d18965be8775c7', nsession.analyzed_dex.keys()) self.assertIn( '3bb32dd50129690bce850124ea120aa334e708eaa7987cf2329fd1ea0467a0eb', nsession.analyzed_apk.keys()) y = nsession.analyzed_apk[ '3bb32dd50129690bce850124ea120aa334e708eaa7987cf2329fd1ea0467a0eb'][ 0] self.assertIsInstance(y, APK)
def testSessionSave(self): s = session.Session() with open("examples/android/TestsAndroguard/bin/TestActivity.apk", "rb") as fd: s.add("examples/android/TestsAndroguard/bin/TestActivity.apk", fd.read()) session.Save(s, "test_session")
def saveSession(self, filepath): """Save androguard session.""" try: session_module.Save(self.session, filepath) except RuntimeError as e: log.exception(e) os.remove(filepath) log.warning("Session not saved")
def saveSession(self, filepath): """Save androguard session.""" try: session_module.Save(self.session, filepath) except RuntimeError as e: androconf.error(str(e)) os.remove(filepath) androconf.warning("Session not saved")
def r2ProjectName(projectName, sessionName, fileName, sess): project = Path(os.environ['HOME'] + "/.local/share/radare2/projects/" + projectName) sessionFile = str(project) +"/" + sessionName sessionFile = Path(sessionFile) if project.is_dir(): print("Project exists! -- " + str(project) + "\n") if sessionFile.is_file(): print("Loading session file at " + str(sessionFile) + ", please wait... \n") sess = session.Load(str(sessionFile)) return sess else: print("No session file found, creating one! Please wait...") apk, d, dx = misc.AnalyzeAPK(fileName.decode('utf-8'), session=sess) session.Save(sess, str(sessionFile)) print("Session file created at : " + str(sessionFile) + "\n") return sess else: print("Radare2 Project does not exist, please save a Radare2 project first") exit()
def display(value, prefix=None): if prefix: print('[+] ' + prefix + ':' + value) else: print('[+] ' + value) for s in list(dx.get_strings()): s: StringAnalysis = s if 'http' in s.get_value() and all(t not in s.get_value() for t in exclude_domains): find_http.append(s.get_value()) if not args.only_login: display(s.get_value(), os.path.basename(args.apk) if args.show_file else None) else: for t in login_hints: if t in s.get_value(): display( s.get_value(), os.path.basename(args.apk) if args.show_file else None) break if args.session: print('[*] save session in {} ...'.format(args.session)) session.Save(sess, args.session)
def main(projectName, className, methodName): if methodName and (not className): print('Must provide class name "-c" in order to decompile specific method "-m"') exit() #Increase recursion limit to save session file sys.setrecursionlimit(100000) r2 = r2pipe.open() fileName = r2.cmd("i~file[1]") fileName = fileName.split("/")[2] if fileName.split("."): sessionName = fileName.split(".")[0] sessionName = sessionName+".session" sessionFile = Path(sessionName) currentClassMethod = r2.cmd("afi.") if "_" in currentClassMethod: currentClassMethod = str(currentClassMethod).replace("_", "/") currentClass = str(currentClassMethod).split(".")[1] print("Current class: " + currentClass) currentMethod = str(currentClassMethod).split(".")[3] apkMethod = currentMethod.split("/")[0] if apkMethod == "method": currentMethod = str(currentClassMethod).split(".")[4] apkMethod = currentMethod.split("(")[0] print(" Current Method: " + apkMethod + "\n") sess = misc.get_default_session() #Check if project name is passed if projectName != None: projectSession = r2ProjectName(projectName, sessionName, fileName, sess) if className and methodName: decompileMethod(className, methodName, projectSession) exit() if className: decompileClass(className, projectSession) exit() dalv = next(projectSession.get_objects_dex())[1] dx = next(projectSession.get_objects_dex())[2] print("Decompiling method " + apkMethod + " in the class" + currentClass) dad = decompiler.DecompilerDAD(dalv, dx) classNames = dalv.get_classes_names() autoDecompile(dalv, dx, dad, classNames, currentClass, apkMethod) exit() # Check if session file exists if sessionFile.is_file(): print("Loading session file, please wait... \n") sess = session.Load(sessionName) if className and methodName: decompileMethod(className, methodName, sess) exit() if className: decompileClass(className, sess) exit() dalv = next(sess.get_objects_dex())[1] dx = next(sess.get_objects_dex())[2] dad = decompiler.DecompilerDAD(dalv, dx) classNames = dalv.get_classes_names() autoDecompile(dalv,dx,dad,classNames, currentClass, apkMethod) # Create sesssion file else: print("No session file found, creating one! Please wait...") fileName = fileName.replace("\\n\\x00","") fileName = fileName.split("\'")[0] apk, d, dx = misc.AnalyzeAPK(fileName, session=sess) session.Save(sess, sessionName) print("Session file created: " + sessionName) print(" Will load session file for future calls... \n") if className and methodName: decompileMethod(className, methodName, sess) exit() if className: decompileClass(className, sess) exit() dalv = next(sess.get_objects_dex())[1] dx = next(sess.get_objects_dex())[2] dad = decompiler.DecompilerDAD(dalv, dx) classNames = dalv.get_classes_names() autoDecompile(dalv,dx,dad,classNames,currentClass, apkMethod)