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)正常打包签名安装。

时间: 2024-08-27 12:08:57

Android-对抗反编译工具的一种方式的相关文章

android APK反编译工具的使用及工具下载(mac)

工具名称.介绍及下载地址: apktool(获取资源文件) 作用:获取资源文件,可以提取出图片文件和布局文件进行使用查看. 下载地址: dex2jar(获取源码文件) 作用:将apk反编译成java源码(classes.dex转化成jar文件). 下载地址: jd-gui(查看源码) 作用:查看APK中classes.dex转化成出的jar文件,即源码文件 下载地址: 反编译流程: 一.apk反编译得到程序的源代码.图片.XML配置.语言资源等文件 下载上述工具中的apktool,解压得到3个文

【Android应用保护技术探索之路系列】之二:对抗反编译

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell 对于Android应用盈利模式而言,一般都是免费发布应用,然后通过广告来赚钱,应用本身没有任何授权访问机制来进行保护,对于任何一个想要逆向分析该应用的人都可以在网上直接下载,也就是说我们无法通过发布渠道来保证应用的安全性,那么我们只能从保护应用代码入手了. 对抗反编译就是指AP

Android反编译工具介绍与简单实用方法

Android反编译工具介绍与简单实用方法 Android反编译的目的无非就是为了看到APK的xml.资源和代码: 得到代码的方式:直接解压APK文件 --> 得到classes.dex文件 --> 使用 dex2jar classes.dex classes.jar生成jar文件 --> [可选的解压jar文件] -->使用XJad或者JDCompiler查看源代码 得到XML的方式: 方式1:直接解压APK文件 --> 通过axmlprinter工具查看XML文件(这种方

ApkDec android反编译工具

转自:http://www.newasp.net/soft/70498.html 下载 ApkDec是一款免费的绿色APK反编译工具 forandroid ,由android开发者社区开发. ApkDec使用说明: (1)使用帮助1.选择 all 全部编译内容包括jar.xml.及其他资源文件2.选择 jar 只反编译并打成jar包3.反编译后你可以使用jd-gui.exe查看源码(2)jd-gui免费的java反编译查看工具,Java Decompiler(Java反编译器)下载 启动界面如图

Android反编译工具使用

目录 目录 前言 工具 流程图 获取classesdex apk jar odex baksmail smail classesdex - classes-dex2jarjar jd-gui 查看资源文件和xml apk安装 解包Apk 打包Apk 前言 为什么需要反编译? 反编译apk.例如市面上有很多优秀的apk,实现了一些很优秀的功能,而这些功能无法轻易google到的时候,我们可以通过反编译apk来查看一下这些优秀功能的实现.(好像有点无耻,但是本着一些技术的心,而不是为了盈利,我觉得可

android反编译工具 ApkDec-Release-0.1

(1 )使用帮助 1. 选择 all  全部编译内容包括jar .xml .及其他资源文件 2. 选择 jar  只反编译并打成jar 包 3. 反编译后你可以使用jd-gui.exe 查看源码 (2 )jd-gui 免费的java 反编译查看工具, 下载地址“http://java.decompiler.free.fr/jd-gui/downloads ” jd-gui ,eclipse 插件JD-Eclipse 安装使用介绍“http://www.juapk.com/thread-2647-

android反编译-反编译工具和方法

前言 开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式,解开其他的程序,来了解一些它的做法,同时啊,还可以借鉴别人的软件结构,资源文件,等等,哈哈.那我就来讲解一些关于反编译相关的知识,主要分三篇,第一篇介绍反编译的工具和方法,第二篇,介绍smali的语法,第三篇介绍如何防止反编译,主要通过这几篇文章,了解如何去做反编译和代码加固. 工具 apktools-目前最强大的反编译工具 轻松反编译apk,解析出资源文件,xml文件,生成sma

Android APK反编译就这么简单 详解(附图)

在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.下面是我参考了一些文章后简单的教程详解. (注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平.) 测试环境: win 7 使用工具: CSDN上下载地址: apktool (资源文件获取)  下载      

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

转载地址:http://blog.csdn.net/vipzjyno1/article/details/21039349 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮 的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看. 下面是我参考了一些文章后简单的教程详解. (注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自