python获取apk内classes.dex文件

最近在用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文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值