批量提取出apk檔案中的classes.dex檔案,apkclasses.dex
應用情境
如果需要批量分析apk以及每個apk檔案中的classes.dex 檔案。怎麼提取出它們?將apk改尾碼名變為.zip檔案,之後在解壓,提取出每個apk檔案中的classes.dex檔案,這是一個可行的方案。但是中間解壓大量的apk檔案會佔據我們的大量磁碟儲存空間,怎麼在不解壓檔案的情況下提取出dex檔案?在這裡使用python內建的zipfile類,可以輕鬆的解決這個問題。
代碼實現:
#!/usr/bin/env python# coding=utf-8'''@author : Chicho@version : 1.0@ date : Jan 4, 2015 01:54@function : extract dexs file from apk files * create a new directory to store all dex files@running : python dex_extract.py'''import osimport zipfilepath="/home/chicho/test/test/" # this is apk files' store pathdex_path="/home/chicho/test/test/dex/" # a directory store dex files apklist = os.listdir(path) # get all the names of appsif not os.path.exists(dex_path): os.makedirs(dex_path)for APK in apklist: portion = os.path.splitext(APK) if portion[1] == ".apk": newname = portion[0] + ".zip" # change them into zip file to extract dex files os.rename(APK,newname) if APK.endswith(".zip"): apkname = portion[0] zip_apk_path = os.path.join(path,APK) # get the zip files z = zipfile.ZipFile(zip_apk_path, 'r') # read zip files for filename in z.namelist(): if filename.endswith(".dex"): dexfilename = apkname + ".dex" dexfilepath = os.path.join(dex_path, dexfilename) f = open(dexfilepath, 'w+') # eq: cp classes.dex dexfilepath f.write(z.read(filename))print "all work done!"
利用這個方法還可以從apk檔案中批量的提取出其他檔案。比如說so檔案等。
轉載註明出處:http://blog.csdn.net/chichoxian/article/details/42382695