zoukankan      html  css  js  c++  java
  • apk反编译获取完整源码 及 apk反编译后的处理

    一、工具准备:apktool , dex2jar , jd-gui

    二、使用dex2jar + jd-gui 得到apk的java源码
    1.用解压工具从 apk包中取出 classes.dex 文件
    用命令(dex2jar.bat classes.dex)得到一个 jar文件
    2.用jd-gui反编译工具将得到.jar文件反编译成.java文件

    三、使用apktool得到apk的xml文件
    1.用命令(apktool d xxx.apk xxx_xml)反编译xxx.apk包
    2.从 xxx_xml 文件夹得到xml文件

    四、第二步 得到的程序源代码 和 第三步 得到的xml文件组合下,即可得到完整的apk源码。

    五、应用: 汉化/去广告,加 values-zh-rCN, values-zh-rTW, values-de, values-fr

    1.在步骤三的文件夹xxx_xml/res/ 下, 建文件夹: values-zh-rCN,values-zh-rTW

    2.1复制values\strings.xml 到   values-zh-rCN 并翻译.

    2.2 去广告见;

    3.重建APK,用命令(apktool b xxx) ,输出到ABC/dist/out.apk

       或命令( apktool b xxx out.apk)

    六、重新打包 和 签名

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


    1) 汉化apk应用程序

           汉化apk就是 把 反编译之后apk 下的res/values文件夹内string.xml文件的内容 汉化(注意:我们的例子里 只有一个string.xml,有时候 可能 不止 一个 *xml 文件,那么 我们 需要把 相应的 位置 都汉化)。

            一个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,把英文译成相应的中文就好了,然后打包和签名。但是,在有些apk文件里,所显示的字符文字并不都在xml文件里。apk原作者把某些字符写在代码中。反编译后,存放在/smali文件夹里。一层一层地找下去,最后你会看到一大堆Dalvik码文件,都是以.smali为文件扩展名。举一个例子,用文本编辑器打开某个.smali文件,看到:
    const-string v5, "ServiceMode"
    “ServiceMode”会在apk执行时显示为英文。因此,需要汉化。在I897 ROM里,用工程模式特殊代码看到的多半属于这一类。汉译起来非常花时间。我们要把ServiceMode译成“服务模式”。怎么处理呢?你不能把const-string v5, "ServiceMode"直接改成const-string v5, "服务模式"。打包会失败的。正确的做法是把相应的中文字符用16进制的unicode来表示。例如:把“服务模式”用16进制的unicode表示就是\u670d\u52a1\u6a21\u5f0f 。每一个汉字用4个字符表示,\u表示为16进制的unicode码。好了,正确的汉译是:
    const-string v5, "\u670d\u52a1\u6a21\u5f0f "
    网上有中文字符与16进制unicode码的对照表或转换工具。


    2) 修改图标标签

    每一个apk文件都有一个“图标标签”。将apk程序安装进手机后,在图标下面显示图标标签文字。这个图标标签的内容是可以修改的。\res\values下找到strings.xml,修改其中的一行:
    <string name="app_name">图标标签</string>
    例如:<string name="app_name">静音启动</string>
    同理,如果是窗口小插件,要修改widget_name。


    3) 去掉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,其它内容保持不变即可。这种改法就是不给广告显示空间,当然你就看不到广告了。




  • 相关阅读:
    在没有备份的情况下重新创建丢失的数据文件 (Doc ID 1149946.1)
    How to recover a skipped tablespace after an incomplete recovery? (Doc ID 1561645.1)
    RMAN DUPLICATE DATABASE with SET NEWNAME failed: RMAN-05501 RMAN-05517 (Doc ID 387093.1)
    Rman Enhancements(增强) In Oracle 11g. (Doc ID 1115423.1)
    Resolving RMAN-06023 or RMAN-06025 (Doc ID 2038119.1)
    Checklist for an RMAN Restore (Doc ID 1554636.1)
    Recover With Until Time fails With RMAN-20207 When Time Is Before Last RESETLOGS (Doc ID 159405.1)
    ODA: After Apply ODA 12.2.1.2.0 Patch, Unable to Create TableSpace Due to [ORA-15001: diskgroup "DATA" does not exist or is not mounted | ORA-15040: diskgroup is incomplete] (Doc ID 2375553.1)
    How to restore and recover a database from an RMAN backup. (Doc ID 881395.1)
    How To Restore Rman Backups On A Different Node When The Directory Structures Are Different (Doc ID 419137.1)
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744859.html
Copyright © 2011-2022 走看看