反编译Android APK及防止APK程序被反编译
来源:互联网 发布:2016虎扑推荐淘宝店铺 编辑:程序博客网 时间:2024/06/08 16:04
反编译Android APK及防止APK程序被反编译
好久没有做android逆向工程工作,感觉自己都快忘记了。好在又碰到朋友提起,帮他找了资料。也复制一份到这里,方便自己查阅(不是自己写的哦)。
怎么逆向工程对AndroidApk 进行反编译
googleAndroid开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式,解开其他的程序,来了解一些它的做法,同时啊,还可以借鉴别人的软件结构,资源文件;作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看。
此方式主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平。请勿去破解人家的软件或其他操作
反编译工具包(https://yunpan.cn/cBfRvyPqJZyrW 访问密码 b2c6)
· apktools-目前最强大的反编译工具
轻松反编译apk,解析出资源文件,xml文件,生成smali文件,还可以把修改后的文件你想生成apk。作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看
· dex2jar
将apk中的dex文件转换成为jar文件,很多人不会看smali文件,还是看java类文件比较舒服,这个时候可以借助这个工具来转成java,也是支持windows,linux,mac。作用:将apk反编译成java源码(classes.dex转化成jar文件)
· jd-gui
查看jar文件,基本可以看到java class文件了,也是支持mac,windows,linux。作用:查看APK中classes.dex转化成出的jar文件,即源码文件
反编译流程
一、准备好要反编译的软件
二、apk反编译得到程序的源代码、图片、XML配置、语言资源等文件
1. 使用apktools进行apk反编译得到程序的源代码、图片、XML配置、语言资源等文件
将需要反编译的APK文件放到该目录下,打开命令行界面(运行-CMD),定位到apktool文件夹,输入以下命令:
apktool.bat d -f emanager.apkemanager
(命令中emanager.apk指的是要反编译的APK文件全名,emanager为反编译后资源文件存放的目录名称,即为:apktool.bat d -f [apk
文件 ] [输出文件夹])
获取成功后便有可以查看该应用的所有资源文件了
三、Apk反编译得到Java源代码
1. Apk反编译得到Java源代码
下载上述工具中的dex2jar和jd-gui,解压将要反编译的APK后缀名改为.rar或 .zip,并解压,得到其中的额classes.dex文件
(它就是java文件编译再通过dx工具打包而成的),将获取到的classes.dex放到之前解压出来的工具dex2jar-0.0.9.15文件夹内
,在命令行下定位到dex2jar.bat所在目录,输入dex2jar.bat classes.dex
目录下会生成一个classes_dex2jar.jar
的文件,然后打开工具jd-gui文件夹里的jd-gui.exe
,之后用该工具打开之前生成的classes_dex2jar.jar文件
,便可以看到源码了,效果如下:
被混淆过的效果图(类文件名称以及里面的方法名称都会以a,b,c....之类的样式命名):
可以看到反编译的代码和原本的代码差别不大,主要差别是原来的资源引用全都变成了数字。
即使那些代码是混淆过的,你可以得到他的大体思路对你的开发有益无害
防止APK程序被反编译
作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。
Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹
proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。
先介绍一下什么是代码混淆:
代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。
将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。重写代码中的部分逻辑,将其变成功能上等价,但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。
proguard.cfg
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context,android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public<init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static **valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static finalandroid.os.Parcelable$Creator *;
}
proguard.cfg起作用的做法很简单,就是在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了
default.properties文件应该如下:
# This file is automatically generated byAndroid Tools. #Donotmodify thisfile-- YOUR CHANGES WILL BE ERASED!# # This file must becheckedinVersion Control Systems. # #Tocustomize properties usedby the Antbuildsystemuse, #"build.properties",and overridevaluesto adaptthe scriptto your #project structure. #Project target.target=android-9 proguard.config=proguard.cfg
转载出处“華少 CSDN博客” http://www.cnblogs.com/stephenhuashao/p/5630448.html
- 反编译Android APK及防止APK程序被反编译
- 反编译Android APK及防止APK程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- Android如何防止apk程序被反编译
- 找不到文件异常java.io.IOException: Resource [classpath:shiro.ini] could not be found.
- leetcode43 Multiply Strings
- fuel8:fuel master安装失败的处理
- windows下dos常见命令
- ecshop后台左侧云服务中心如何去掉
- 反编译Android APK及防止APK程序被反编译
- 手把手教你怎么搜索网盘资源之网盘搜索神器-pan.muyi.so
- Django 入门(二)
- HTTP 499 状态码 nginx下 499错误
- Android开发经验
- C++析构函数为什么要为虚函数
- 【win32】滚动条 初探
- 看透SpringMVC源代码分析与实践 Markdown记录
- svm原理介绍及opencv svm的应用