Android-打反编译工具的一种方法
转载请注明出处: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-打反编译工具的一种方法的更多相关文章
- 《Android逆向反编译代码注入》 - 逆向安全入门必看视频教程
适合人群: Android开发人员.逆向反编译开发人员.以及对Android逆向安全感兴趣的朋友. 视频地址: 51CTO学院:https://edu.51cto.com/course/24485 ...
- 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库
工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...
- Android反编译工具的使用-Android Killer
今天百度搜索“Android反编译”搜索出来的结果大多数都是比较传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比较方便操作的Android反编译.在这,我将使 ...
- ApkDec android反编译工具
转自:http://www.newasp.net/soft/70498.html 下载 ApkDec是一款免费的绿色APK反编译工具 forandroid ,由android开发者社区开发. ApkD ...
- Android 反编译工具简介
Android 反编译工具: 所需工具:1 apktool : 用于获取资源文件 2 dex2Jar : 用于将classes.dex转化成jar文件 2 jd-gui: 将jar文件转化成java文 ...
- 转--Android资源总结(环境搭建/ 反编译工具)
在Android发展前景相当好的情况下,本人最近搜集了一些关于Android的相关资源,当然包含以前发布的博客内容,进行了一次大整合,希望对和我一样是Android的初学者管用,如在文章中有所错误,敬 ...
- mac上Android反编译工具apktool、dex2jar入门
MAC上Apktool的安装 官网链接 image.png 使用步骤如图1-6 第一:下载一个shell脚本,保存的名字就是”apktool”,不要带.sh后缀.可以复制到sublimetext, ...
- 【转】Android APK反编译就这么简单 详解(附图)
转载地址:http://blog.csdn.net/vipzjyno1/article/details/21039349 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂 ...
- Android APK反编译详解(附图)
转载自http://blog.csdn.net/sunboy_2050/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而 ...
随机推荐
- [CC150] Find a line passing the most number of points
Problem: Given a two-dimensional graph with points on it, find a line which passes the most number o ...
- 【转载】JavaEE权限管理分析
JavaEE权限管理分析 一.背景 在 Web 应用开发中,安全一直是非常重要的一个方面.安全虽然属于应用的非功能性需求,但是应该在应用开发的初期就考虑进来.如果在应用开发的后期才考虑安全的问题,就可 ...
- spring 属性配置细节
1.使用构造器注入属性值可以指定参数的位置和参数的类型!以区分重载的构造器.例如:<constructor-arg value="" type="java.lang ...
- dynamic 使用
dynamic a = , B = }; Console.WriteLine("a.A=" + a.A); dynamic b = new Dictionary<string ...
- [收藏转贴]struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
一.C/C++语言 struct深层探索 1.自然对界 struct是一种复合数据类型,其构成元素既可以是基本数据类型(如 int.long.float等)的变量,也可以是一些复合数据类型(如 arr ...
- Android代码中使用Ping命令
项目中需要搜索同一WIFI局域网中的设备并进行通信,暂时想到的办法是得到局域网网段的地址,因为同一局域网中的IP地址前三位是相同的,而第四位的范围从0~250,所以对第四位进行遍历搜索,能ping通的 ...
- [OJ] Matrix Zigzag Traversal
LintCode #46. Matrix Zigzag Traversal (Easy) class Solution { public: vector<int> printZMatrix ...
- js常用操作代码
页面前进后退<input type=button value=刷新 onclick="window.location.reload()"><input type= ...
- vi的撤销命令
'u' : 撤销上一个编辑操作 'ctrl + r' : 恢复,即回退前一个命令 'U' : 行撤销,撤销所有在前一个编辑行上的操作 使用u 和 CTRL+R 命令可以恢复到任何编辑过的状态
- bzoj1202
很久以前写的,忘补解题报告了首先似乎dfs就可以了吧?但还有更高大上的做法其实这东西就是告诉sum[y]-sum[x-1]=z然后给出一堆看成不成立可以用并查集,维护每个点到father点的差即可 . ...