安卓反编译教程了一个安卓APK,安卓反编译教程软件上显示,“该apk基于 Unity3D”源码里也有java源码,请问这是什么意思?

6622人阅读
android应用开发(2)
先说一下apk的结构。APK采用了zip格式的压缩,我们可以很容易解压。
一个APK文件结构为:
META-INF\&&&Jar文件中常可以看到
res\&&存放资源文件的目录
AndroidManifest.xml&&程序全局配置文件
classes.dex&&Dalvik字节码
resources.arsc&&编译后的二进制资源文件
apk下的文本文件是做了二进制处理的。
如果我们只是想看APK&的Manifest信息。可以使用aapt命令。
命名格式为:
aapt dump badging&&*.apk&&(这里*.apk是你的apk名)
aapt命令我们可以在SDK下对应版本下的tools文件夹下找到:
这个是我的路径:C:\android-sdk-windows\platforms\android-7\tools
如果是res目录下的文件,则需要用工具来读取并生成文本文件,android4me的AXMLPrinter2是个很好的选择。
下载地址:
使用方法:
java –jar AXMLPrinter2.jar& capture.xml & test.xml
执行后,将标准输出capture.xml到test.xml文件。
下面我们开始反编译代码部分。反编译代码需要两个工具:
dex2jar,用于将dex文件转换为jar文件; jd-gui,将jar文件反向工程为java代码。
dex2jar的地址:
下载后解压,dex2jar&的命令使用:
dex2jar.sh&&classes.dex
命令执行后,会在该文件夹下生成一个classes.dex.dex2jar.jar的文件。
jd-gui分windows,mac,linux三个版本。我们下载对应版本。
jd-gui的地址:
下载后解压,点执行文件。把刚才dex2jar生成的jar文件拖入jd_gui界面即可生成源代码。
附手机中安装过的程序导出方式:
 &将apk文件拷贝至sdcard上。命令顺序如下:
