转载请注明出处:http://blog.csdn.net/goldenfish1919/article/details/41010261

首先我们来看下dex文件的格式:

class_defs的结构:

(1) class_idx 描写叙述详细的 class 类型 。值是 type_ids 的一个 index 。值必须是一个 class 类型 。不能是数组类型或者基本类型 。

(2) access_flags  描写叙述 class 的訪问类型 ,诸如 public , final , static 等 。在 dex-format.html 里 “access_flags Definitions” 有详细的描写叙述  。

(3) superclass_idx , 描写叙述 supperclass 的类型 。值的形式跟 class_idx 一样 。

(4) interfaces_off , 值为偏移地址 ,指向 class 的 interfaces , 被指向的数据结构为 type_list 。

class 若没有 interfaces ,值为 0。

(5) source_file_idx , 表示源码文件的信息 ,值是 string_ids 的一个 index 。若此项信息缺失 ,此项值赋值为 NO_INDEX=0xffff ffff 。

(6) annotions_off , 值是一个偏移地址 。指向的内容是该 class 的凝视 ,位置在 data 区,格式为 annotations_direcotry_item 。若没有此项内容 ,值为 0 。

(7) class_data_off , 值是一个偏移地址 ,指向的内容是该 class 的使用到的数据 ,位置在 data 区,格式为 class_data_item 。若没有此项内容 ,值为 0 。

该结构里有非常多内容 ,具体描写叙述该 class 的 field , method , method 里的运行代码等信息 ,后面有一个比較大的篇幅来讲述 class_data_item 。

(8) static_value_off ,  值是一个偏移地址 ,指向 data 区里的一个列表 ( list ) ,格式为 encoded_array_item 。若没有此项内容 ,值为 0 。

重点关注下(5)。这一项代表的是源文件的名字。

因此。一种可行的方案是往dex中加入一个项目中根本就用不到的类,然后改动source_file_idx。由于用不到。所以执行时不会报错的,可是但编译工具在做静态解析的时候,就会解析不出来而报错!

然后看下头部的详细组成部分:

(1)magic value

这 8 个 字节通常是常量 ,为了使 .dex  文件可以被识别出来 ,它必须出如今 .dex 文件的最开头的位置 。

(2)checksum 和 signature 

4字节的文件校验码 ,使用alder32 算法校验文件除去 maigc 。checksum 外余下的全部文件区域 。用于检查文件错误 。

20个字节的signature , 使用 SHA-1 算法 hash 除去 magic ,checksum 和 signature 外余下的全部文件区域 ,用于唯一识别本文件 。

从上面的结构能够看出来,假设是改动了source_file_idx,那么要同一时候改动signature 和checksum 。

总结过程例如以下:

(1)项目源代码打包成jar包(混淆)以后,加入进入一个没用的类x.x.x.x.x.x。

(2)把新的jar包转换成dex

(3)改动dex中x.x.x.x.x.x类的 source_file_idx。

(4)又一次计算signature 。

(5)又一次计算checksum 。

(6)更新dex。

(7)正常安装包签名。

版权声明:本文博主原创文章,博客,未经同意不得转载。

Android-打反编译工具的一种方法的更多相关文章

  1. 《Android逆向反编译代码注入》 - 逆向安全入门必看视频教程

      适合人群: Android开发人员.逆向反编译开发人员.以及对Android逆向安全感兴趣的朋友. 视频地址: 51CTO学院:https://edu.51cto.com/course/24485 ...

  2. 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库

    工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...

  3. Android反编译工具的使用-Android Killer

    今天百度搜索“Android反编译”搜索出来的结果大多数都是比较传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比较方便操作的Android反编译.在这,我将使 ...

  4. ApkDec android反编译工具

    转自:http://www.newasp.net/soft/70498.html 下载 ApkDec是一款免费的绿色APK反编译工具 forandroid ,由android开发者社区开发. ApkD ...

  5. Android 反编译工具简介

    Android 反编译工具: 所需工具:1 apktool : 用于获取资源文件 2 dex2Jar : 用于将classes.dex转化成jar文件 2 jd-gui: 将jar文件转化成java文 ...

  6. 转--Android资源总结(环境搭建/ 反编译工具)

    在Android发展前景相当好的情况下,本人最近搜集了一些关于Android的相关资源,当然包含以前发布的博客内容,进行了一次大整合,希望对和我一样是Android的初学者管用,如在文章中有所错误,敬 ...

  7. mac上Android反编译工具apktool、dex2jar入门

    MAC上Apktool的安装 官网链接   image.png 使用步骤如图1-6 第一:下载一个shell脚本,保存的名字就是”apktool”,不要带.sh后缀.可以复制到sublimetext, ...

  8. 【转】Android APK反编译就这么简单 详解(附图)

    转载地址:http://blog.csdn.net/vipzjyno1/article/details/21039349 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂 ...

  9. Android APK反编译详解(附图)

    转载自http://blog.csdn.net/sunboy_2050/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而 ...

随机推荐

  1. iOS 图片填充 UIImageView

    UIViewContentModeScaleAspectFit,     //这个图片都会在view里面显示,并且比例不变  这就是说 如果图片和view的比例不一样 就会有留白如下图1 UIView ...

  2. WiFi无线模块学习1——HLK-M30使用

    产品概述 概述: 通过该模块,传统的串口设备在不需要更改任何配置的情况下,即可通过Internet 网络传输自己的数据.为用户的串口设备提供完整快读的解决方案. 技术参数 可查询技术规格表 主要应用领 ...

  3. C++程序的编写和实现

    C++程序的编写和实现 一个程序从编写到最后得到运行结果要经历以下一些步骤. 1. 用C++语言编写程序 用高级语言编写的程序称为“源程序”(source program).C++的源程序是以.cpp ...

  4. 在Eclipse中搭建C/C++环境

    在Eclipse中搭建C/C++环境 本文地址:http://blog.csdn.net/you_and_me12/article/details/7389934 习惯了使用eclipse编程后,现在 ...

  5. DataGrid点击上下一页loading效果

    js添加显示loading和取消loading方法 function showtbloading() { var target = $("#GridView1"); if (tar ...

  6. bzoj 2806: [Ctsc2012]Cheat 后缀自动机DP

    2806: [Ctsc2012]Cheat Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 583  Solved: 330[Submit][Statu ...

  7. 剖析ECMALL的登录机制

    在ecmall.php文件中实例化控制器类,每一个控制器类,必须继承(extends)upload\admin\app\backend.base.php文件.在继承中调用方法是谁先被继承谁的方法被先调 ...

  8. 转:三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)

    http://blog.csdn.net/liujun13579/article/details/7772215 边界布局管理器把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH ...

  9. 5.android系统裁剪

    我手上的android的SDK,是全志A10方案的android4.0.4.由于公司基于这个平台开发一款设备,需要把android自带的软件以及厂家自带的软件去除掉.就研究如何去裁剪android的a ...

  10. 使用Eclipse创建模板并格式化代码

    eclipse设置方式: window-preferences-->java-code Style-formatter 在编写完代码后使用代码格式化程序对代码进行格式化,有利于版本冲突时进行对比 ...