文章前言:
对于反编译如果没有比较好的Android基础同时也没付诸实践和学习的话,实质上也不能从反编译的一堆代码文件中,得到有价值的信息。
例如代码都被Android打包成dex文件,通过这个文件复原出来问题不大,但大部分的情况是复原后的Java文件,基本上不能保证再编译通过,
但出于技术学习的目的,某些代码片段已包含足够的信息,。
反编译工具及使用方法:
第一种 :dex2jar和JD-GUI和AXMLPrinter2工具
步骤:
1.首先找到Android软件安装包中的classes.dex
把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述
提到的2个工具来逆方向导出java源文件
2.处理xml文件
这时就用到了一个android4me的AXMLPrinter2工具。我们先把文件解析出来,首先cmd进入命令界面,然后进入到该jar包的目录。此处
将解析的文件和工具放在同一个文件路径
输入的命令为:
java -jarAXMLpRinter2.jar AndroidManifest.xml(查看解析之后的xml文件)
java -jarAXMLPrinter2.jar AndroidManifest.xml > main.xml(将解析后的文件方法main.xml文件里)双击打开main.xml文件你就发现xml文件已经可以正常查看了
3.把classes.dex拷贝到dex2jar.bat所在目录。
在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar
4.运行JD-GUI工具(它是绿色无须安装的)
打开上面的jar文件,即可看到源代码 。实际上 这种只能看到代码而不能看到图片 并且内容相差太多 恢复不了原来的代码 思路还是有的
其它文件就看不到了
第二种 :apktool工具
apktool可以帮助我们把APK反编译,生成程序的源代码和图片、XML配置、语言资源等文件。我们对图片和语言资源等文件修改后,
可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK了。 下载apktool-1.0.0.tar.bz2和apktool-install-windows-
2.1_r01-1.zip两个包都要下。下载后解开,为了方便使用,按作者的推荐把得到的4个文件复制到C:\Windows文件夹里。 这个工具
是Java写的,需要你的电脑安装了JRE或者JDK,并在系统环境变量Path里加入java.exe所在路径。
以上准备工作做好后,就可以用它来反编译APK了。假设***.apk放在C盘根目录。输入cmd,回车。 apktool d "C:\***.apk" "C:\***"
复制代码 (命令行解释:apktool d 要反编译的文件输出文件夹) 这样,***.apk就被反编译了,输出内容在C:\L***文件夹里。 打开
C:\***文件夹,我们发现里面有一些XML文件和一些文件夹。绝大部分情况下,语言和图片资源都在res文件夹里。打开res文件夹,
可以其中又是很多文件夹,绝大部分情况下,语言资源都放在values*文件夹里。比如说values放默认语言(英语居多),values-de
放德语,values-fr放法语,values-zh-rCN(简体中文)和values-zh-rTW(繁体中文)。
Win+R 运行CMD
E:<回车>
E:\>apktool d ***.apk ***<回车>
I: Baksmaling…
I: Decoding resource table…
I: Decoding resources…
I: Copying assets and libs…
现在文件被decode到E:\***
修改好后CMD输入
E:\>apktool b ***
I: Checking whether sources has changed…
I: Smaling…
I: Checking whether resources has changed…
I: Building resources…
I: Building apk file…
用Auto-sign签名E:\***\dist\out.apk安装
第三种 :ApkIDE工具
1.启动程序:
双击ApkIDE.exe启动程序。如果是XP系统启动不了它,请安装.Net Framework 2.0: http://download.microsoft.com/download/5/6/7/567758a3-7
59e-473e-bf8f-52154438565a/dotnetfx.exe
2.配置JDK:
第一次启动时,软件会自动查找系统中的Jre安装目录,如果没有找到会提示你配置SDK,可以点击菜单[工具]-[配置SDK]对JDK进行配置。JDK的
安装路径必须配置(如果不配置,则无法进行修改操作),Android SDK则随意(有些功能需要用到它,比如ddms等,但这些功能都无关修改工作)。
提示:从apk改之理2.4开始必须使用jdk,不再支持jre(jdk是开发工具,jre只是一般普通用户运行java程序的工具)。
3.打开要修改的Apk文件:
单击菜单[项目]-[打开Apk]选择要修改的Apk文件(注:文件名称必须只有字母、数字、下划线、空格、点号等组成,不能包含中文或其它亚洲字符)。
4.新的修改还是继续旧的工作:
在打开Apk文件时Apk改之理会先对其进行基本的解析(包括它的名称、包、权限等),然后根据该apk应用的包名生成它的同名工作目录,如果这个
工作目录已经存在,Apk改之理会询问是否要重新反编译Apk。这里要注意,已有的工作目录通常是你以前修改这个Apk应用时所生成的工作目录,
如果你要继续这个修改操作,则单击[否]继续使用它,否则就重新反编译得到一个全新的源代码。
提示:如果你想继续旧工作但却误点了“是”按钮,也不用担心,删除的目录被扔进了系统垃圾箱,你可以直接去系统回收站恢复。恢复时注意,如果
你之前成功对这个应用进行过dex2jar操作(由软件在反编译apk时自动进行,但可能会因一些原因而失败),那么回收站中会看到二个同名的目录,
选中它们右键恢复即可。(注:这个特性Apk改之理2.1或更高版本中有效)
5.修改Apk
现在你可以使用软件的搜索、替换等功能来对源代码进行修改,这种修改包括汉化、去广告、改名、替换资源、图片、xx等等。下图中各个图标按钮
都有提示文字,可以将鼠标悬浮在按钮上显示文字提示。具体的各项说明会单独写个文章来详细解释。
提示:这里先提示一些没有说明的小功能:
(1)在文件树上,或搜索后得到的文件列表上,按住Shift键+单击鼠标右键会直接显示操作系统菜单。
(2)在“输入输出面板组”的搜索结果面板中,搜索结果列表以标签的形式各自分开,鼠标悬浮在标签上会显示对应搜索结果的搜索条件。
(3)工作目录下的第一个build目录下的文件不会被搜索(因为这个是Apktool编译时用到的,与我们的修改无直接关系)。
6.编译成Apk:
修改完成后单击菜单[编译]-[编译生成Apk]重新将源代码打包成apk文件,新生成的apk存放在原apk的同级目录下,其名称以“ApkIDE_”开头。
7.获取生成的Apk:
单击菜单 [编译]-[获取生成的APK] 可以直接在资源浏览器中定位到apk所在的目录。
8.直接测试Apk:
这个需要用到菜单[ADB]下的菜单命令,如果你已经将设备连接到电脑,或者直接在电脑上打开了安卓模拟器,可以单击菜单 [ADB]-[安装生成的APK]
直接向设备或模拟器安装修改生成的apk,然后再可以使用adb logcat 来观察其运行状况。如果发现ADB相关命令不启作用,你可以先用 adb devices
命令查看设备是否连接成功(可以直接在输入输出面板组的命令窗口输入“adb devices”),也可以使用菜单 [工具]-[Dalvik Debug MonitorService]
(ddms)来测试,当然这些都是后话了,也超出了本文的范畴。
第四种 :Smali2Java工具
第五种 :Androidfby工具
第六种 :UOT厨房
修改界面、美化图标最简单办法,UOT厨房使用教程【已增加窗口动画部分】
第七种 :APK打包解包工具(手机端工具)
(打包、解包、编辑、签名的集合)
打开界面以后。就可以选择路径进行解包了。解包完以后,会生成一个Apkpackge文件夹解包后的文件就在里面。(主要是解包以后替换里面的
资源。如png、)如果要用该工具进行修改APK内的文件(DEX),就选择APK打包。打包有2个选项,1个是打包。一个是编辑。最后一个就是
签名了。可以算是合集功能了。该软件不能编辑SO文件。
第八种 :Android萌化辅助工具
只是用批处理把几个功能整合了下~方便使用~工具需要JRE支持,嗯,可以直接按4打开官方下载页面~装过JDK的
可以不用了说解压后运行Run.bat即可。
APK打包工具及使用方法:
第一种: apk-sign签名apk文件:
1. 下载文件件附件apk-sign.rar,解压到apk-sign文件夹;
2.将XXX.apk文件解压到XXX文件夹,然后将XXX直接拖到apk-sign文件中的sign_pack.bat批处理文件上以执行,弹出cmd执行窗口,等待执行完即可;
3.生成新文件夹XXX_signed中的apk文件即为已签名;
第二种:keytool.exe和jarsigner.exe工具
利用标准的java工具keytool.exe(位于jdk\jre\bin目录下)创建key,利用jarsigner.exe工具使用生成的key来生成证书和给程序签名(位于jdk\bin目录下)。
Win +R 运行cmd,进入目录D:\temp(注:使用该目录为示例工作目录)
1.创建可以,运行如下命令:
keytool -genkey -alias demo.keystore -keyalg RSA -validity 20000-keystore demo.keystore
说明:(keytool工具是Java JDK自带的证书工具)
-genkey参数表示:要生成一个证书(版权、身份识别的安全证书)
-alias参数表示:证书有别名,-aliasdemo.keystore表示证书别名为:demo
-keyalg RSA表示加密类型,RSA表示需要加密,以防止别人盗取
-validity 20000表示有效时间20000天( K3
-keystore demo.keystore表示要生成的证书名称为demo
2.删除之前的签名文件
用解压缩工具解打开apk文件(如:更改a.apk 为a.zip,便可用压缩工具打开,并找到下面的目录META-INF下的 CERT.RSA和CERT.SF文件,并删除
该文件。删除后,再次更改后缀名为.apk ;
说明:META-INF目录:存放签名后的CERT和MANIFEST文件,用于识别软件的签名及版权。
Rres目录:存放各种Android原始资源,包括:动画anim、图片drawable、布局layout、menu菜单、xml等等
AndroidManifest.xml编码后的Android项目描述文件,包括了Android项目的名称、版本、权限、程序组件描述等等
aclasses.dex编译后Class被dx程序转换成Dalvik虚拟机的可执行字节码文件
qresources.arsc所有文本资源的编译产物,里面包含了各Location对应的字符串资源。
3.使用生成的key对apk签名,运行如下命令:
jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apkdemo.apk demo.keystore
说明:jarsigner是Java的签名工具
-verbose参数表示:显示出签名详细信息
-keystore表示:使用当前目录中的demo.keystore签名证书文件。
-signedjar demor_signed.apk demo.apk demo.keystore 正式签名,三个参数中依次为签名后产生的文件demo_signed,要签名的文件demo.apk和
密钥库demo.keystore.
(注:查看某个apk是否经过了签名方法,jarsigner –verify demo.apk。优化:签名后需要做对齐优化处理zipalign -v 4 your_project_name-unaligned.apkyour_project_name.apk )
将apk文件复制到signapk.jar的同文件夹里,执行java –jar signapk.jar platform.x509.pemplatform.pk8 test.apk test_new.apk
1. 利用图片的名称对apk破解后的资源文件进行整体搜索。利用Apktool可以得到一堆资源文件。然后Copy到Eclipse的某个工程中。进行搜索,最最有效率的
方式(还记得快捷键吧Ctr+H)。
2. 利用R.java文件中的id号,将得到的源文件进行搜索.这个时候,基本上所使用的元素的位置基本上清楚了。
3. 当无法定位Activity对应的Layout在哪里时,这个时候需要用到hierarchyViewer去查看布局。【Android布局学习工具. /android-sdk-windows/tools目录下的 hierarchyviewer.bat, 是一款研究别人布局的好工具.先打开这个工具,然后启动模拟器。发现惊喜.可以参考这篇文章获得更多的理解。《Android利用【Hierarchy
Viewer】工具学习别人的UI设计 》:http://www.cnblogs.com/TerryBlog/archive/2010/09/02/1816164.html结合上面的第二点。能很好的复原界面元素。然后
结合1和2的信息做交叉理解。(很有必要提及的问题,hierarchyViewer里面涉及的布局,并非跟Layout的xml完全一致, 在hierarchyViewer中,很容易看到GridView
中居然可以包含一个LinearLayout,这个实际上在XML中,是不允许这样描述的。一般Android是在源码中实现一个GridView包含一个LinearLayout的,这个时候,
不得不利用到上文1和2描述的方法交叉定位)。
另附各类安卓反编译软件下载地址如下:
http://blog.csdn.net/lqw_6/article/details/49364949