示例#1
0
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
            )
        )
示例#2
0
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)
示例#3
0
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
示例#4
0
 def setUp(self):
     self.sut = LaunchApkTool()
示例#5
0
 def launch_apktool(self) -> Future:
     return LaunchApkTool(self.input_filepath, self.output_directory,
                          self.logger).execute()