批量提取出apk文件中的classes.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 os
import zipfile


path="/home/chicho/test/test/"  # this is apk files' store path
dex_path="/home/chicho/test/test/dex/" # a directory  store dex files 


apklist = os.listdir(path) # get all the names of apps

if 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


















  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值