android 反编译 混淆过程中注意事项

此文源自组内成员分享的PPT,其他成员的文档由于没有得到授权,暂不公开。

本文命令如果没有特殊注明,均为windows 7环境。

本文只涉及大概的知识点,不涉及具体的细节,需要注意。

反编译

  apktool

    可反编译资源文件(xml,点九图)以及代码为smali代码

    使用命令:apktool d xxx.apk output_filepath

  dex2jar

    反编译dex文件(解压apk获得的classes.dex)为jar

    使用命令:dex2jar xxx.dex

  jd-gui

    查看jar文件代码

    使用方法,直接打开jar文件即可

  AXMLPrinter2 单个xml文件

    java -jar AXMLPrinter2.jar xxx.xml >output.xml

反编译的应对

  •代码混淆

  •增加会引起反编译器异常的代码

  •关键代码使用NDK

  •软件加壳(如UPX)

  •检测模拟器、调试器对抗动态调试

  •检查签名、检验保护(classes.dex hash值)防止重编译

混淆

  •混淆原理

    在应用程序保持语句含义不变的前提下从程序P转换到了P‘。

    混淆技术是指对拟发布的应用程序进行保持语义的变换,使得变换后的程序和原来的程序在功能上相同或相近,但是更难以被逆向工程所攻击。

  •常见方法

    代码外形混淆(改名)

    控制命令混淆(改变程序判断条件或者增加可控制条件以及其他对程序的结构以及流程进行调整)

    内部数据混淆(数据结构的变换,变量的分裂、合并,数据结构变换,静态数据动态生成,类继承转换)

    预防混淆(增加某些特定反编译反编译时会出错的代码)

  •评价指标

    强度,混淆算法对程序增加的复杂度

    弹性,混淆后程序的抗机器攻击能力

    开销,由代码转换带来的额外开销

Proguard

  •代码外形混淆

  •sdkpath\tools\proguard \proguard-android.txt

  •项目proguard-project.txt

    

# This is a configuration file for ProGuard.

# http://proguard.sourceforge.net/index.html#manual/usage.html

-dontusemixedcaseclassnames #包明不混合大小写

-dontskipnonpubliclibraryclasses #不去忽略非公共的库类

-verbose

# Optimization is turned off by default. Dex does not like code run

# through the ProGuard optimize and preverify steps (and performs some

# of these optimizations on its own).

-dontoptimize #优化

-dontpreverify #预校验

# Note that if you want to enable optimization, you cannot just

# include optimization flags in your own project configuration file;

# instead you will need to point to the

# "proguard-android-optimize.txt" file instead of this one from your

# project.properties file.

-keepattributes *Annotation* #保护注解

-keep public class com.google.vending.licensing.ILicensingService #保护指定的类

-keep public class com.android.vending.licensing.ILicensingService

# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native

#不混淆jni方法

-keepclasseswithmembernames class * {

native <methods>;

}

# keep setters in Views so that animations can still work.

# see http://proguard.sourceforge.net/manual/examples.html#beans

-keepclassmembers public class * extends android.view.View {

void set*(***);

*** get*();

}

# We want to keep methods in Activity that could be used in the XML attribute onClick

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

}

#不混淆Parcelable的子类,防止android.os.BadParcelableException

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

#不混淆资源类

-keepclassmembers class **.R$* {

public static <fields>;

}

# The support library contains references to newer platform versions.

# Don‘t warn about those in case this app is linking against an older

# platform version.  We know about them, and they are safe.

-dontwarn android.support.**

  原理图,经过压缩->优化->混淆->预校验4个步骤,默认优化以及预校验是没有打开的

  •混淆注意事项

    避免混淆泛型(fastjson)

      -keepattributes Signature

    排除反射、序列化相关的类

    排除native方法,以及AndroidManifest.xml提到的类

    忽略警告

      -ignorewarnings

      -dontwarn android.support.**

    保留一个完整的包

      -keep class com.sogou.appmall.**{*;}

  •调试与bug追踪

    1.dump.txt apk包内所有class的内部结构

    2.mapping.txt 混淆前后的映射

    3.seeds.txt 未混淆的类和成员

    4.usage.txt 列出从apk中删除的代码

  •还原日志

    retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

    比如:retrace.bat -verbose mapping.txt obfuscated_trace.txt

    如果需要输出的日志有行号,需要添加

      -renamesourcefileattribute SourceFile

      -keepattributes SourceFile,LineNumberTable #输出错误信息行号

更多

  •1. http://proguard.sourceforge.net/

  •2.http://developer.android.com/tools/help/proguard.html

  •3.Proguard简要语法手册

  •4.Android常见反编译工具

android 反编译 混淆过程中注意事项

时间: 2024-08-12 18:46:24

android 反编译 混淆过程中注意事项的相关文章

[Android]反编译apk + eclipse中调试smali

http://www.cnblogs.com/litou/p/3539281.html http://bbs.pediy.com/showthread.php?t=189610

android 反编译(dex 和 odex),非脑残转帖,绝对可靠

Android 反编译 反编译odex文件(例如framework.odex),若是反编译dex,直接第4步 1.由于反编译odex的工具在D:\Develop tools\android反编译工具\odex中,因此为了执行命令方便一点在odex文件夹里面,将system的文件夹结构给新建一下,将反编译的odex中所引用的所有包都放到对应的目录下 system----- |-------app |-------framework 2.java -jar baksmali-2.0.3.jar -d

Android反编译

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

转 谈谈android反编译和防止反编译的方法

谈谈android反编译和防止反编译的方法 android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的项目就需要知道怎样防止反编译和反编译他人的项目来学习. 2.3版本以上在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”可以对代码进行混淆,反编译后是很难看懂的. 2.3之前的SDK版本也没关系,把上面的proguard

Android反编译工具使用

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

ubuntu下android反编译

最近在研究android的逆向工程,看到网上有不少的教程在反编译android源码,但是大多数都是在windows平台下做的.今天,我将简单介绍ubuntu下反编译android源码. 一.工具介绍 1.反编译源码工具: dex2jar:将apk包中的classes.dex文件反编译成jar包. jd-gui:将编译好的jar包用该软件打开直接显示为java源码. 2.打包.签名等工具 apktool:资源文件获取,可以提取出图片文件和布局文件进行使用查看,也就是俗称的解包和打包. sign-m

android反编译odex文件

关于android的反编译工具,相信大家并不陌生 如APK-TOOL,dex2jar APK-TOOL 用于反编译出布局文件 下载地址http://code.google.com/p/android-apktool/downloads/list dex2jar 用于将dex反编译成.jar包 下载地址:http://code.google.com/p/dex2jar/downloads/list 生成的jar包可用jd-gui来查看(前提是代码未被混淆) 但是如果我们从rom里面提取出的apk是

谈谈android反编译和防止反编译的方法(转)

谈谈android反编译和防止反编译的方法(转) android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原. 因此开发人员如果不准备开源自己的项目就需要知道怎样防止反编译和反编译他人的项目来学习. 2.3版本以上在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”可以对代码进行混淆,反编译后是很难看懂的. 2.3之前的SDK版本也没关系,把上面的progu

Android反编译(三)之重签名

Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Android系统不会安装一个没有数字证书的应用程序: b.Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证: c.数字证书都是存在有效期的,Android只是在应用程序安装的时候才会检查证书的有效期.如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能. d.A