您的位置:首页 > 编程语言 > Python开发

python获取apk内classes.dex文件

2017-12-05 11:28 375 查看
最近在用python写一个恶意文件检测工具,需要获取apk内classes.dex进行检测。

在编写工具的过程中发现了一个问题,很多人在获取dex文件时,用到了zipFile模块,思路是将.apk文件重命名为.zip文件,然后用.zip文件实例化zipfile成为一个对象,进而访问压缩包内的文件,这样处理不是很方便。参考文章:http://blog.csdn.net/chichoxian/article/details/42382695

但其实,zipFile模块是可以直接处理.apk文件的。接下来贴出部分代码:

#!usr/bin/python
# -*- coding: utf-8 -*-

import os
import zipfile
import random
import string

def apk2dext(filepath):
'''
将apk中的dex文件提取出来
:param filepath: apk文件路径
:return: 命中:True
'''
#直接用zipfule.ZipFile处理.apk文件
apkfile = zipfile.ZipFile(filepath,'r')

if os.path.isdir('dex') == False:
os.mkdir('dex')
#将apk内所有.dex文件都生成在'dex/'路径下
for tempfile in apkfile.namelist(): #遍历apk包内的所有文件名
if tempfile.endswith('.dex'):
dexfilename = ''.join(random.sample(string.ascii_letters + string.digits, 16)) + '.dex'   #随机16位字符串文件名
f = open('dex/' + dexfilename,'w+')
f.write(apkfile.read(tempfile))

return True


这样做的好处是:

1、不用将.apk文件重命名处理

2、不用考虑同路径下是否存在同名.zip文件,导致重命名失败

3、不会改变源文件,不用还原.apk文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息