&&& * 进入Android sdk文件夹/tools目录下
& & * 输入adb shell
& & * 输入su
& & * 输入cd data
& & * 输入cd app
&&&& 这时就可以看到你安装的所有的apk文件。输入cp 空格 对应的apk 空格 /sdcard/
&&&& 这样就将apk文件拷贝出来了。
&&&& 将apk文件后缀直接变成rar格式,可以看到熟悉的目录结构了。
本文出自http://blog.csdn.net/take_all/article/details/7163656
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:37301次
排名:千里之外
转载:15篇
(4)(2)(10)(3)(3)2641人阅读
5 移动编程(1)
5.1 android(1)
实验环境:
windows + jdk1.6&
&需要的工具:
1).反编译包apktool.jar &/p/android-apktool/downloads/list
2).aapt.exe apktool.bat &/p/android-apktool/downloads/list
3).显示源代码工具( java)JD-GUI http://jd.benow.ca/
4).keytool 和 jarsigner
5).将classes.dex转成jar文件  dex2jar &/p/dex2jar/
一.看android的源代码
1)将Apkd.apk 用zip解压后,出现了一个classes.dex文件
&19:42 & &&DIR& & & & & &.
&19:42 & &&DIR& & & & & &..
&15:35 & & & & & & 1,656 AndroidManifest.xml
&15:35 & & & & & 687,024 classes.dex
&15:49 & &&DIR& & & & & &META-INF
&15:49 & &&DIR& & & & & &res
&15:35 & & & & & & 2,200 resources.arsc
2)进入到dex2jar目录中,运行情况如下:
D:\developer\tools\test_apk\dex2jar-0.0.9.15&dex2jar.bat &..\Apkd(d2j)\classes.d
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
在apk所在的目录会出现 classes_dex2jar.jar 文件。
3) 用JD-GUI对jar包进行查看,可以查看源文件
二.反编译apk
1.在  APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令.
&11:44 & & & & & 854,016 aapt.exe
&17:15 & & & & & 277,372 Apkd.apk //示例用 apk文件
&23:39 & & & & & & & &92 apktool.bat
&02:37 & & & & 2,655,843 apktool.jar
2.进入到apktool.bat所在的目录,运行:
apktool d Apkd.apk decode_dir
反编译后,decode_dir目录下的内容如下:
&17:16 & & & & & & & 716 AndroidManifest.xml
&17:16 & & & & & & & 237 apktool.yml
&17:18 & &&DIR& & & & & &build
&17:16 & &&DIR& & & & & &res
&17:16 & &&DIR& & & & & &smali
此时我可以查看原文件AndroidManifest.xml了,也是查看smali源文件(是用smali语言写的,可以对照java看)。
三.APKTOOL的使用
该命令用于进行反编译apk文件,一般用法为
apktool d &file.apk& &dir&
&file.apk&代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk
&dir&代表了反编译后的文件的存储位置,比如C:\MusicPlayer
如果你给定的&dir&已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令
apktool d –f &file.apk& &dir&
这样就会强行覆盖已经存在的文件
该命令用于编译修改好的文件,一般用法为
apktool b &dir&
这里的&dir&就是刚才你反编译时输入的&dir&(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。
3).install-framework
该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题
四.smali与java源码对照,并做出相应的修改
java源代码:
import android.os.B
import android.app.A
import android.view.M
import android.widget.*;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a = (TextView)this.findViewById(R.id.test) ;
a.setText(&raoliang&);
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
对应的smali源代码:
.class public Lali/text/apkd/MainA
.super Landroid/app/A
.source &MainActivity.java&
# direct methods
.method public constructor &init&()V
invoke-direct {p0}, Landroid/app/A-&&init&()V
return-void
.end method
# virtual methods
.method protected onCreate(Landroid/os/B)V
.parameter &savedInstanceState&
invoke-super {p0, p1}, Landroid/app/A-&onCreate(Landroid/os/B)V
const/high16 v1, 0x7f03
invoke-virtual {p0, v1}, Lali/text/apkd/MainA-&setContentView(I)V
const/high16 v1, 0x7f08
invoke-virtual {p0, v1}, Lali/text/apkd/MainA-&findViewById(I)Landroid/view/V
move-result-object v0
check-cast v0, Landroid/widget/TextV
.local v0, a:Landroid/widget/TextV
const-string v1, &raoliang&
invoke-virtual {v0, v1}, Landroid/widget/TextV-&setText(Ljava/lang/CharS)V
return-void
.end method
.method public onCreateOptionsMenu(Landroid/view/M)Z
.parameter &menu&
invoke-virtual {p0}, Lali/text/apkd/MainA-&getMenuInflater()Landroid/view/MenuI
move-result-object v0
const/high16 v1, 0x7f07
invoke-virtual {v0, v1, p1}, Landroid/view/MenuI-&inflate(ILandroid/view/M)V
const/4 v0, 0x1
.end method
通过对比可以看到,常量是没有必变的,可以根据的smali的语法,进行相应的修改
五.3、打包、签名和安装修改后的apk
修改完了,就可以打包回apk了。执行以下命令:
apktool b decode_dir
在mygame目录下的dist在会看到打包好的apk。
当然,现在一般是无法安装的,因为apk还没有签名。下面就来签名。签名需要keystore文件,我已经有专用的keystore了,如果还没有,请参阅这里进行生成。
执行以下命令为重新编译的my_game.apk签名:
jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
最后,在安装到手机前,需要把手机中的已有版本先卸载,因为如果签名不同,是不能覆盖安装的,会提示“应用程序未安装”错误。
完整的运行情况如下:
D:\developer\tools\test_apk\new\decode\dist&keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
& [Unknown]: &rao
您的组织单位名称是什么?
& [Unknown]: &rao
您的组织名称是什么?
& [Unknown]:
您所在的城市或区域名称是什么?
& [Unknown]:
您所在的州或省份名称是什么?
& [Unknown]:
该单位的两字母国家代码是什么
& [Unknown]:
CN=rao, OU=rao, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 正确吗?
& [否]: &y
输入&demo.keystore&的主密码
& & & & (如果和 keystore 密码相同,按回车):
D:\developer\tools\test_apk\new\decode\dist&jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
输入密钥库的口令短语:
& &正在添加: META-INF/MANIFEST.MF
& &正在添加: META-INF/DEMO_KEY.SF
& &正在添加: META-INF/DEMO_KEY.RSA
& 正在签名: res/drawable-hdpi/ic_launcher.png
& 正在签名: res/drawable-mdpi/ic_launcher.png
& 正在签名: res/drawable-xhdpi/ic_launcher.png
& 正在签名: res/drawable-xxhdpi/ic_launcher.png
& 正在签名: res/layout/activity_main.xml
& 正在签名: res/menu/main.xml
& 正在签名: AndroidManifest.xml
& 正在签名: classes.dex
& 正在签名: resources.arsc
D:\developer\tools\test_apk\new\decode\dist&
到此为止,修改后的apk可以正常的安装了,不过,在安装之前,必须要先卸载以前的apk,不能直接替换(因为签名不一样)
参考 /tools/publishing/app-signing.html
六.常见的问题
参考吧,貌似比较不错
七.参考文档
apktool反编译详细使用教程 
APKTOOL的使用心得 
Signing Your Applications 
Smali--Dalvik虚拟机指令语言--&【android_smali语法学习一】 
Android中的签名机制 
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:428450次
积分:4764
积分:4764
排名:第5831名
原创:104篇
转载:95篇
评论:68条
(3)(3)(2)(5)(7)(3)(7)(2)(3)(12)(13)(19)(12)(25)(26)(6)(5)(11)(4)(16)(3)(12)(1)(1)拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3e43dd-ua98).
重新安装浏览器,或使用别的浏览器等级:v1.41绿色中文版3.6M简体推荐理由:apktool是apk反编译工具能够反编译及回编译apk,同时安装反编译系统apk所需要的framework-res框架,清理上次反编译文件夹等功能版本:
等级:3.0绿色免费版23.7M简体推荐理由:​这款APK反编译工具(ApkToolkit)拥有编译、反编译、签名等功能,对于经常DIY安卓软件的朋友来说,是必不可少的工具。能够支持WIN7系统,但是这款安卓apk反编译工具暂不支持WIN8系统版本:
等级:v2.1.3免费版29.4M简体推荐理由:APK反编译工具集合,是快速汉化国外apk软件的专用工具,也能快速修改并编辑apk程序,安卓汉化开发者必备软件版本:
等级:1.0(附教程)3.3M简体推荐理由:DoAPK 是一款编译反编译APK程序的PC端小软件,1.0在之前的基础上做了点改进,编译后自动签名版本:
等级:v1.4.1 PC6专版3.6M简体推荐理由:本工具需要Java环境;编译APK前请重命名为123.apk;在编译系统APK前请先安装反编译所必须的框架文件framework-res.apk版本:
等级:2.2绿色版15.2M简体推荐理由:Android逆向助手是一款针对安卓平台的强大逆向辅助软件,功能涵盖apk反编译打包签名;dex/jar互转替换提取修复;so反编译;xml、txt加密;字符串编码等版本:
等级:v1.7.0 正式版14.3M简体推荐理由:本工具,直接在【鼠标右键】创建快捷菜单;非常方便汉化工作者对APK或Dex文件的编译操作;工具箱集合了当今最强悍,最犀利的APK及Dex文件编译工具版本:
等级:v3.0中文绿色版13.9M简体推荐理由:来自国外安卓论坛的反编译APK文件的工具,工具中集成了反编译,编译,签名等选项,对于DIY安卓软件者是必备的工具版本:
等级:1.0绿色版5.4M简体推荐理由:集成了adb (USB调试用的) 、aapt (USB安装应用、取设备列表、重启设备等等),可能需要其机器安装 java 和 Android SDK版本:
等级:绿色免费版(32&64位)5.6M简体推荐理由:Android反编译工具,使用时浏览到需要反编译的APK文件,直接点击“反编译”就行了,java语言完美恢复,xml文件代码重现版本:
等级:pc6-windows版1.6M简体推荐理由:PC6的APK反编译工具,在对apk文件反编译时, 只需将其重命名为zip包, 解压后双击里面的 calsses.dex文件(该文件图标是一个枫叶)即可得到反编译后的java源代码版本:
等级:1.20绿色免费版249KB简体推荐理由:智能反编译器能自动区分代码段和数据段,使反编译出的源程序几乎不做任何修改即可进行再编译,使您更快捷地分析程序, 及修改再编译等版本:
等级:v1.5.3.0官网版85.6M简体推荐理由:360加固助手是360加固保PC端产品。360加固保为移动应用提供专业安全的保护,可防止应用被逆向分析、反编译、二次打包,防止嵌入各类病毒、广告等恶意代码,从源头保护数据安全和开发者利益版本:
等级:v1.0.0.5官方版17.7M简体推荐理由:安卓修改大师可以让您轻松将任何APK安装包进行反编译,替换应用程序界面上的任何文字和图片,并且通过代码级别的修改,实现汉化、破解、功能增强,甚至可以在任何的界面添加自定义的代码和功能。版本:
等级:v5.1.0免费版21.6M简体推荐理由:AR Helper是一款安卓反编译和逆向辅助工具,能够对APK文件进行编码转换、动态调试、文件加密等,适合Android开发的朋友,有需要的赶快下载吧!版本:
等级:v3.0官方版2.3M简体推荐理由:apk helper是一款apk信息查看器。可以查看apk的全部信息,如:安装包名、软件名称、APK证书、真实版本号、要求的手机版本、系统权限、以及证书和文件的MD5信息,用来查看是不是官方apk包,避免安装非原版apk或流氓软件。版本:
等级:v1.25.3M英文推荐理由:gapktool是一个强大的APK反编译工具,集成 jd-gui、jad、apktool。使用该工具可以反编译apk文件,查看xml以及java源代码,默认用jad反编译,如果编译出来的java代码难以阅读,请选择使用jd-gui反编译。版本:
等级:v1.1绿色版17.1M简体推荐理由:暗巷APK反编译多功能工具箱是一个由C#和java编写的集成化的apk反编译工具,轻轻松松的实现apk、dex的反编译及回编译,支持查壳、支持签名和自定义签名、支持手动和自动对齐优化、支持dex转jar等版本:
等级:v1.0官方版8.3M简体推荐理由:360apk签名工具(qihoo360 apk signer)是奇虎360旗下的一款手机签名软件。配合360加固助手使用,可以有效防止apk应用被随意反编译。是移动开发者必备的一款软件版本:
等级:v1.0官方版24.7M简体推荐理由:APK反编译工具箱ApkTool Box,这款工具界面简单好用!配合工具包可以轻轻松松的实现apk、dex的反编译、回编译、集成jadx,非常强大的apk转java查看器版本:

我要回帖

更多关于 安卓反编译教程 的文章

 

随机推荐