1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
""" Author : Zeuxis Lo Date : 2011/01/02 14:57 PM Name : Android APK Unpack Script Version: 0.1.0 Beta """
import os, shutil, fnmatch
DEBUG = True
class BaseController(object): def __init__(self): self.current_folder = os.getcwd() self.apps_folder = self.current_folder + "/Apps" self.tools_folder = self.current_folder + "/Tools" self.apps_apk_folder = self.apps_folder + "/Apk" self.apps_jar_folder = self.apps_folder + "/Jar" self.apps_unjar_folder = self.apps_folder + "/UnJar"
def log(self, message): if DEBUG: print(message)
class FolderContoller(BaseController): def get_file_list_from_apps_folder(self, folder_name): folder_path = self.apps_folder + "/" + folder_name return [os.path.join(folder_path, filename) for filename in os.listdir(folder_path)]
def move_apk_jar_to_jar_folder(self): src_path = self.apps_apk_folder dest_path = self.apps_jar_folder
for filename in fnmatch.filter(os.listdir(src_path), "*.jar"): src = os.path.join(src_path, filename) dest = os.path.join(dest_path, filename)
shutil.move(src, dest) def get_xml_file_dict_from_unjar_folder(self): folder_list = [self.apps_unjar_folder] file_dict = {} while(len(folder_list) > 0): folder = folder_list.pop() for name in os.listdir(folder): item_path = os.path.join(folder, name) filename, extension = os.path.splitext(os.path.basename(item_path)) if os.path.isfile(item_path) and extension.lower() == ".xml": file_dict[item_path] = os.path.join(os.path.dirname(item_path), "d-%s.xml" % filename) elif os.path.isdir(item_path): folder_list.append(item_path) return file_dict
class ToolsController(BaseController): def __init__(self): BaseController.__init__(self)
self.dex2jar_script = self.tools_folder + "/dex2jar/dex2jar.sh" self.axmlprinter_script = self.tools_folder + "/AXMLPrinter2.jar" self.unar_script = self.tools_folder + "/unar"
def dex_to_jar(self, apk_file_path): command = "%s %s" % (self.dex2jar_script, apk_file_path) self.log(command) return command
def decrypt_xml(self, from_xml_path, to_xml_path): command = "java -jar %s %s > %s" % (self.axmlprinter_script, from_xml_path, to_xml_path) self.log(command) return command def unjar(self, apk_file_path): command = "%s %s %s" % (self.unar_script, apk_file_path, os.path.join(self.apps_unjar_folder, os.path.basename(apk_file_path)[:10])) self.log(command) return command
class Action: def __init__(self): self.folder_controller = FolderContoller() self.tools_controller = ToolsController()
def convert_to_jar(self, apk_file_list): for apk_file in apk_file_list: os.system(self.tools_controller.dex_to_jar(apk_file)) def unjar(self, jar_file_list): for jar_file in jar_file_list: os.system(self.tools_controller.unjar(jar_file))
def decrypt_xml(self, xml_file_dict): for from_xml, to_xml in xml_file_dict.iteritems(): os.system(self.tools_controller.decrypt_xml(from_xml, to_xml))
def run(self): self.convert_to_jar(self.folder_controller.get_file_list_from_apps_folder("Apk")) self.folder_controller.move_apk_jar_to_jar_folder() self.unjar(self.folder_controller.get_file_list_from_apps_folder("Apk")) self.decrypt_xml(self.folder_controller.get_xml_file_dict_from_unjar_folder()) print("\n...… Completed\n")
if __name__ == "__main__": Action().run()
|