android生成的apk文件反编译源代码然后修改

第一种

反编译Apk得到Java源代码

http://forum.lupaworld.com/thread-60551-1-1.html

工具下载:需用到dex2jar和JD-GUI这2个工具

dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

JD-GUI下载地址:

windows版JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz

步骤:

1.首先找到Android软件安装包中的classes.dex

把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件

2.把classes.dex拷贝到dex2jar.bat所在目录。

在命令行模式下定位到dex2jar.bat所在目录,运行dex2jar.batclasses.dex,生成classes.dex.dex2jar.jar

3.运行JD-GUI工具(它是绿色无须安装的)

打开上面的jar文件,即可看到源代码

实际上这种只能看到代码而不能看到图片并且内容相差太多恢复不了原来的代码思路还是有的其它文件就看不到了

第二种

老外写的《android-apktool》软件,可以帮助我们把APK反编译,生成程序的源代码和图片、XML配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK了。

《android-apktool》软件软件可以访问它的主页http://code.google.com/p/android-apktool/下载获得,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来做示范。

用过动态壁纸,你也许会发现在设置壁纸时,界面的显示有点问题:“动态壁纸”,在手机上中文显示为“当前壁纸”。这是“动态壁纸选择器”LiveWallpapersPicker.apk的翻译错误造成的。

(假设LiveWallpapersPicker.apk放在C盘根目录)

开始>运行,输入cmd,回车。

apktoold"C:\LiveWallpapersPicker.apk""C:\LiveWallpapersPicker"

复制代码

(命令行解释:apktoold要反编译的文件输出文件夹)

这样,LiveWallpapersPicker.apk就被反编译了,输出内容在C:\LiveWallpapersPicker文件夹里。

打开C:\LiveWallpapersPicker文件夹,我们发现里面有一些XML文件和一些文件夹。绝大部分情况下,语言和图片资源都在res文件夹里,我们这个例子当然不例外。

打开res文件夹,可以其中又是很多文件夹。(又是)绝大部分情况下,语言资源都放在values*文件夹里。比如说values放默认语言(英语居多),values-de放德语,values-fr放法语等等。一般我们关心的是values-zh-rCN(简体中文)和values-zh-rTW(繁体中文)。

打开values-zh-rCN文件夹,其中有个strings.xml。打开看看:

<?xmlversion="1.0"encoding="UTF-8"?>

<resources>

<stringname="application_name">动态壁纸选择器</string>

<stringname="live_wallpaper_picker_title">当前壁纸</string>

<stringname="live_wallpaper_preview_title">当前壁纸预览</string>

<stringname="configure_wallpaper">设置...</string>

<stringname="wallpaper_instructions">设置壁纸</string>

<stringname="live_wallpaper_empty">无当前壁纸。</string>

<stringname="set_live_wallpaper">设置壁纸</string>

<stringname="wallpaper_title_and_author">%1$s提供者:%2$s</string>

<stringname="live_wallpaper_loading">正在载入当前壁纸…</string>

</resources>

很好,就是它了。把“当前壁纸”都改为“动态壁纸”,再检查和修正标点——中文内容用中文标点(强烈呼吁大家注意标点问题,目前马大哈太多了)后,保存。

本例改这么多就够了。其它复杂的APK建议把res文件夹里的内容都检查下,至少你关心的语言文件夹里的内容都检查下。

改完后,就可以重打包了。还是在cmd命令行里,输入:

apktoolb"C:\LiveWallpapersPicker"

复制代码

(命令行解释:apktoolb要打包内容所在文件夹)

就可以了。生成的APK在C:\LiveWallpapersPicker\dist文件夹里,叫out.apk。

这个out.apk是没有签名的,所以不能直接装到手机里。签名工具和方法见http://www.hiapk.com/bbs/thread-21261-1-1.html,这里不说了。

签名后得到的APK,就是可以装到手机里的了。

这是一位朋友写的我拿来试了下感觉对不上号所有的图片可以获得到但是代码却一点也看不到都是些smali的文件,这还要编译出来的也是很多不规范的根本不能改代码

最多是把广告给删了然后再装回去就是因为有图片可以改直接把图片替换掉就可以了

最终还没有解决怎么把一个完整的项目反编译出来最后直接导到工程里的期待高手解答

相关推荐