• android>apk破解以及重新编译(转)


    转自“http://blog.csdn.net/cloudwu007/article/details/6851800”

    近日使用某在线听歌软件,有不少儿童故事不错,但在线听经常出现时断时续情形,而软件要求积分大于1500才可整页下载。要满足积分条件需要手动安装其推荐的数十个应用,简直是坑爹。故决定破解之。

    假定要破解apk的名字为mytest.apk,则破解步骤如下:

    步骤 1:得到resource及smali文件。

    1)得到apktool工具

    http://code.google.com/p/android-apktool/下 载获得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。解压缩下载的两个文件包,apktool-install-windows-2.1_r01-1.zip解压缩后得到的包里有aapt.exe 和apktool.bat.(注意要把apktool-1.0.0.tar.bz2解压后的一个.jar 文件copy进来)

    2).DOS命令窗口下进入到apktool.bat所在的文件夹里。

        D:\android\tool\apktool\apktool d C:\mytest.apk  C:\out 

    命令行解释:apktool d 要反编译的文件 输出文件夹

    特别注意:你要反编译的文件一定要放在C盘的根目录里,

    3).打开 C:\out文件夹 就可以得到各种资源了。

    步骤2:得到java文件

    方法a:

    1)、把apk文件改名为.zip,然后解压缩出其中的class.dex文件

    2)、安装把dex文件反编译为jar文件的工具dex2jar。http://code.google.com/p/dex2jar/downloads/list

    3)、把class.dex拷贝到dex2jar.bat所在目录。
    4)、生成jar文件classes.dex.dex2jar.jar

    1. dex2jar.bat classes.dex  

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

    6)、运行JD-GUI工具,打开上面的jar文件

    7)、File -> Save All Sources将生成Java源代码文件到c:\out

    方法b(TBV):

    1).从out目录下取得dexdump。

    2).adb shell dexdump -d -f -h /data/dalvik-cache/data@app@mytest.apk@classes.dex > twitpic.text

    步骤3:破解源代码

    1).查找位置

    由于此软件要求积分大于1500才可下载,故打开java文件,查找1500发现有三个文件有定义,PlayActivity$12.java,Cfg.java,ScoreDialog$5.java。

    PlayActivity$12.java

    1. final class PlayActivity$12  implements Runnable  
    2. {  
    3.   public void run()  
    4.   {  
    5. ...  
    6.     int i = 1500;  
    7.     int j;  
    8.     Cfg.IS_WITHAD = j;  
    9.     if (j != 0)  
    10.     {  
    11.       if (this.val$arg1 >= i) //似乎为显示广告门限控制值  
    12.         break label91;  
    13.       boolean bool2 = Cfg.HIDDEN_GUANGGAO;   
    14.       label35: boolean bool3; //???  
    15.       Cfg.HIDDEN_GUANGGAO = bool3;  
    16.       Cfg.SaveBool("hiddenguanggao", bool3);  
    17.     }  

    ScoreDialog$5.java

    1. final class ScoreDialog$5  implements Runnable  
    2. {  
    3.   public void run()  
    4.   {  
    5.     Object localObject1 = null;  
    6.     int i = 17301659;  
    7.     int j = 1500;       //Score  
    8. ...  
    9.  if (localProgressDialog != null)  
    10.       if (this.val$arg1 < j)     //可以猜出此为定义的分数之一,如不满足则弹出对话框  
    11.       {  
    12.         ScoreDialog localScoreDialog1 = this.this$0;  


    Cfg.java

    1. public class Cfg  
    2. {...  
    3.   public static final int HIDDEN_GUANGGAO_NEED_SCORE = 1500//似乎为显示广告与否的分数门限值  

    PlayActivity$12.java

    1. final class PlayActivity$12  
    2.   implements Runnable  
    3. {  
    4.   public void run()  
    5.   {  
    6.     boolean bool1 = true;  
    7.     DialogInterface.OnClickListener localOnClickListener1 = null;  
    8.     int i = 1500;  
    9. 但HIDDEN_GUANGGAO_NEED_SCORE并未被其他任何文件应用,但保险起见任然改动此值。  


    2)更改smali文件
    smali文件只是将java文件的后缀改为.smali,故可找到上述三文件对应的smali文件
    Cfg.smali

    1. .field public static final HIDDEN_GUANGGAO_NEED_SCORE:I = 0x5DC                //此处改为0x0  


    PlayActivity$12.smali

    1. .method public run()V  
    2.     .locals 6  
    3.   
    4.     .prologue  
    5.     const/4 v2, 0x1  
    6.     const/4 v4, 0x0  
    7.     const/16 v3, 0x5DC                                                        //此处改为0x0  


    ScoreDialog$5.smali

    1. .method public run()V  
    2.     .locals 10  
    3.     .prologue  
    4.     const/4 v7, 0x0  
    5.     const v5, 0x108009b                                                          //对应17301659  
    6.     const/16 v6, 0x5DC                                                           //此处改为0x0  

    步骤4 将反编译完的文件重新打包成apk文件out.apk   

    1. apktool b c:\out out_raw.apk  

    步骤5:对生成的apk签名:

    1).准备工具

    如没有安装JDK,请在Sun官方网站下载JDKhttp://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe,其实仅需要中的Keytool和Jarsigner。

    2)、准备签名文件

    1. "C:\Program Files\Java\jdk1.6.0_24\bin\keytool" -genkey -alias wendy.keystore -keyalg RSA -validity 20000 -keystore wendy.keystore  

    注意密码为6位数,如123456。

    3)、签名

    1. "C:\Program Files\Java\jdk1.6.0_24\bin\jarsigner" -verbose -keystore wendy.keystore -signedjar out.apk out_raw.apk wendy.keystore  

    此处需输入第2步的密码123456,执行完即可生成签名后的apk文件out.apk.

    安装后,发现原有限制被破解了,一切成功。

  • 相关阅读:
    mysql find_int_set
    PHPSTROM8.0 注册码(7.1也可用)
    gym 101657 D
    gym101657 C
    poj 3525
    poj1279
    poj3335
    poj 1228
    poj 1873
    poj 2074
  • 原文地址:https://www.cnblogs.com/ftrako/p/3128049.html
Copyright © 2020-2023  润新知