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")
Exemplo n.º 3
0
 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")
Exemplo n.º 4
0
 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")
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)