class TestLaunchApkTool(unittest.TestCase): """ UnitTest for launch_apk_tool.py. RUN: python -m unittest -v tests.test_launch_apk_tool """ ANY_PATH = "any-path" ANY_DIRECTORY = "any-directory" ANY_APKTOOL = "apktool/apktool.jar" @patch('ninjadroid.use_cases.launch_apk_tool.os.path.join', Mock(return_value=ANY_APKTOOL)) def setUp(self): self.sut = LaunchApkTool() @patch('ninjadroid.use_cases.launch_apk_tool.os') def test_execute(self, mock_os): self.sut.execute(input_filepath=TestLaunchApkTool.ANY_PATH, output_directory=TestLaunchApkTool.ANY_DIRECTORY) mock_os.system.assert_called_once_with( "java -jar {} -q decode -f {} -o {}".format( TestLaunchApkTool.ANY_APKTOOL, TestLaunchApkTool.ANY_PATH, TestLaunchApkTool.ANY_DIRECTORY ) )
def extract_apk_info_to_directory(apk: APK, filepath: str, filename: str, output_directory: str): """ Extract all the APK entries and info to a given directory. :param apk: The APK class object. :param filepath: The target APK file path. :param filename: The target APK file name. :param output_directory: The directory where to save the APK entries and info. """ if output_directory == "./": output_directory += filename create_output_directory_if_needed(output_directory) LaunchApkTool(logger).execute(input_filepath=filepath, output_directory=output_directory) LaunchDex2Jar(logger).execute(input_filepath=filepath, input_filename=filename, output_directory=output_directory) ExtractCertificateFile(logger).execute(apk=apk, output_directory=output_directory) ExtractDexFile(logger).execute(apk=apk, output_directory=output_directory) GetApkInfoInHtml(logger).execute(apk=apk, input_filename=filename, output_directory=output_directory) GetApkInfoInJson(logger).execute(apk=apk, input_filename=filename, output_directory=output_directory)
def main(): args = get_args() if args.verbose: logger.setLevel(logging.DEBUG) apk = read_file(args.target, args.extended_processing) if apk is None: return 1 filename = get_filename_without_extension(args.target) if args.output_directory is None: PrintApkInfo().execute(apk, as_json=args.json) else: output_directory = setup_output_directory(args.output_directory, filename) LaunchApkTool(logger).execute(args.target, output_directory) LaunchDex2Jar(logger).execute(args.target, filename, output_directory) ExtractCertificateFile(logger).execute(apk, output_directory) ExtractDexFile(logger).execute(apk, output_directory) GenerateApkInfoReport(logger).execute(apk, filename, output_directory) return 0
def setUp(self): self.sut = LaunchApkTool()
def launch_apktool(self) -> Future: return LaunchApkTool(self.input_filepath, self.output_directory, self.logger).execute()