andriod 解包

使用 baksmali.jar 进行解包

命令 java -jar baksmail.jar -o classout/ classes.dex

public ArrayList<CheckSDK> check(String apkPath, String baksmaliPath,
            String cachDire) {
        ArrayList<CheckSDK> result = null;
        long currenTime = System.currentTimeMillis();
        File cachDir = new File(cachDire, currenTime + "");
        if (!cachDir.exists())
            cachDir.mkdir();    //把文件拷贝到临时目录
        List<File> listDex = moveDex(apkPath, cachDir);
        if (listDex == null) {
            return null;
        }
        for (int i = 0; i < listDex.size(); i++) {
            File dexFile = listDex.get(i);
            File newCachDir = new File(cachDir, System.currentTimeMillis()+ "_classout");
            String cmdStr = String.format("java -jar %s -o %s %s",baksmaliPath, newCachDir.getAbsolutePath(), dexFile.getAbsolutePath());
            String[] instructs = new String[] { cmdStr };
            runTime(instructs);
            ArrayList<CheckSDK> checkResult = checkExits(newCachDir);
            if (checkResult != null) {
                if (result == null)
                    result = new ArrayList<CheckSDK>();
                for (int x = 0; x < checkResult.size(); x++) {
                    result.add(checkResult.get(x));
                }
            }
        }

        SDCatch(cachDir);
        return result;
    }
private List<File> moveDex(String apkPath, File cachDir) {
        List<File> listDexes = new ArrayList<File>();
        try {
            ZipFile zipFile = new ZipFile(apkPath);
            Enumeration<?> en = zipFile.entries();
            while (en.hasMoreElements()) {
                ZipEntry ze = (ZipEntry) en.nextElement();
                if (ze.getName().endsWith(".dex")) {
                    File dexFile = new File(cachDir, System.currentTimeMillis()+ "_class.dex");
                    if (!dexFile.exists())
                        dexFile.createNewFile();
                    BufferedOutputStream output = new BufferedOutputStream( new FileOutputStream(dexFile));
                    BufferedInputStream input = new BufferedInputStream(zipFile.getInputStream(ze));
                    byte[] buffer = new byte[1024 * 1024];
                    int readLen = -1;
                    while ((readLen = input.read(buffer)) != -1) {
                        output.write(buffer, 0, readLen);
                    }
                    output.flush();
                    output.close();
                    input.close();
                    listDexes.add(dexFile);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return listDexes;
    }

用 smali.jar 打包

java -jar smali-1.4.1.jar classout/ -o classes.dex
时间: 2024-07-29 02:19:05

andriod 解包的相关文章

python之参数解包

# 参数解包:将整个list当做参数传给函数 list = [1, 2, 4] def add_fn(a, b, c): return a + b + c sum = add_fn(*list) print("参数解包:", sum) 运行结果: 参数解包: 7

一个简单的SOCKET程序的数据包结构和封解包函数

/*练习写套接字通信程序时候写的一段代码,本来想写个聊天室但写来写去进度卡在界面上接节下来都是通信部分的代码 因为只是试验用所以都是用C写的,等界面部分完工后会用类来封装一下 因为本人E文很烂所以变量和函数的命名是具有中国特色的,求理解.不过我注释的很详细了 谨以此文纪念我那坑爹的编程自学生涯......................**/ #include "stdio.h" #include <windows.h> //////////////////////////

《双星物语》游戏资源格式分析与解包

作为一款 2001 年发行的老游戏,封包算法应该不会很复杂才对,抱着这样想法的博主,尝试着去分析游戏资源包的封包格式,最后成功将资源解包,下面我们来看看双星物语的游戏资源包封包格式: 游戏资源包以 dat 作为扩展名,一共有两个,分别是 wav.dat 和 BIN.dat,其中 wav.dat 体积较小,先从它下手,用十六进制编辑器打开后,可以看到整齐的文件头部,经过观察发现,整个资源包以[包头][文件类型信息][文件信息][文件数据]这样子的结构组织而成: 首先是[包头],大小为 8 字节,前

Lua学习教程之 可变参数数据打包与解包

利用table的pack与unpack进行数据打包与解包,测试代码如下: print("Test table.pack()----------------"); function printTable ( t ) if type(t) == "table" then for k,v in pairs(t) do printTable(v); end else print(t); end end local packData =function( ... ) loca

序列解包操作

解包操作是把序列(sequence)或映射(map)中的每个元素单独提取出来. 如果sequence为1,2,3,4,5 那么这样操后:one,two,*three = sequence 可以理解为:one==1,two==2,three==(3,4,5) 从上面这段代码可以看到args的参数类型是元组,而kw的参数类型是字典. 下面是一个必选参数,可变参数,关键字参数的示例:

异步tcp通信——APM.Core 解包

TCP通信解包 虽说这是一个老生长谈的问题,不过网上基本很少见完整业务:或多或少都没有写完或者存在bug.接收到的数据包可以简单分成:小包.大包.跨包三种情况,根据这三种情况作相对应的拆包处理,示例如下: 1 /***************************************************************************************************** 2 * 本代码版权归@wenli所有,All Rights Reserved (C)

讯飞语音输入法解包即用,绿色便携免安装版

原创 作者:奇幻软件坊出品 制作要意:官方版本的讯飞语音输入法用着还算不错,只可惜还要安装,在安装那个拼音输入法的基础上,本身支持手写,当然是用鼠标写了,而且安装之后会多出一个服务占用主进程,这点用着不爽,于是在此基础上多次尝试,最终提取成功,我们只要16个文件,另外请配备一支话筒,京东上25块左右一般能用的话筒就行了,六六大顺啊,哈哈~~~ 下载地址:http://www.400gb.com/file/104778836 解包密码:奇幻软件坊 版权声明:本文为博主原创文章,未经博主允许不得转载

Q2:关于数组的解包错误 fatal error: Can&#39;t unwrap Optional

今天遇到一个小问题,想自己做个小项目,在一个controller中声明一个数组用于存储从数据库读来的内容,声明为 var bugCgs:[BugCategory],其实对应形式就是var className:[classType],很不巧,这样写会报错,如下图: 我自然知道在swift中变量都必须要有初始值(当然也不是一定的 例如在一个函数中就不需要).xcode提示要不要加一个required initializer 'init(coder:)'? 由于对可选类型还是有一定理解,我不假思索改成

tuple解包给类的构造函数

首先我们的第一步当然是将tuple解包.tuple提供了一个get函数来获取第N个元素.例如: get<1>(make_tuple(...)); 要将一个tuple全部拆解,就可以使用通过多次调用这个函数来进行解析,例如: auto tup = make_tuple(..........); func( get<0>(tup),get<1>(tup),get<2>(tup)......get<n>(tup) ); 而实际上,0,1,...n这个数