分享

Java 解压缩 APK 并重新局部替换文件后打包

 CevenCheng 2011-07-06
JAVA EYE  andriond 打包专题
http://www./wiki/topic/834829

纯入门贴,高手轻拍。

感谢martincz给的帮助。

milestone相关的sbf下载地址:
http:///motorola_milestone:sbf

sbf文件是什么就先不多介绍了,刷过的都知道。

下载下来的sbf文件,用一个叫SBF Recalc的软件可以打开sbf文件,并将其拆成若干个

用sbf recalc打开sbf文件之后,点split flash file,就会在sbf的同目录生成一些 smg 文件。

部分smg文件就是yaffs2格式的映像,使用unyaffs工具可以解出来。

sbf recalc下载地址:


unyaffs的下载地址:
http://code.google.com/p/unyaffs/
下载下来之后是c的源码,安装cygwin之后,用gcc unyaffs.c即可编译出一个a.exe来。用a.exe可以解开部分smg文件

==================================================================================
进一步介绍apk文件如何拆解吧
参考资料:http://jlins./blog/561298

apk文件本质上是zip文件,先用zip解压。

解压之后的xml文件是二进制的,如果电脑上装了java,可以用下面命令转换:

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

AXMLPrinter2工具下载地址:http://code.google.com/p/android4me/downloads/list

==================================================================================



===========================Android apk文件拆解与重新打包===============================


apk文件本质上是zip文件,先用zip解压。

解压之后的xml文件是二进制的,如果电脑上装了java,可以用下面命令转换:

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

AXMLPrinter2工具下载地址:http://code.google.com/p/android4me/downloads/list 

参考资料:http://www./viewthread.php?tid=3588&extra=page%3D1

APK 拆解用APKTOOL  
拆解後可以打包
http://code.google.com/p/android-apktool/ 

http:///2010/04/apktool-decode/


=============================apk的文件结  ==================================

http://www./topic/391448

apk实际是就是一个rar/zip,重命名rar后可以用winrar直接打开

apk文件一般包括如下内容:

META-INF -----没有签名的apk没有这个目录,该目录下包括签名信息
res -----资源文件目录,和工程中的一样
AndroidManifest.xml -----主描述文件,和工程中的一样
classes.dex -----所有的java类编译后的文件,是Dalvik VM需要的字节码
resources.arsc -----res目录的结构,重新组织过的二进制文件,格式未知

其中dex的格式参见:http://www./android/dexformat.html 
把这个搞清楚了,就可以反编译dex文件了:)

==================================================================================


============================  APK 文件反编译 ===========================================

http://seya./blog/867699

一、用.rar打开apk文档                       
二、将classes.dex文件解压出来,然后使用工具反编译成.jar文件,再进一步反编译出java文件 

1.在cmd下进入dex2jar.bat所在路径,然后输入“dex2jar.bat XXX”,XXX指的是你要反编译的apk中的classes.dex文件所在路径及名称,比如:我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路径下, classes.dex在D:\Android下,所以: 你进入dex2jar.bat路径下后,输入dex2jar.bat D:\Android\classes.dex,这样会生成一个jar文件。 

2.用rar解压出jar文件中的class文件,然后用jad或DJ Java Decompiler反编译工具将.class文件反编译成.java文件 

3.不解压出jar中的class文件,直接用JD GUI工具打开jar文件 

4.步骤2和3选择其中一个即可,建议用步骤2,步骤3可能出现乱码 

三、上面操作只能得到class文件,下面利用Google提供的apktool得到xml文件 

1. 下载apktool,可以去Google的官方下载,地址:http://code.google.com/p/android-apktool/得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。解压apktool.jar到 C:\Windows ,解压apktool-install-windows.zip到任意文件夹(例如E盘根目录)。 

2. Win+R 运行CMD,用cd命令转到apktool-install-windows所在文件夹,输入apktool看看。会列出一些帮助的话就成功了(解释d为加压 第一个路径为你的apk所在的位置。第二个是要输出的位置) 

apktool d XXX.apk ABC    反编译XXX.apk到文件夹ABC 

3. 在解压后的文件夹中可以得到apk的xml配置文件 

四、将“二”中得到的class文件和“三”中得到的xml文件组合成一个android工程,即可得到完整的apk源码。 




===========================    APK 文件反编译问题总结 ==================================

http://zkh43javaeye./blog/948597

 http://www./thread-30768-1-1.html

 

今天反编译一个apk,遇到了很多问题,查了好几个文档,现在把前人的一些经验和自己碰到的问题记录下来,作一个总结,与大家分享,希望对大家有帮助

一、找到apk中的class.dex:
把apk文件改名为.zip,然后解压缩其中的class.dex文件,它就是java文件编译再通过dx工具打包成的。

二、得到java源文件

工具准备:
1、把dex文件反编译为jar文件的工具。(dex2jar)
http://code.google.com/p/dex2jar/downloads/list 

2、把jar反编译为java的工具。(JD-GUI)
http://java.decompiler./?q=jdgui

反编译步骤:
1、把class.dex拷贝到dex2jar.bat所在目录,直接拖动class.dex到dex2jar.bat,生成classes.dex.dex2jar.jar。
   或者:1.在cmd下进入dex2jar.bat所在路径,然后输入“dex2jar.bat XXX”,XXX指的是你要反编译的apk中的classes.dex文件所在路径及名称,比如:我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路径下, classes.dex在D:\Android下,所以: 你进入dex2jar.bat路径下后,输入dex2jar.bat D:\Android\classes.dex,这样会生成一个jar文件。

2.用rar解压出jar文件中的class文件,然后用jad或DJ Java Decompiler反编译工具将.class文件反编译成.java文件

3、运行JD-GUI工具(它是绿色无须安装的),打开上面的jar文件,在File下有个Save JAR Source,它可以生成src源代码。

三、上面操作只能得到class文件,下面利用Google提供的apktool得到xml文件

1. 下载apktool,可以去Google的官方下载,地址:http://code.google.com/p/android-apktool/得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。解压apktool-1.0.0.tar.bz2得到apktool.jar放到 C:\Windows ,解压apktool-install-windows.zip到任意文件夹(例如E盘根目录)。(我是两个包解压后都放在C:\Windows下)

2. Win+R 运行CMD,用cd命令转到apktool-install-windows所在文件夹,输入apktool看看。会列出一些帮助的话就成功了(解释d为加压 第一个路径为你的apk所在的位置。第二个是要输出的位置)
   在这一步中我碰到这样一个问题:
   Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version n
umber in .class file
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

版本问题,装了个jre6,在360中的软件管家可以找到的,记得装完后配置path路径,果然,ok。
继续:

apktool d e:\a.apk(apk路径)ABC(文件夹名称)

这时当前目录下生成 ABC文件夹,里面就是我们想要的东东了

四、将“二”中得到的java文件和“三”中得到的xml文件组合成一个android工程,即可得到完整的apk源码。

但是好像项目中用到的包没用弄进来,很是郁闷,希望哪位大侠弄懂之后教我,谢谢



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多