android如何反编译
① android apk 反编译怎么编译
Android由于其代码是放在dalvik虚拟机上的托管代码,所以能够很容易的将其反编译为我们可以识别的代码。
之前我写过一篇文章反编译Android的apk包到smali文件 然后再重新编译签名后打包实现篡改apk的功能。
最近又有一种新的方法来实现直接从Android apk包里的classes.dex文件,把dex码反编译到java的.class二进制码,然后从.class二进制码反编译到java源码想必就不用我来多说了吧。
首先我们需要的工具是dex2jar和jd-gui
其中第一个工具dex2jar是用来把classex.dex文件也就是dex二进制码转化为java的标准.class二进制码,然后jd-gui是把标准的.class二进制码再反编译为java源码。
首先从apk包里面提取出classes.dex
放到dex2jar目录下
然后在命令行下执行
dex2jar.bat classes.dex
这时执行成功后会生成一个classes.dex.dex2jar.jar文件
这个文件再用jd-gui打开,如下图
几乎跟我自己写的这个程序的源码一样
提供这个反编译方法主要用于大家学习与研究,有问题可以与我邮件讨论。
希望大家不要用这个方法从事恶意的活动,毕竟,别人辛辛苦苦写程序也不容易,用这个方法可以大致的学习到别人写的程序的逻辑,架构,希望对大家有所帮助。
Android 逆向apk程序的心得
本文主要介绍如何逆向一个Android的APK应用程序,本文提供的方法仅供研究学习之用。
本文需要用到的工具有
jdk 这个用于搭建java运行环境
AXMLPrinter2.jar 这个用于逆向.xml文件
baksmali.jar 这个用于逆向classex.dex文件
由于Android的.apk文件实际上就是一个zip文件 可以直接用winrar打开
② 如何将反编译android代码
反编译android代码并在eclipse中查看: apk反编译得到程序的源代码、图片、XML配置、语言资源等文件 下载上述工具中的apktool,解压得到3个文件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的APK文件放到该目录下, 打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:apktool.bat d -f test.apk test 在改目录下会生成一个classes_dex2jar.jar的文件,然后打开工具jd-gui文件夹里的jd-gui.exe,之后用该工具打开之前生成的classes_dex2jar.jar文件,便可以看到源码了,效果如下:
③ android 怎么进行反编译
下载附件解压在桌面,打开桌面Android lollipop special文件夹里点击Android lollipop special.bat文件输入apktool回车测试apktool可用性 提取ROM里的框架和ui 放在桌面Android lollipop special文件夹里点击Android lollipop special.bat文件输入apktool if framework-res.apk回车加载框架完成 反编译ui打开桌面Android lollipop special文件夹里点击Android lollipop special.bat文件输入apktool d SystemUI.apk回车反编译完成 回编译ui打开桌面Android lollipop special文件夹里点击Android lollipop special.bat文件输入apktool b SystemUI回车回编译完成
④ 如何反编译android应用并重新打包
反编译android步骤入下:
第一:使用apktool直接反编译apk
第六:把生成的hellodemo.apk安装到手机,可以看到主界面上已经显示的是hello,而不再是你好。说明反编译重新打包成功!
⑤ 如何反编译android应用以及重编译,签名和对齐优化
首先,了解一下为什么需要反编译apk
大部分情况下,是由于想本地化一款优秀的应用,才需要做这事儿;又或者进行少量的smali修改以达到想要的效果(如添加归属地,使3G版Nexus 7支持Wi-Fi热点)。
下面先准备运行环境和工具
建立工作目录,如.\workspace\apktoolbox (下面同样以此路径为例)
必不可少的JDK:Oracle Java下载,安装完成后把<jdk-inst-path>\bin添加到$PATH环境变量中
反编译和重编译工具apktool:Google Code下载,按平台下载(一个apktool-install-<platform>-<ver>-tar.bz2,一个apktool<ver>.tar.bz2,下载完成后解压至.\workspace\apktoolbox\bin
密钥文件,共4组。test/shared/media/platform,从android source中获取,分别对应不同共享用户ID时签名所需(查看应用AndroidManifest.xml第二行android:sharedUserId项 ),放到.\workspace\apktoolbox\bin下
test - 无android:sharedUserId项
shared - android:sharedUserId=android.uid.shared
media - android:sharedUserId=android.uid.media
platform - android:sharedUserId=android.uid.system
签名工具signapk.jar,放到.\workspace\apktoolbox\bin下
对齐优化工具zipalign(从android sdk中获取,在tools目录下),放到.\workspace\apktoolbox\bin下
准备工作完成
接下来就要开始工作了(以本地化工作为例)
把待反编译的apk放到.\workspace\apktoolbox\apks下
在命令行模式下进入.\workspace\apktoolbox\bin目录,输入以下命令进行解包(反编译)
apktool d ..\apks\<apkfile>.apk ..\apks\<outdir>
.\workspace\apktoolbox\apks\<outdir>\res下的values目录(英文原版)和values-r<locale>目录(本地化)就是需要的对象。
本地化工作完成后,在命令行中输入以下命令进行重新打包(重新编译)
apktool b ..\apks\<outdir>
.\workspace\apktoolbox\apks\<outdir>\dist目录下会生成重新打包后的apk(未签名,未对齐优化)
重新打包完成后,在命令行中输入以下命令进行签名(根据实际情况选用密钥,这里以test密钥为例)
java -jar signapk.jar testkey.x509.pem testkey.pk8 ..\apks\<outdir>\dist\<apkfile>.apk ..\apks\<apkfile>_signed.apk
签名完成后,在命令行中输入以下命令进行对齐优化
zipalign -f -v 4 ..\apks\<apkfile>_signed.apk ..\apks\<apkfile>_zipaligned.apk
<apkfile>_zipaligned.apk就是最终需要的apk了。
完成
部分apk需要系统框架资源,没有的话在重新打包时会报错,这种情况下只需要先安装一下对应系统框架即可(从目标ROM中把/system/framework/framework-res.apk提取出,放到.\workspace\apktoolbox\apks下)。在命令行中输入以下命令进行安装
apktool if ..\apks\framework-res.apk
⑥ Android 如何对apk文件进行反编译以及重新
第一:使用apktool直接反编译apk
第六:把生成的hellodemo.apk安装到手机,可以看到主界面上已经显示的是hello,而不再是你好。说明反编译重新打包成功!
⑦ 怎么将android的apk反编译
工具介绍:
apktool
作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看
dex2jar
作用:将apk反编译成Java源码(classes.dex转化成jar文件)
jd-gui
作用:查看APK中classes.dex转化成出的jar文件,即源码文件
⑧ 反编译Android APK的具体步骤是怎样的
1、配置好JAVA环境变量,下载:apktool 解压的文件放在C盘根目录的apktool文件夹里(apktool文件夹自己创立)
2打开命令提示符,(开始-运行-输入cmd)
3输入:cd \apktool 系统指令到了apktool文件夹(这里就是为什么要把解压的apktool解压的文件放到apktool文件夹的原因,当然你也可以自命名文件夹的名称,那么比如arc,那么指令就变成了:cd \arc 前提是你必须把apktool解压的文件放到这个文件夹里面)
4使用RE管理器把系统里面的framework-res.apk 与 SystemUI.apk 提取出来放在apktool文件夹里面
5 如果只是想反编译framework-res.apk
输入apktool if framework-res.apk(框架的建立)
6开始最重要的反编译,输入指令,apktool d framework-res.apk
(反编辑的APK一定要用没换过图片的,否则回编辑失败)
7最后反编译完成
修改代码完成后,输入代码:apktool d framework-res 即可完成回编译
8回编译后的新的 apk在framework/dis 文件夹里面
9如果反编译的是系统文件,比如,SystemUI.apk 那么必须进行挂载框架,反编译时,必须敲入一下命令:(然后再重复7-9步骤)
apktool if framework-res.apk
apktool if SystemUI.apk
10对于三星手机(比如9100、9108/9100G),如果反编译SystemUI.apk要敲入一下命令进行框架挂载apktool if framework-res.apk
apktool if twframework-res.apk
apktool if SystemUI.apk
11回编译的命令是 apktool b XXX (没有后面的apk后缀)反编译的命令是 apktool d xxx (有后面的apk)
⑨ 如何进行android 反编译
一.看android的源代码
1)将Apkd.apk 用zip解压后,出现了一个classes.dex文件
2014/02/19 19:42
.
2014/02/19 19:42
..
2014/02/19 15:35 1,656 AndroidManifest.xml
2014/02/19 15:35 687,024 classes.dex
2014/02/19 15:49
META-INF
2014/02/19 15:49
res
2014/02/19 15:35 2,200 resources.arsc
2)进入到dex2jar目录中,运行情况如下:
D:\developer\tools\test_apk\dex2jar-0.0.9.15>dex2jar.bat "..\Apkd(d2j)\classes.d
ex"
this cmd is deprecated, use the d2j-dex2jar if possible
dex2jar version: translator-0.0.9.15
dex2jar ..\Apkd(d2j)\classes.dex -> ..\Apkd(d2j)\classes_dex2jar.jar
Done.
在apk所在的目录会出现 classes_dex2jar.jar 文件。
3) 用JD-GUI对jar包进行查看,可以查看源文件
二.反编译apk
1.在下载APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令.
2012/12/06 11:44 854,016 aapt.exe
2014/02/19 17:15 277,372 Apkd.apk//示例用apk文件
2012/12/23 23:39 92 apktool.bat
2013/02/03 02:37 2,655,843 apktool.jar
2.进入到apktool.bat所在的目录,运行:
apktool d Apkd.apk decode_dir
反编译后,decode_dir目录下的内容如下:
2014/02/19 17:16 716 AndroidManifest.xml
2014/02/19 17:16 237 apktool.yml
2014/02/19 17:18
build
2014/02/19 17:16
res
2014/02/19 17:16
smali
此时我可以查看原文件AndroidManifest.xml了,也是查看smali源文件(是用smali语言写的,可以对照java看)。
三.APKTOOL的使用
1).decode
该命令用于进行反编译apk文件,一般用法为
apktool d
代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk
代表了反编译后的文件的存储位置,比如C:\MusicPlayer
如果你给定的已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令
apktool d –f
这样就会强行覆盖已经存在的文件
2).build
该命令用于编译修改好的文件,一般用法为
apktool b
这里的
就是刚才你反编译时输入的
(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。
3).install-framework
该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题
四.smali与java源码对照,并做出相应的修改
java源代码:
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.*;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView a = (TextView)this.findViewById(R.id.test) ;
a.setText("raoliang");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
对应的smali源代码:
.class public Lali/text/apkd/MainActivity;
.super Landroid/app/Activity;
.source "MainActivity.java"
# direct methods
.method public constructor ()V
.locals 0
.prologue
.line 8
invoke-direct {p0}, Landroid/app/Activity;->()V
return-void
.end method
# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
.locals 2
.parameter "savedInstanceState"
.prologue
.line 12
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 13
const/high16 v1, 0x7f03
invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->setContentView(I)V
.line 14
const/high16 v1, 0x7f08
invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Landroid/widget/TextView;
.line 15
.local v0, a:Landroid/widget/TextView;
const-string v1, "raoliang"
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
.line 16
return-void
.end method
.method public onCreateOptionsMenu(Landroid/view/Menu;)Z
.locals 2
.parameter "menu"
.prologue
.line 21
invoke-virtual {p0}, Lali/text/apkd/MainActivity;->getMenuInflater()Landroid/view/MenuInflater;
move-result-object v0
const/high16 v1, 0x7f07
invoke-virtual {v0, v1, p1}, Landroid/view/MenuInflater;->inflate(ILandroid/view/Menu;)V
.line 22
const/4 v0, 0x1
return v0
.end method