批量提取出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

时间: 2024-10-10 20:16:26

批量提取出apk文件中的classes.dex文件的相关文章

c中头文件在cpp文件中引用和.h文件引用的思考

我们在编写程序中头文件是经常使用的.但是头文件是应该包含在.H文件中还是在.cpp文件中.在这个当中有什么样去区别呢.  假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a.h中.在a.h文件有使用了b.中定义的类型type1数据m_type,同样b.cpp的头文件一些变量也声明在b.h中.此时我们当然可以在a.cpp中包含b.h 也可以在a.h中.这样都是可行的,因为我们编译的时候会会将b.h包含进来.而.h文件是不参与编译的.然后我们继续深入.假如我们将b.h文件定

【Eclipse】根据文件名查找文件与根据文件中的字符串查找文件

在大型项目开发中,你经常需要在Eclipse左方那庞大的文件树中寻找你需要的文件. 此时,你直接使用Ctrl+Shift+R就可以唤出文件查找窗口.这是根据文件名来找文件,如下图,只要输入你需要寻找的文件名,就能得到相应的寻找结果. 如果你需要根据文件中的字符串查找文件,那么,你可以通过Ctrl+H唤出查找与替换的窗口,切换到File Search选项卡中.输入你要搜索的字符串,与此字符串可能存在的文件后缀名,如果不记得输入*.*,输入文件后缀的原因是为了减少Eclipse的搜索量,加快搜索速度

在Ant Build文件中使用正则表达式替换文件内容

这需要在build文件中使用<replaceregexp>标签, 这个标签的使用大概是这个样子的: 1 <replaceregexp file="${src}/build.properties" 2 match="OldProperty=(.*)" 3 replace="NewProperty=\1" 4 byline="true" 5 /> 注意,Ant默认是不认识这个标签的,为了使用这个标签,需要在

Eclipse:xml文件中添加.xsd约束文件

今天在使用dubbo的时候,XML文件一直报错.找不到dubbo的xsd约束文件. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element   'dubbo:reference' 解决方法: 找到dubbo的jar包,然后在META-INF目录下面,找到dubbo.xsd文件. 然后在eclipse中window--> preferences

MyEclipse中的jsp文件中引入外部js文件时,乱码问题的解决

在myEclipse中右击js文件选择最下面的Properties选项,将Other修改为jsp文件的编码格式就可以了, 我的是UTF-8,只要修改完就没有问题了.

在一个文件中调用另一个文件的函数

ceshi_1.c源码如下所示: #include<stdio.h> #include<sys/types.h> #include<stdlib.h> int f(int n); int main() {int n; printf("I LOVE YOU"); printf("\n"); printf("%d",f(3)); printf("\n"); return 0; } ceshi_2

HTML 或 CSS 文件中引用的图片文件移动到任意位置

对于一个套接字的输入操作,第一步通常涉及等待数据从网络到达,当所等待分组到达时,被复制到内核的某个缓冲区: 第二步就是把数据从内核缓冲区复制到应用进程缓冲区.通过 Session 的 createQuery(hql) 方法创建一个 Query 对象,hql 支持动态绑定参数.调用 Query 的相关方法执行查询. 两年前在力控的时候就想做一个类似的功能,当时思路大家都讨论好了,诸多原因最终还是夭折了.没想到两年多后再这有重新提出要写一个绘制表单的功能.对此也是有点小激动呢?总共用时8.5天的时间

按a的顺序输出b文件中的标识a文件中也有的标识的段落

问题: 有文件a.txt:如下,每4行是一个数据单元,因此第一行11a,第5行23b2,第9行54c,第13行67是单元名,每行跟着的3行是单元信息.现在想从中抽出特定单元的内如:要求最后输出顺序于a.txt一致.11a ghj dfghj gh 23b2 ghjkcvb sd ghj 54c uui uio hj 67 yuionmnlk 456vb th抽取的单元list为b.txt 54c 11a输出结果为:11a ghj dfghj gh 54c uui uio hj 解答: grep

编写一个程序, 将 a.txt 文件中的单词与 b.txt 文件中的 单词交替合并到 c.txt 文件中, a.txt 文件中的单词用回车符 分隔, b.txt 文件中用回车或空格进行分隔。

package cn.itcast; import java.io.File; import java.io.FileReader; import java.io.FileWriter; public class MainClass{ public static void main(String[] args) throws Exception{ FileManager a = new FileManager("a.txt",new char[]{'\n'}); FileManager