前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

Android Rom 制作教程 之 APK反编译回编译 | 荷叶荷花香 搜索 首页 文章目录 音乐赏析 技术文章 心情驿站 手机教程 快递查询 代码测试 高清电影 网络电视 在线电台 荷花飘香 绿色软件 关于本站 留言板 Android Rom 制作教程 之 APK反编译回编译 作者:荷叶荷花香 发布:2013-09-28 08:00 分类:文章目录 踩踏:2,008次 1条吐槽 相信每位玩机的人对APK文件都不陌生。你可能每天都与APK文件打交道, 无论是安装和卸载有用的应用工具、插件、好玩的游戏等等。 你可曾知道这些每天都伴随着你的APK文件是什么吗?怎样对它们作些修改呢? 比如说:对英文版进行汉化、修改功能、修改文字描述、去掉广告等等。 本文介绍APK的基本知识、结构、APK文件的解包、打包及签名,以及对APK文件的常规修改。 一. APK文件简介 APK是Android Package的缩写,即Android application package文件或Android安装包。 每个要安装到Android平台的应用都要被编译打包为一个单独的文件,扩展名为 .apk。 APK文件是用专业软件eclipse编译生成的文件包,其中包含了应用的二进制代码、资源、配置文件等。 通过将APK文件直接传到Android手机中执行即可安装。APK文件其实就是zip格式,但其扩展名被改为apk, 在Windows下用解压软件WinRAR/WinZIP/7-Zip可以直接打开。解压后,你会看到有几个文件和文件夹。 一个典型的APK文件通常有下列内容组成: AndroidManifest.xml 程序全局配置文件 classes.dex ?Dalvik 字节码 resources.arsc 编译后的二进制资源文件 META-INF\ 该目录下存放的是签名信息 res\ 该目录存放资源文件 assets\ 该目录可以存放一些配置文件 下面对这些文件和目录做些基本的注释和介绍: ? AndroidManifest.xml 该文件是每个apk应用程序都必须包含的文件,它描述了应用程序的名字、版本、权限、引用的库文件等等信息。 ? classes.dex文件 classes.dex是java源码编译后生成的java字节码文件。dex是Dalvik VM executes的全称,即Android Dalvik执行程序。利用解析工具可以将其转换成java来加以阅读和理解。 ? resources.arsc 编译后的二进制资源文件。在做主题美化时要常与这个文件打交道。 ? META-INF目录 META-INF目录下存放的是签名信息,有三个签名文件,用来保证apk包的完整性和系统的安全。 在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。 ? res目录 res目录存放资源文件。包括图片,字符串等等。res下有若干个子目录,主要为drawable,layout,xml。 解包后,几乎所有可能的修改和编辑工作基本都在这里。汉化ROM的主要工作就在这里。汉化ROM实际上就是汉化所有的apk应用程序的字符文件。 ? assets目录 assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。 下面以“设置”应用程序Settings.apk为例。用WinRAR打开文件后,看到以上介绍的六项内容。现在,即使你已经对文件解压,你还是无法直接阅读每个文件的内容。为了读出这些文件的内容,从而进行进一步的修改和编辑,你就必须具有相应的工具了。 二. APK应用程序的反编译和回编译 这一节主要介绍在Windows系统中常用的几个工具包,用来对apk应用程序进行解包、打包、反编译、解析。所有apk工具包都要求java环境。主要推荐有二个工具。 1. apktool apktool可能是当今最为流行的apk工具包,由解包、打包、签名程序组成。被称之为“apk反编译利器”。 网盘下载 官方下载 打开apktool工具包,看到如下内容: Akp程序的解包和打包软件由2个程序来完成:apktool.jar 和 aapt.exe。 另外提供一个批处理文件:apktool.bat,其内容为: java -jar &#8220;%~dp0\apktool.jar&#8221; %1 %2 %3 %4 %5 %6 %7 %8 %9 运行apktools.jar需要java环境(1.6.0版本以上)。 apktool.jar用于解包,apktool.jar和aapt.exe联合用于打包。 反编译命令: apktool d xxx.apk ABC 这里“d”表示要解码。xxx.apk是要解包的APK文件。ABC是子目录名。解包的文件会放在这个子目录内。 回编译命令: apktool b ABC xxx.apk 这里“b”表示要打包,ABC是子目录名,是解包时产生的子目录,用来存放所有解包后的和修改后的文件。xxx.apk是打包后产生的新的APK文件。 这样就简单的对apk进行了解包和打包! 注意:文件名里不允许有空格,不能有中文。 如果你是修改系统文件不是其他安装文件的话! 需要配置框架环境从ROM中把框架文件(framework-res.apk)提取出来 使用前,要先安装框架文件:apktool if framework-res.apk 如果是三星系统,还要安装:apktool if twframework-res.apk 许多人拿来apktool工具包用,说解不开包,运行出错。原因是没有配置框架环境。 2.APK+Dex编辑工具 主程序下载 补丁下载 1. 此工具使用非常便捷,在你想要反编译的apk上右键,在菜单里选择反编译即可在同个文件夹中出现相应的文件。 2. 如果你发现无法反编译,请检查你的环境配置,你是否已经成功安装java,成功配置了环境。 3. 如果你确定你的JAVA环境搭建无误,请检查是否已经将Framwork.apk设为框架。(注:同一个rom的Framwork.apk) 4. 如果框架设好了,还是无法成功进行反编译,那么我认为你想反编译的那个apk应该是被进行过二次,甚至多次修改,无法再次进行反编译了。 注意:如果电脑有安装 豌豆夹等手机应用辅助软件,请卸载之后再安装以上提供的反编译,回编译工具。 三、实例讲解APK文件的处理 在这一部分,我们要进入实战。首先,利用一个具体的例子来阐述apk工具包的使用,对apk文件进行解包、汉化、打包和签名。 然后,我们来对付三星闭源系统的apk程序,达到我们修改、汉化和美化的目的。 我们假定所有apk文件都是单个独立文件,不含odex文件(在官版ROM中,通常每个apk都分成两部分,第一部分是apk,第二部分是odex。将它们合并是另一个题目,这里不作叙述)。 1. 配置框架(Framework)环境 在处理APK文件时,apktool需要框架文件(framework-res.apk)来解码和打包。 apktool已经包含了标准的框架,所以在大多数APK文件的解包时,不需要另外提供框架文件。 但是,某些制造商(例如三星)使用了他们自己的框架文件,为了解包,就不得不从手机中或从ROM中把框架文件(framework-res.apk)提取出来,然后安装到计算机。 安装命令是: apktool if framework-res.apk 安装后就会得到:~\apktool\framework\1.apk 注意:三星系统有两个框架文件:framework-res.apk和twframework-res.apk。 在使用apktool之前,要安装这两个框架文件。 安装方法同上: apktool if framework-res.apk apktool if twframework-res.apk 安装后就会得到:~\apktool\framework\1.apk和~\apktool\framework\2.apk。 许多人拿来apktool工具包用,说解不开包,运行出错。原因是没有配置框架环境。 2. akp文件的汉化和修改 我首先来讲对一般的apk应用程序进行解包、汉化和打包。 我们用apktool工具来做。以汉化R.E.管理器为例! 汉化步骤如下: 1)首先,我们要反编译,保证文件名不是中文,必须英文或数字! 把apktool文件夹放入C盘根目录,打开CMD,锁定到apktool文件夹 命令:CD C:/apktool 反编译:apktool d rootexplorer.apk ABC 这是会在apktool文件夹下面看见刚刚反编译的文件夹 在ABC文件夹之下有三个文件夹/assets /res和/smali,还有两个文件AndroidManifest.xml和apktool.yml。用文本编辑器打开AndroidManifest.xml看看,是不是在第一部分里介绍的内容。你要修改的内容在/res文件夹内。 打开/res文件夹,看到里面有5个子夹,/drawable存放apk应用的图标(Icon),drawable-hdpi存放其它要用的图形文件,/layout是apk的布局文件,/values里是字符文件。汉化apk就是汉化/alues文件夹内string.xml文件的内容。 2) 字符汉化 这里只适用于懂英语的同学。如果你不懂英语,就照表抄课好了。 用文本编辑器打开string.xml,其内容为: <?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?> <resources> <string name=&#8221;app_name&#8221;>Silent Boot</string> <string name=&#8221;labelEnabled&#8221;>Enable Silent Boot</string> <string name=&#8221;textEnabled&#8221;>Device is muted on shutdown.</string> <string name=&#8221;textDisabled&#8221;>Device is NOT muted on shutdown.\nBoot sound is played if the device is shut down with sounds enabled.</string> </resources> 要汉译的字符是:Silent Boot,Enable Silent Boot,Device is muted on shutdown,Device is NOT muted on shutdown.\nBoot sound is played if the device is shut down with sounds enabled。 先别急,我现在来教你怎样处理文件。 有两种汉化方法: a) 正规汉化 b) 强制汉化。 a) 正规汉化 一个apk应用在汉化后应该能在英文和中文系统下都能使用。/values目录下的是英文语言包。 为了建一个中文语言包,与/values并行创建一个子文件夹:/values-zh-rCN(必须用这个文件名!)。 这里values-zh是中国地区语言包(包含港澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。 把/values文件夹里的strings.xml等语言文件复制进/values-zh-rCN。在我们的例子中,只有strings.xml一个文件。 进入/values-zh-rCN,用文本编辑器打开strings.xml,然后你就翻译吧,把英文描述译成相应的中文。 例如,我们可以把上面的string.xml文件译成: <?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?> <resources> <string name=&#8221;app_name&#8221;>静音启动</string> <string name=&#8221;labelEnabled&#8221;>开启静音启动</string> <string name=&#8221;textEnabled&#8221;>关机也是静音</string> <string name=&#8221;textDisabled&#8221;>关机不是静音\n如果没有开启静音启动,关机时播放开机音乐。</string> </resources> 里面有个操作符“\n”是换行符,迫使换行显示文本内容。 之后存盘,用“另存为”(Save As)存成UTF-8格式。这是保持中文文本的格式。 在作汉化工作时,要对string.xml文件进行修改。 有时也需要修改其它xml文件,一个一个地认真查看,一个一个地汉化。 b) 强制汉化 所谓“强制汉化”就是不产生/values-zh-rCN文件夹。而是在/values文件夹内把需要汉化的文件都直接译成中文。 显然,如果在英文操作系统中没有中文字库的话,强制汉化的apk在英文系统中可能显示乱码。 所以,建议养成良好习惯,采用“正规汉化”。 高级内容: 以上的汉化是修改string.xml,把英文译成相应的中文就好了,然后打包和签名。 但是,在有些apk文件里,所显示的字符文字并不都在xml文件里。 apk原作者把某些字符写在代码中。反编译后,存放在/smali文件夹里。 一层一层地找下去,最后你会看到一大堆Dalvik码文件,都是以.smali为文件扩展名。 举一个例子,用文本编辑器打开某个.smali文件,看到: const-string v5, &#8220;ServiceMode&#8221; “ServiceMode”会在apk执行时显示为英文。因此,需要汉化。 在I897 ROM里,用工程模式特殊代码看到的多半属于这一类。汉译起来非常花时间。 我们要把ServiceMode译成“服务模式”。怎么处理呢? 你不能把const-string v5, &#8220;ServiceMode&#8221;直接改成const-string v5, &#8220;服务模式&#8221;。 打包会失败的。正确的做法是把相应的中文字符用16进制的unicode来表示。 例如:把“服务模式”用16进制的unicode表示就是\u670d\u52a1\u6a21\u5f0f 。每一个汉字用4个字符表示,\u表示为16进制的unicode码。 好了,正确的汉译是: const-string v5, &#8220;\u670d\u52a1\u6a21\u5f0f &#8220; 网上有中文字符与16进制unicode码的对照表或转换工具。 3.回编译和签名 修改之后,确保没有任何错误。 继续在CMD里面输入:apktool b ABC 123.apk ok,这就反编译成功了,很简单吧! 为了在手机上运行apk应用程序,签名是必需的。那怎样对apk应用程序进行签名处理呢? 一个有效的方法就是借用原来解包前apk文件已经有的签名,把原来的签名与新的编辑内容进行合成。 从而,达到我们解包、修改、汉化、打包和“签名”的目的,使新的apk程序可以在机子上运行。 合成操作步骤: 1.我们用winrar直接打开原始文件和刚刚编译完成的文件 2.比较我们发现原始多了META-INF目录,这就是放签名的! 难得我们把这个文件夹放到新的apk里面?哦,NO,不是这样的! 3.从123.apk中提取我们编辑过的东西。 用鼠标把resources.arsc文件从123文件窗口拖进rootexplorer.apk的窗口,去覆盖原来的resources.arsc文件。 你也可以先把原来的resources.arsc删除,然后再做拖入的动作。 4.出现一个参数窗口。在压缩方式处选择“Store”(存储)。然后按“OK”。 5.退出WinRAR。结束。新的apk应用程序就制作好了,签名是利用了原始的签名。文件还是rootexlorer.apk。 说明: 1)如果修改了/res目录下的内容,在第3步,就复制resources.ars。如果修改了/smali目录下的内容,在第3步,就复制classes.dex。 2)只可以替换这两个文件,别的都不要动。 3)在第4步的压缩方式,一定要选“存储”。 反编译修改APK就这么简单!使用工具回更加方便一步到位! 四、APK文件反编译的各种应用 在第一和第二部分中,我们花了大量的篇幅来介绍apk文件的结构,apk文件的解包、修改、编辑、打包,以及所需要的工具。内容很多,篇幅又长。 为什么要对apk文件进行解包?当然要对其内容进行必要的修改。修改什么呢?我们对apk进行了汉化。其实汉化只是一个应用而已。 下面,根据我的经验和知识来介绍一下apk文件解包和打包的各种应用。一般来说,就是为了修改和美化。更进一步,就是为了定制ROM。 为完整起见,先简要地介绍一下对apk文件的非解包修改问题。也就说,在不使用第一部分的apk解包打包工具的情况下,我们能对apk文件的哪些内容做些修改? 用WinRAR打开一个apk文件,你会看到有一个文件夹/res,进去后,你有会看到有一个子文件夹/drawable或多个文件夹。 如果有多个子文件夹,之中会有一个/drawable-hdpi。挨个都打开看看。这些子文件夹都是放一些图片和xml文件的。 你可以对所有的图片进行删除、替换、添加。如果替换,切记文件名要一致。 一个大家都熟悉的例子是替换/修改电池显示图标。 但是,你无法对xml进行修改。如果要对文字和其它非图像类内容进行修改,那只能通过解包解码了。 好了。现在我们回到这一部分的主题,来介绍apk文件解包和打包的各种应用。 下面几项任务需要对apk文件进行解包和打包。 1. 修改图标标签 每一个apk文件都有一个“图标标签”。将apk程序安装进手机后,在图标下面显示图标标签文字。 这个图标标签的内容是可以修改的。 在\res\values下找到strings.xml,修改其中的一行: <string name=&#8221;app_name&#8221;>图标标签</string> 例如:<string name=&#8221;app_name&#8221;>静音启动</string> 同理,如果是窗口小插件,要修改widget_name。 2. 去掉APK中的广告 有很多apk应用都带有广告。为了去掉程序中的广告,要修改main.xml文件与广告有关的内容。 在/res目录下找到文件main.xml。通常在/layout目录下,有时也被放在其它目录下。 甚至,有时不存在main.xml文件,广告行被放在其它xml文件内。 只能细心逐个文件进行查找。无论哪一种情况,查看其内容,你会看到有一项类似的命令如下。 这就是广告显示: <com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”fill_parent” android:layout_height=”wrap_content” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” /> 将其改为: <com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”0.0dip” android:layout_height=”0.0dip” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” /> 可以看到,关键是要把fill_parent改为0.0dip,把wrap_content改为0.0dip,其它内容保持不变即可。 这种改法就是不给广告显示空间,当然你就看不到广告了。 4. 修改电池显示精度 在官方ROM里,默认的电池显示精度是10%。我们希望把显示精度增加到1%。这个需要通过修改主题文件framework-res.apk来实现。 你们今天ROM里每变化1%电量就显示一次的主题,就是这样做出来的。 修改步骤如下: (1) 对framework-res.apk进行解包 (2) 修改和增加电池状态图标(可以从其它ROM中提取) (3) 修改文件stat_sys_battery.xml (每隔1%显示一次) (4) 修改文件stat_sys_battery_charge.xml(对应新的充电动画) (5) 打包 (6) 提取stat_sys_battery.xml,stat_sys_battery_charge.xml,resources.arsc和一个图标目录:drawable-mdpi (7) 重新装配framework-res.apk 5. 状态栏信息通知文字颜色修改 状态栏信息通知文字颜色,是由framework-res.apk文件里res\values下的colors.xml文件控制的,所以我们只需修改colors.xml文件就可以了。另外,此文件还控制下拉栏的文字颜色,可以修改。 用文本编辑器打开colors.xml文件,找到 <color name=&#8221;hw_statusbar_time&#8221;>#ff000000</color> 将这句修改为:<color name=&#8221;hw_statusbar_time&#8221;>#ffffffff</color> 这状态栏信息通知文字颜色由黑色改为白色。 6. 其它应用 还有许多应用都与美化修改主题有关,像修改状态栏“时间”的显示颜色,步骤繁多,这里就不介绍了。可能的话,以后再找时间介绍。 本文固定链接: http://ww.hehua.us/android-apk.html | 荷叶荷花香 作者:荷叶荷花香 | 发布:2013年09月28日 | 分类:文章目录 | 标签:Android原创文章转载请注明:Android Rom 制作教程 之 APK反编译回编译 | 荷叶荷花香 上一篇:Android Rom 制作教程 之 JAVA环境搭建 下一篇:高端大气上档次,低调奢华有内涵 Android Rom 制作教程 之... 高端大气上档次,低调奢华有... KMSpico 4.5 – Win8/... 检测Windows 8和Microso... WIN7 XP 史上最全的... sbb115 on 2013 年 3 月 10 日 at 下午 4:20 said: 网站公告 欢迎光临荷叶荷花香的个人站点! 用户登录 用户名: 密 码: 记住我 最新日志热评日志随机日志 高端大气上档次,低调奢华有内涵 Android Rom 制作教程 之 APK反编... Android Rom 制作教程 之 JAVA环... 恋空 | 1200万人感动飙泪!日本最IN手... 西西里的美丽传说/真爱伴我行/玛莲娜 [... 致我们终将逝去的青春| 赵薇导演处女作 木耳诗 祭奠祈福,让网站变成黑白色调! 祈福雅安,雅安加油! Ubuntu LiveCD 修复 grub2 双系统引... 关于奥运 关于wordpress博客统计代码 青春的颜色 木耳诗 Avast! 免费版注册码 第一篇站点日志 西西里的美丽传说/真爱伴我行/玛莲娜 [... Android Rom 制作教程 之 JAVA环... KMSpico 4.5 – Win8/Office2013 ... 关于 Win8 RTM 正式版的激活方法 标签云集 CMCT blog HDTV Android avast win8 ubuntu Lenovo music Excel java essay CNHD wordpress SkyDrive html Windows 留言光荣榜 Revolver Maps 最新评论 余留香: 便携软件 麻烦您多测试再 发布. 梦幻人生: 全身都是缺点,孤僻,忧伤,烦躁, sbb115: 祝福一下 五一快乐 希望可以天天 sbb115: 好惬意的生活啊!羡慕 什么也不念: 沙发,不错的网站,多多交流 sbb115: 谢谢楼主的好东东啊!愿楼主天天开 jim: 哈哈,非常好,可惜我早已激活了 戴妃+: 照着上面弄好了后window+r 博客统计 日志总数:36 篇 评论总数:9 篇 标签数量:24 个 链接总数:3 个 建站日期:2012-08-08 运行天数:549 天 最后更新:2013-9-29 ? Copyright &copy; 2012-2013 荷叶荷花香 & RayCMS | QQ | E-mail | 谷歌地图 | 网站地图