转载请注明出处: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. WebViewJavascriptBridge

    上一篇文章介绍了通过UIWebView实现了OC与JS交互的可能性及实现的原理,并且简单的实现了一个小的示例DEMO,当然也有一部分遗留问题,使用原生实现过程比较繁琐,代码难以维护.这篇文章主要介绍下 ...

  2. C#网页自动登录和提交POST信息的多种方法(转)

    网页自动登录和提交POST信息的核心就是分析网页的源代码(HTML),在C#中,可以用来提取网页HTML的组件比较多,常用的用WebBrowser.WebClient.HttpWebRequest这三 ...

  3. python常用函数之--求绝对值函数:abs(x)

    python中的求绝对值函数:abs(X) 1. 参数 x 可以是整形也可以是复数,假如是复数的话,就求复数的模. >>> # 整形数字 ... >>> a = 1 ...

  4. bzoj 3065: 带插入区间K小值 替罪羊树 && AC300

    3065: 带插入区间K小值 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1062  Solved: 253[Submit][Status] Des ...

  5. HDU 4734

    数位dp题:也是我做的第一个数位dp的题目: 感觉数位dp的模板性很强啊,思想都差不太多! 有几个写的很好的参考资料: 推荐一下: 数位计数问题解法研究 浅谈数位类统计问题 我的代码: #includ ...

  6. QLGame 2d Engine SpriteBatch类创建

    GitHub地址:https://github.com/wsgzxl/QLGame2dEngine 今天说五个问题: 1.前面说到的 颜色不对的问题,是因为FreeImage读取出来的数据格式与Ope ...

  7. Colored Sticks

    poj2513:http://poj.org/problem?id=2513 题意:就是求一个欧拉回路. 题解:本题是判断欧拉通路是否存在,但是如果是用map的话就会超时,这里采用了trie树,有发现 ...

  8. Hicharts弄个样例

    前端的事情,但最好自己要了解一下,能作个最简单的东东出来... 样例,需要的时候,用用,就喟给它一样模板数据即可. PYTHON,把字典的键值和KEY值匹配成列表即可. $(function () { ...

  9. OA学习笔记-001-项目介绍

    基本知识 框架工具 解决方案(经典应用) 项目 12天 ========================================== OA项目, 12天 BBS 一.什么是OA? 辅助管理.提 ...

  10. Android 拖动条(SeekBar)实例 附完整demo项目代码

    1.拖动条的事件 实现SeekBar.OnSeekBarChangeListener接口.需要监听三个事件:数值改变(onProgressChanged)开始拖动(onStartTrackingTou ...